Repository navigation
CI: start coverage and e2e-build without waiting on clippy - #1682
Conversation
Assisted-by: Claude Code:claude-opus-5-5
Every CI run held coverage and e2e-build, the two chains on the ci-ok critical path, for ~1.4 min until clippy finished, only to read the reuse and pr_unchanged outputs that clippy set in its first second. Clippy failed in none of 256 PR runs in the last 7 days, so the gate cost time on every run and saved nothing. Move the two reuse checks into release-readiness, which already runs on every event in ~10 s with no needs, so no job is added. coverage and e2e-build now wait only for it; every other job that reads the outputs needs both. A red clippy still fails ci-ok, and merge-queue fail-fast still cancels the queue run on it. The scheduling tests now pin the new graph and check that every job reading needs.<job>.outputs lists <job> in its needs. Fixes #1681 Assisted-by: Claude Code:claude-opus-5-5
With e2e-build no longer waiting for clippy, a PR or main push with a clippy error would still run every e2e and cargo-vex leg. Those legs now wait for clippy themselves, so a red clippy wastes only coverage and e2e-build. clippy finishes before e2e-build on a normal run, so the legs start no later than before. Also fix the comments the move left stale and make the scheduling test name exactly which jobs may skip clippy. Assisted-by: Claude Code:claude-opus-5-5
|
BugBot review Generated by Claude Code |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit e312474. Configure here.
|
Labeled Ready for review (burn-down agent).
Generated by Claude Code |
Final review briefWhat it does. Moves the two CI-reuse checks (and their Risk: low. Only the job graph and output wiring change. Cache keys, concurrency, triggers and runners are untouched, and the Look here
Verified.
Changes I made. None. Open questions (non-blocking)
Auto-merge is armed: approving sends it straight to the merge queue. Generated by Claude Code |
|
[agent] On the final review's second open question: merge-queue fail-fast is in a workflow, not a queue setting. Generated by Claude Code |
LLM Description written by Claude Code:claude-opus-5-5
Fixes #1681
Problem
coverageande2e-buildhadneeds: clippyon every run. They needed only clippy'sreuse/pr_unchangedoutputs, which two API checks set in clippy's first second. So both critical-path chains started ~1.4 min late (run 39880331011: clippy 00:48:50 to 00:50:13, coverage starts 00:50:14). clippy failed in 0 of 256 PR runs in the last 7 days, so the gate cost time on every run and saved nothing.Change
ci-reuse-merge-group.py,ci-reuse-pr-head.py), theiractions: readpermission and thereuse/pr_unchangedoutputs move fromclippytorelease-readiness. That job already runs on every event in ~10 s on Depot-4 with noneeds, so no job is added. It also getstimeout-minutes: 10.coverageande2e-buildnowneeds: release-readinessonly.[release-readiness, clippy], so its gating is unchanged.e2e,e2e-extended,e2e-full,cargo-vex-matrix,cargo-vex-matrix-full) now need[e2e-build, clippy], so a red clippy still skips the e2e fan-out. On a normal run clippy (~1.4 min) finishes at about the same time as e2e-build (~0.2 + 1.25 min), so those legs don't start later.clippykeeps its name and stays required.ci-ok'sneedslist is unchanged; it already lists both jobs. The Depot mapping and theDISABLE_DEPOT_RUNNERSswitch are unchanged.windows-compile-check, merge-queue fail-fast and push reuse are untouched.Runner usage (lean PR run)
coveragestartci-okMeasured on this PR
Run 39903308723 (head e312474):
release-readiness04:59:56 → 05:00:05.coverageande2e-buildstarted at 05:00:06, whileclippywas still running until 05:01:26. The Gradle e2e leg started at 05:01:27, right after clippy (e2e-build finished at 05:01:23).ci-okwas green at 05:06:29: 37 checks passed, 50 were skipped by the lean scope, none failed. Bugbot reviewed e312474 with no findings.Tradeoffs and review findings not changed
release-readinessinstead of adding a job.ci-okfails either way. The cases are a version-bump PR whose CHANGELOG section or tag isn't ready yet, or a transientgit fetcherror in the lint. In those cases the author gets the lint error first, and a re-run of failed jobs re-runs the skipped ones. A dedicatedpreflightjob would avoid this at the cost of one extra runner per run. I didn't add one because PR and merge-queue usage must not grow.ci-reuse-pr-head.pystill takes the previous run'sclippysuccess as evidence that the run wasn't draft-skipped (finding). Reuse also requires the previousci-okto be green, and a failedrelease-readinessfailsci-ok, so a run whose gated tier never ran can't count as evidence. Not changed.Tests
scripts/tests/test_ci_scheduling.pynow pins the new graph. Onlycoverage,e2e-buildandwindows-compile-checkmay skip clippy, and the e2e consumers' exactneedsare asserted. A new test checks that every job readingneeds.<job>.outputslists<job>in itsneeds, because otherwise the output is silently empty and every reuse gate turns off.ci.ymlthe updated test file fails 21 subtests; with this changepython3 -B -m unittest discover -s scripts/testsruns 369 tests, all OK (6 skipped). Removingclippyfrome2e-extended's needs makes the test fail, as intended.actionlint1.7.7: the same 37 pre-existing findings as main (YAML anchors), no new ones.zizmor --offline: 59 findings, the same as main. A PyYAML parse confirms everyneeds.X.outputsreference has X in itsneeds.#1639 also touches
ci.yml, but it is a no-op against main (its uv pin landed in aea79f5) and changes different lines.https://claude.ai/code/session_01U44M4RmSQr6xHiiJxjzrvx
Generated by Claude Code