Repository navigation
ci: bound the required aggregate check and group the ungrouped PR workflows - #13804
Conversation
Two properties nothing in CI can complain about, because neither one makes anything fail. A job without `timeout-minutes` inherits GitHub's six-hour default. Every job in ci.yml declares one between 5 and 20 minutes except `ci-status` -- the required aggregate, the check every pull request in this repository is blocked on. A hang there blocks the repository for six hours and reads as "still running" the whole time. Across all five workflows that own a required context, it is the only job without a bound. A `pull_request` workflow with no concurrency group starts a fresh run per push and lets the superseded ones run to completion. Most of the repository already groups; five path-filtered workflows have no group at all. Both rules are derived, not listed. Required contexts are matched to the jobs that produce them, and a context that stops matching any job fails this test rather than quietly guarding nothing. Having a group is the requirement, not what it does with a superseded run: repair-nightly-appcast-content-types.yml sets `cancel-in-progress: false` on purpose because it writes to R2. The shape is borrowed from quarry's tests/test_ci_policy.py, which keeps this kind of invariant in one readable place instead of hoping nobody regresses it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`ci-status` gets `timeout-minutes: 5`, matching `web-status`, the equivalent aggregate in web-validation.yml. It runs one step that reads `needs` and decides; every other job in ci.yml was already bounded between 5 and 20 minutes. ci-cache-receipts, cmux-cloud-cli, indexnow-tests, localization-catalog and r2-upload-tests get a concurrency group keyed by ref, cancelling only on pull_request so a push to main is never interrupted. That is the idiom cloud-machine-tests.yml and cloud-task-local-tests.yml already use. All five are path-filtered, so they fire rarely -- but when they do fire they fire on a branch someone is actively pushing to, which is exactly when superseded runs pile up. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Warning Review limit reachedNext included review available in 9 minutes. View limit detailsLimit details: You’ve used all 10 included reviews currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Repository: manaflow-ai/cmux/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (9)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
All contributors have signed the CLA ✍️ ✅ |
|
Correction to the last paragraph of this PR's description. I wrote that That makes its untimed jobs a live problem rather than a dormant one — they run on every web pull request and gate |
Two invariants nothing in CI can complain about, because neither one makes anything fail. Both are measured, and the first commit shows the lint failing on
mainwith exactly six findings.ci-statushad no timeoutA job without
timeout-minutesinherits GitHub's six-hour default.ci-statusis the required aggregate — the check every pull request in this repository is blocked on — and it runs one step that readsneedsand decides. A hang there blocks the repository for six hours and reads as "still running" the whole time.Every one of its ten siblings in
ci.ymlis bounded between 5 and 20 minutes, and across all five workflows that own a required context it was the only job without a bound. That makes it drift rather than intent, so it now matchesweb-status, the equivalent aggregate inweb-validation.yml, at 5.Five
pull_requestworkflows had no concurrency groupci-cache-receipts,cmux-cloud-cli,indexnow-tests,localization-catalog,r2-upload-tests. Without a group, each push starts a fresh run and lets the superseded ones finish. They are all path-filtered so they fire rarely — but when they fire it is on a branch someone is actively pushing to, which is exactly when superseded runs pile up.They get a ref-keyed group that cancels only on
pull_request, so a push tomainis never interrupted. That is the idiomcloud-machine-tests.ymlandcloud-task-local-tests.ymlalready use.The lint
Both rules stay derived rather than listed. Required contexts are matched to the jobs that produce them, and a context that stops matching any job fails the test rather than quietly guarding nothing.
Having a group is the requirement, not what it does with a superseded run —
repair-nightly-appcast-content-types.ymlsetscancel-in-progress: falsedeliberately because it writes to R2, and serializing answers the same problem. My first draft flagged it; that was the lint being wrong, not the workflow.The shape is borrowed from quarry's
tests/test_ci_policy.py, which keeps this class of invariant in one readable file instead of hoping nobody regresses it.Also measured, deliberately not changed
47 of 233 jobs repo-wide declare no
timeout-minutes. None of them run on macOS — the expensive class is already fully bounded, which is why this PR does not touch them. The remaining ones are Linux, where a six-hour hang costs less, and picking 47 timeout values I cannot validate would trade a small bill for new flakiness. Worth a follow-up by someone who knows the expected runtimes.ci-web.ymlhas three untimed jobs and zero runs in recent history despite being edited on 2026-09-21. I did not touch it; someone should confirm whether it is still meant to fire.🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.Summary by cubic
Bound the required
ci-statusaggregate job and give five path-filteredpull_requestworkflows a concurrency group, so a hung check can't block the repo for six hours and superseded runs don't pile up on active branches.ci-statusgets a 5-minute timeout, matchingweb-status; every other job inci.ymlwas already bounded.ci-cache-receipts,cmux-cloud-cli,indexnow-tests,localization-catalog, andr2-upload-testsget a ref-keyed group that cancels only onpull_request.pull_requestwithout a concurrency group.Written for commit 195b301. Summary will update on new commits.