mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-02 19:39:17 +00:00
1524ed891f
#5532 consolidated ci.yml's nine cache sites into four keys with one writer each, but the writers never run to completion: ci.yml cancels superseded runs on main, and merges land far faster than its 70-minute pipeline. Measured over 15 consecutive main pushes — 12 cancelled, 2 failed, 0 succeeded. A cancelled run never reaches rust-cache's post step (cache-on-failure does not cover cancellation), so nothing was being saved and every PR paid a cold restore: 11.8-20.9 minutes of "Setup Rust environment" against 0.7-3.4 warm. Move cache writing into its own workflow whose concurrency group does not cancel in progress, and make every lane in ci.yml a pure reader. ci.yml keeps cancelling superseded runs, which is correct — nobody needs test results for a commit that is already three merges behind — while the caches still get written. Not simply disabling cancel-in-progress for main pushes in ci.yml: that would run several full pipelines concurrently on a 15-21 runner self-hosted pool that is already the bottleneck, which is the opposite of the goal. GitHub keeps at most one running plus one pending run per concurrency group, so the new workflow collapses a burst of merges into "current finishes, newest queued follows" and occupies one runner at a time. The warm builds are supersets of what the reading lanes compile, because a reader restores only what the writer saved: --all-targets for the test binaries nextest builds (including e2e_test, which test-and-lint excludes), plus the e2e-test-hooks and rio-v2 feature combinations, whose different feature resolution yields a different -Cmetadata. The ci-dev build carries the same CARGO_BUILD_JOBS limit ci.yml puts on nextest, since it links the same ~100 test binaries and three concurrent links can wedge Cargo (#5394). ci-uring is warmed on ubuntu-latest to match its reader: rust-cache's key covers runner.os and arch but not the runner label or image. Refs: rustfs/backlog#1598, rustfs/backlog#1600