A simple script, verify_metafiles.py, to verify the validity of
.meta
files on TeamCity. It gathers all relevant files, and verifies that each asset
has a corresponding .meta
file (i.e. search for missing .meta
files), and verifies
that that for each .meta
file, a corresponding asset exists (i.e. search for dangling
.meta
files). Each file will be reported as a separate test, which allows for easy
inspection in case of any failures.
.meta
files are an integral part of Unity's asset handling. The guids defined in these
files are used to define the links between different components. If a bad commit omits
a .meta
file, a new one might be generated by each of the developers building on top
of this commit. This can further cascade in a huge problem which would be non trivial
to fix. This script aims to reduce these kind of problems by providing a static analysis
which would indicate if such a problem has occurred. When integrated with Pull Requests,
this will allow both the developer and the reviewer to quickly identify problematic
.meta
files, and address the issue accordingly.
For more information see for example "Forgotten a .meta file? Stop the line!" or similar article on the internet.
Using this script is rather trivial, and requires just a single build step. Due to the nature of the TeamCity environment I am used to working, I prefer to use a "Command Line" step running inside a python:3.10 docker container.
The build step has the following 'Custom script:':
python ./verify_metafiles.py "./Assets" # Assuming the cwd is in the Unity project folder.
Note that you can exclude specific folders and files with the --exclude_dir
and --exclude_file
parameters.
Additionally, I have configured the "Commit status publisher" and "Docker Support", to ensure the Docker support is available and the results are published to GitHub.
Alternative to the "Command Line" build step, the "Python" build step could be used as well. The script itself has no dependencies and can be used as is.