ci: merge test+coverage; add ci:db / ci:prover subset gates - #167
Merged
Merged
Conversation
…set gates
Two structural changes to the heavy CI lane, each preserving 100%
coverage gate strictness and the existing test set.
1. Merge `node-tests` and `coverage` into a single `test-and-coverage`
job. The previous topology ran the same `-p node -p shared
--all-features` test set TWICE on the same self-hosted m3-ultra
pool (once plain, once under `cargo llvm-cov nextest`). The
instrumented run already produces the test execution AND the
coverage data, so the standalone `node-tests` job was pure
duplication. After the merge:
* Heavy gate still runs `cargo llvm-cov nextest … --fail-under-lines
100 --fail-under-functions 100` — same strictness, same ignore
regex, same `-E 'not binary(api_remote)'` exclusion, same
`RUSTFLAGS=--cfg coverage_nightly`.
* Test set is `-p node -p shared --all-features` (matching the
former `node-tests` scope); the coverage scope stays `-p node`
via an additional `shared/src/.*\.rs$` entry in the ignore
regex.
* One m3-ultra agent slot is occupied per PR instead of two,
directly reducing the Colima / Postgres-container pressure on
dfx01 that produced sporadic `PoolTimedOut` flakes when
multiple PRs ran the heavy lane in parallel.
2. Add two new subset-gate jobs for faster developer iteration:
* `db-tests` — gated by the new `ci:db` label. Runs the
Postgres-backed test surface (db / state / job_store / audit /
username / r2_probe / publisher / runtime / commitment / the
jobs-API router subset / the build_network_config crate-root
tests / the persist+load account_node tests) under plain
`cargo nextest run` without llvm-cov instrumentation. ~15 min.
* `prover-tests` — gated by the new `ci:prover` label. Runs the
full account_node send / mint / receive surface (Plonky2 happy
paths and pure-Rust error paths) so anything touching
account-node state transitions is covered. ~25 min.
Both subsets carry an `&& !contains(... labels.*.name, 'ci:full')`
guard so a PR labeled with both runs only the heavy gate (the
superset). Both run on the same `[self-hosted, m3-ultra]` pool
with the same env block, sccache config, DOCKER_HOST step, and
Telegram-alert step as the heavy job. They are NOT a pre-merge
gate; `ci:full` remains the authoritative check.
Job topology now:
lint-and-build → db-tests / prover-tests / test-and-coverage
(parallel, all `needs: lint-and-build`)
→ notify-failure (needs: lint-and-build + test-and-coverage)
All filter expressions consistently `^`-anchored to the module root
to disambiguate from `<other>::tests::<same-prefix>` collisions.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two structural changes to the heavy CI lane. Test set is preserved bit-for-bit; the 100% line + function coverage gate stays as the authoritative pre-merge check.
1. Merge
node-testsandcoverageinto a singletest-and-coveragejobThe previous topology ran the same
-p node -p shared --all-featurestest set twice on the same self-hosted m3-ultra pool — once plain, once undercargo llvm-cov nextest. The instrumented run already produces test execution AND coverage data; the standalonenode-testsjob was pure duplication.--fail-under-lines 100 --fail-under-functions 100.main\.rs|lib\.rs|publisher\.rs|runtime\.rs|scanner_runtime\.rs|scanner_ws\.rs|flow\.rs|job_dispatcher\.rs|_tests\.rs$|bin/.*\.rs$) plusshared/src/.*\.rs$so the coverage scope stays-p nodewhile the executor runs both crates.RUSTFLAGS=--cfg coverage_nightly, same env vars, same sccache 50 GiB cap, same-E 'not binary(api_remote)'exclusion.PoolTimedOutflakes when multiple PRs ran the heavy lane in parallel on dfx01.2. Add
ci:dbandci:proversubset gatesTwo new lightweight jobs for faster developer iteration:
db-tests(ci:db) — Postgres-backed surface (db / state / job_store / audit / username / r2_probe / publisher / runtime / commitment / jobs-API router subset / build_network_config crate-root tests / persist+load account_node tests). Plaincargo nextest run, no llvm-cov. ~15 min.prover-tests(ci:prover) — full account_node send / mint / receive surface (Plonky2 happy paths and pure-Rust error paths). ~25 min.Both carry
&& !contains(... labels.*.name, 'ci:full')so a PR labeled with both runs only the heavy gate (superset). Both run on[self-hosted, m3-ultra]with the same env / sccache / DOCKER_HOST steps and a Telegram-alert step.ci:fullremains the authoritative pre-merge gate.Job topology after this PR
Test plan
lint-and-buildonly (no labels applied → no heavy lane).ci:fulllabel on this PR →test-and-coverageruns and the 100 % gate passes.ci:dblabel on a separate PR touching only DB code →db-testsruns, no coverage gate.ci:proverlabel on a PR touching account_node prove paths →prover-testsruns.ci:full+ci:dbtogether on a PR → onlytest-and-coverageruns (subsets correctly skipped).develop → main, auto-labeledci:full) still triggers the heavy gate.Out of scope