ci: run the invariant checks once instead of per matrix leg - #42
Merged
Conversation
The server-and-driver matrix has five legs — mock, aer, quantify, qblox, sim — and every one of them ran the same `go vet`, the same `ruff`, and the same CLI suite. Four redundant copies of each. `lint-go` depends on `build-dashboard`, so each leg also built the dashboard twice: once as an explicit step and once as that prerequisite. Ten dashboard builds a run, of which five did nothing. Those three checks move to a `lint-and-test-shared` job that runs once. The matrix keeps only what actually varies by extra: the dependency set, the extra's own Python tests, and its driver end-to-end run. The dashboard build stays on the legs that run a driver end to end, because `build_server` is a bare `go build` and main.go embeds the dist — but not on `sim`, which runs no driver. Both publish gates gain the new job, so a lint failure still blocks a release. Also wires in `make test-dashboard`. The target has existed since the graph work but CI invokes targets individually rather than through `make test`, so the dashboard's unit tests have never run there. It goes ahead of the Cypress step: a broken helper should fail in seconds, not as a puzzling assertion against a live server four minutes later. Not addressed here: the `sim` leg pays for the whole thirty-three-node DAG walk twice, once per scheduler, at ~90s each. Measured, that is 78% of test_calibration_loop.py, and it is evenly spread across the routines — the slowest is `ramsey` at 3.7s — so there is nothing to trim without weakening the tier-3 fits. Splitting the two schedulers into their own legs would halve that wall clock, and is worth measuring once this lands.
ch-ahindura
force-pushed
the
hotfix/slow-ci-tests
branch
from
August 7, 2026 15:01
7cc856f to
bf7281a
Compare
ch-ahindura
force-pushed
the
hotfix/slow-ci-tests
branch
from
August 7, 2026 16:25
61393ee to
b3a0395
Compare
…smon eigenvalue caching
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.
The server-and-driver matrix has five legs — mock, aer, quantify, qblox, sim — and every one of them ran the same
go vet, the sameruff, and the same CLI suite. Four redundant copies of each.lint-godepends onbuild-dashboard, so each leg also built the dashboard twice: once as an explicit step and once as that prerequisite. Ten dashboard builds a run, of which five did nothing.Those three checks move to a
lint-and-test-sharedjob that runs once. The matrix keeps only what actually varies by extra: the dependency set, the extra's own Python tests, and its driver end-to-end run.The dashboard build stays on the legs that run a driver end to end, because
build_serveris a barego buildand main.go embeds the dist — but not onsim, which runs no driver.Both publish gates gain the new job, so a lint failure still blocks a release.
Also wires in
make test-dashboard. The target has existed since the graph work but CI invokes targets individually rather than throughmake test, so the dashboard's unit tests have never run there. It goes ahead of the Cypress step: a broken helper should fail in seconds, not as a puzzling assertion against a live server four minutes later.Not addressed here: the
simleg pays for the whole thirty-three-node DAG walk twice, once per scheduler, at ~90s each. Measured, that is 78% of test_calibration_loop.py, and it is evenly spread across the routines — the slowest isramseyat 3.7s — so there is nothing to trim without weakening the tier-3 fits. Splitting the two schedulers into their own legs would halve that wall clock, and is worth measuring once this lands.