Test Manifest TOML ================== This linter verifies syntax for ManifestParser TOML files. Run Locally ----------- This Test Manifest linter can be run using mach: .. parsed-literal:: $ ./mach lint --linter test-manifest-toml Configuration ------------- The configuration excludes all non-ManifestParser TOML files (as well as generated TOML manifests). Conditional Expressions ----------------------- In order to make conditional expressions (e.g. **skip-if**, **run-if**) consistent and machine readable it is important that the variable comparisons come before flags and are in a specific order (ranking). Not all comparisons are required, but when they appear they should be in ranked order. What to put in **run-if**: should specify platform(s) where this test *should* run. This can be very general, e.g. ``os == 'linux'``. What to put in **skip-if**: platforms where the test currently does not run and has a bug to resolve the issue (with as much detail on the buggy conditions as possible). Expression ranks: 1. **os** == 'android' (or 'linux', 'mac', 'win') 2. **os_version** == '14' (see below: Platforms that are currently supported in CI) 3. **arch** == 'aarch64' (or 'x86', 'x86_64', deprecated 'armeabi-v7a') 4. **display** == 'wayland' (or 'x11' -- on linux only) 5. **buildapp** == 'browser' 6. **appname** == 'firefox' (or 'seamonkey', 'thunderbird') 7. **build_type** FLAG, one of: asan, ccov, debug, tsan, opt 8. **variant** FLAG * a11y_checks * condprof * e10s * emewmf * fission * headless * http2 * http3 * inc_origin_init * mda_gpu * msix * nogpu * remote_async * snapshot * socketprocess_e10s * socketprocess_networking * swgl * trainhop * vertical_tab * wmfme * xorigin 9. **other** FLAG * artifact * crashreporter * datareporting * devedition * early_beta_or_earlier * false (*deprecated*) * gecko_profiler * isolated_process * is_emulator * is_ubuntu (*deprecated*) * msix * nightly_build * release_or_beta * require_signing * sessionHistoryInParent * sync * true * updater * verify * verify_standalone Notes ----- Certain build types have special significance: * ``opt`` implies => ``!asan && !ccov && !debug && !tsan`` * Instead of ``!debug`` use separate conditions for ``asan``, ``ccov`` (rarely used), ``opt``, and ``tsan`` Errors Detected --------------- * Invalid TOML * Disabling a path by commenting out the section * Conditional contains explicit || * Conditional is NOT an array * Missing include file * Invalid combinations of platform and build-types (not present in CI) * ``"os == 'linux' && os_version == '22.04' && asan"`` * ``"os == 'linux' && os_version == '22.04' && tsan"`` * ``"os == 'win' && tsan`` * Non canonically formed conditions * superfluous expression parenthesis * unknown variables, flags or values * variables and flags out of canonical order Warnings Detected (fixable) --------------------------- * Missing DEFAULT section * Sections not in alphabetical order * Section name not double quoted Non idiomatic manifest warnings (fixable) ----------------------------------------- * Using ``processor`` instead of ``arch`` * Using ``bits`` instead of ``arch`` * Using ``android_version`` instead of ``os_version`` * Using platform combination variables: ``apple_catalina``, ``apple_silicon``, ``win10_2009``, ``win11_2009`` (unused) * Platforms no longer used by CI: ``Linux 18.04`` (not enforced -- will be deprecated soon), ``MacOS 11.20``, ``Windows 11.2009`` * Not specifying display on Linux * Specifying display ``x11`` on Linux 22.04 where only ``wayland`` is supported * Specifying display ``wayland`` on Linux 24.04 where only ``x11`` is supported * Using ``!debug`` instead of ``asan``, ``opt``, or ``tsan`` * Using literal boolean values for single variables like ``debug == false`` Platforms that are currently supported in CI -------------------------------------------- * ``os`` one of ``android``, ``linux``, ``mac``, ``win`` * ``os_version`` depends on os * ``os == 'android'`` * ``os_version == '14'`` arch: aarch64, x86_64 * ``os == 'linux'`` * ``os_version == '22.04'`` arch: aarch64, x86_64 * ``os_version == '24.04'`` arch: aarch64, x86_64 * ``os == 'mac'`` * ``os_version == '10.15'`` arch: x86_64 * ``os_version == '14.70'`` arch: x86_64 * ``os_version == '15.30'`` arch: aarch64 * ``os == 'win'`` * ``os_version == '10.2009'`` arch: x86_64 * ``os_version == '10.26100'`` arch: aarch64, x86, x86_64 * ``display`` required for linux * ``os == 'linux'`` * ``os_version == '22.04'`` display: wayland * ``os_version == '24.04'`` display: x11 Sources ------- * `Configuration (YAML) `_ * `Source `_ Developer Information --------------------- * The linter relies on code in: ``testing/mozbase/manifestparser/manifestparser/`` * In particular the "legal" values for variables are defined in: ``token.py`` * The linter self-test can be run with: ``./mach python-test --subsuite mozlint tools/lint/test/test_manifest_toml.py``