blob: f2bd2fa9e72f8ab9e5472d5eeaaeb70983a523d8 [file] [view]
# Host unit tests in CI
Which configurations of the host unit-test suite (`ninja check` / `gn_tests.sh`
/ `build_examples.py --target *-tests*`) run in CI, when, and why.
**Keep this file in sync:** `scripts/tools/list_unit_test_steps.py` lists every
CI step that runs unit tests into `host_unit_tests.generated.txt`. When a
workflow change alters that list, run it with `--update` and update the tables
below in the same PR. The `code-lints` job in `lint.yml` runs it with `--check`.
Release branches (`v*-branch`) run their own copy of each workflow. On push they
behave like a master push; scheduled (nightly) workflows do not run on them.
## Linux and macOS host
| Configuration | Job (workflow) | PR | Master push | Nightly | Why |
| ---------------------------------------------------- | -------------------------------------------------------------- | ------------ | ------------ | ------- | --------------------------------------------------- |
| gcc, OpenSSL, `enable_rtti` | Build on Linux (python_lib) (`build.yaml`) | yes | yes | – | Builds the Python controller; also runs the suite |
| gcc, OpenSSL, `use_coverage` | Build on Linux (coverage) (`build.yaml`) | yes | yes | – | Codecov report |
| gcc, OpenSSL, memory debug checks, platform tests | Build on Linux (gcc_debug) (`build.yaml`) | – | yes | CodeQL | Only run of `chip_config_memory_debug_checks` |
| gcc, OpenSSL, `chip_logging=false`, platform tests | Build on Linux (gcc_debug) (`build.yaml`) | yes | – | – | Logging-off build |
| gcc, detail / progress / error logging off (compile) | Build on Linux (gcc_debug) (`build.yaml`) | – | yes | – | Logging-level builds |
| gcc release (`is_debug=false`) | Build on Linux (fake, gcc_release, clang, simulated) | – | yes | – | Release-mode build |
| clang ASan, OpenSSL | Build on Linux (fake, gcc_release, clang, simulated) | yes | – | – | Sanitizer run on every PR |
| clang ASan, TSan, UBSan, OpenSSL | Build on Linux (fake, gcc_release, clang, simulated) | – | yes | – | Full sanitizer set after merge |
| fake platform (`linux-fake-tests`) | Build on Linux (fake, gcc_release, clang, simulated) | yes | yes | – | Platform-independent tests |
| clang ASan, PSA | Crypto Backend Unit Tests (`unit_integration_test.yaml`) | crypto paths | crypto paths | – | Crypto backend |
| clang ASan, mbedTLS | Crypto Backend Unit Tests (`unit_integration_test.yaml`) | crypto paths | crypto paths | – | Crypto backend |
| clang ASan, BoringSSL, ICD + ARL + rotating id | Nightly Unit Tests - Linux (various features) (`nightly.yaml`) | – | – | yes | Feature flags; ~66m, `TestRead` waits on ICD timers |
| clang ASan, BoringSSL / mbedTLS / PSA | Nightly ASAN Testing across Crypto Backends (`nightly.yaml`) | – | – | yes | Crypto backends with ASan |
| clang MSan | Nightly MSAN Tests - Linux (`nightly.yaml`) | – | – | yes | Uninitialized-memory checks |
| macOS ASan, BoringSSL, `target_os="all"` | Build on Darwin (clang, simulated) (`build.yaml`) | yes | yes | – | macOS host |
"Crypto paths": `src/credentials`, `src/crypto`, `src/pw_backends`,
`third_party/pigweed`, `third_party/mbedtls`, `unit_integration_test.yaml`.
"Platform tests": `chip_build_all_platform_tests=true` (Silabs host tests).
## Embedded targets
| Configuration | Job (workflow) | PR | Master push | Why |
| ---------------------- | -------------------------------------------- | ---------- | ----------- | ------------ |
| ESP32 QEMU, mbedTLS | ESP32_QEMU (`qemu.yaml`) | yes | yes | ESP32 target |
| Tizen QEMU | Tizen (`qemu.yaml`) | yes | yes | Tizen target |
| Zephyr native_sim, PSA | nRF Connect SDK (`examples-nrfconnect.yaml`) | some paths | yes | nRF target |
## Open questions
- gcc runs the full suite three times on every PR (python_lib, coverage,
gcc_debug `chip_logging=false`). Is more than one needed?
- Release branches get no nightly coverage (#74387).