ci: one sccache writer, all-features Build, default-features check - #4448
ci: one sccache writer, all-features Build, default-features check#4448BrianBland wants to merge 3 commits into
Conversation
Stop seven compile jobs from racing the GHA 200 uploads/min cache limit, and compile Build with the same feature set as Test so cache keys can actually hit. A parallel default-features cargo check keeps the old gate without a second codegen graph. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com>
🟡 Heimdall Review Status
|
| local lower | ||
| lower="$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')" | ||
| classified_lines=$((classified_lines + 1)) | ||
| if [[ "$lower" == *429* || "$lower" == *ratelimit* || "$lower" == *"rate limit"* || "$lower" == *"too many requests"* ]]; then |
There was a problem hiding this comment.
Minor: The numeric pattern matching (*429*, *401*, *403*) matches against the full line content, so any incidental occurrence of these strings in paths, hashes, or cache keys would cause misclassification. Consider anchoring these to HTTP-status-like contexts (e.g., *"status: 429"* or *"HTTP 429"*) or at least noting in the output that classifications are heuristic.
The first PR run persisted 215 cache objects but left SCCACHE_ERROR_LOG empty, so we still cannot tell whether write errors are GHA 429s or read-only skips. Enable SCCACHE_LOG=info on the writer and one reader for the next run. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com>
| writes_stuck=$((misses - write_errors)) | ||
| if (( writes_stuck < 0 )); then | ||
| writes_stuck=0 | ||
| fi |
There was a problem hiding this comment.
This metric assumes every cache miss leads to a write attempt, but that's not always true (e.g., compilation errors, cancelled builds, or --no-run without actual test execution). The label "Writes that stuck" could be misleading — it might report a large positive value even when writes are working correctly, just because some misses never attempted a write.
Consider renaming to something like "Misses without write errors" or adding a note in the summary output that this is an upper bound.
Keep Check as a correctness gate on affected crates instead of a second PR writer, and warm that graph on main so it can hit cache without competing for the 200 uploads/min budget. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Review SummaryCI-only PR — no Rust source code changes, no block-production-sensitive paths affected. Changes reviewed:
Assessment: No new findings beyond the two inline comments already posted. The approach is sound — designating Test and the main cache warmer as the only sccache writers avoids the GHA 200 uploads/min rate-limit contention, and the new |
|
Split the writer/READ_ONLY slice into #4474 so we can land that on |
Summary
SCCACHE_GHA_RW_MODE=READ_ONLYso we stop seven compile jobs racing the GHA 200 uploads/min limit.just build::ci/build::affected-cito--all-featuresso Build shares rustc cache keys with Test/Clippy instead of writing a parallel default-features graph.Check (default features)job (cargo check --workspace --all-targets, no--all-features) as the cheap default-feature gate.What to look for in this PR's CI
Mode: READ_WRITE, write-error count and classification (empty log + nonzero writes ≈ GHA rate limit).Mode: READ_ONLY, write errors should be 0.Test plan
READ_WRITEjob on this PRCheck (default features)is green and not the wall-clock ceiling--all-features --all-targets)Made with Cursor