name: tests in CI # Every integration test of the reference crate is run by a job, and none can run # empty. # # The conformance workflows name the tests they run, one `--test NAME` at a time. A test # file nobody adds to a step never runs, and a feature-gated one compiled in a step that # lacks its feature reports `ok` with no test in it. Both have happened here, silently. # scripts/check-tests-in-ci.py requires that every test file is named by a step or # listed, with its reason, in the crate's tests/NOT-IN-CI.txt, and that every # feature-gated one declares its features in Cargo.toml, so that cargo refuses to build # it without them. # # No `paths:` filter, on purpose. On this forge a filter matches the files of the push, # not of the pull request, so a later push that touches no test would leave the head with # no run of this check. The job takes seconds: it reads files and builds nothing. # One run per branch at a time. A push supersedes the run before it. concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: push: branches: [main] pull_request: # Runs on `linux-arm64`, not `linux`: these jobs read files and run scripts, so the CPU # architecture does not matter to them, and the one `linux` (x86_64) runner is the # fleet's bottleneck, with every Rust workspace's tests queued on it. jobs: covered: name: every test file is run by a job or listed with its reason runs-on: linux-arm64 timeout-minutes: 10 steps: - uses: actions/checkout@v4 # The check must be able to fail, or it is decoration. - name: The check fails closed (self-test) run: ./scripts/check-tests-in-ci-selftest.sh - name: Every test file is run or listed, and none can run empty run: python3 -I scripts/check-tests-in-ci.py