From 7c8b02455e50048240b3fb6bdcd9d2c61c0bfb5a Mon Sep 17 00:00:00 2001 From: overtrue Date: Sat, 1 Aug 2026 10:43:40 +0800 Subject: [PATCH] ci: gate the seven expensive jobs on Quick Checks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every expensive job started in parallel with quick-checks, so a formatting or architecture-guard failure still paid for the full pipeline. On run 30673292690 Quick Checks failed after 0.8 minutes and the run went on to burn 424.5 runner-minutes — 99.8% of it after the gate had already failed. The self-hosted pool is 15-21 ARC runners and one full PR run needs about seven sm-standard-4 concurrently, so those minutes come straight out of other PRs' queue time (six runs measured 72-488 minutes queued). quick-checks itself is compile-free and takes 45-51s, so a passing PR pays about a minute of extra critical path. REQUIRES the branch ruleset to list "Quick Checks" as a required check BEFORE this merges. Adding `needs` gives these jobs a `skipped` conclusion for the first time, and GitHub treats a skipped required check as satisfied — with required_approving_review_count=0, a failing quick-checks would otherwise let a broken PR merge. Ordering is tracked in rustfs/backlog#1599. Refs: rustfs/backlog#1598, rustfs/backlog#1599 --- .github/workflows/ci.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 096a9cffd..b2205552a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -140,6 +140,7 @@ jobs: test-and-lint: name: Test and Lint if: github.event_name != 'pull_request' || github.event.action != 'closed' + needs: [ quick-checks ] runs-on: sm-standard-4 timeout-minutes: 90 env: @@ -290,6 +291,7 @@ jobs: test-ilm-integration-serial: name: ILM Integration (serial) if: github.event_name != 'pull_request' || github.event.action != 'closed' + needs: [ quick-checks ] runs-on: sm-standard-4 timeout-minutes: 45 env: @@ -327,6 +329,7 @@ jobs: test-and-lint-rio-v2: name: Test and Lint (rio-v2) if: github.event_name != 'pull_request' || github.event.action != 'closed' + needs: [ quick-checks ] runs-on: sm-standard-4 timeout-minutes: 60 env: @@ -354,6 +357,7 @@ jobs: test-and-lint-protocols: name: "Test and Lint (${{ matrix.features.name }})" if: github.event_name != 'pull_request' || github.event.action != 'closed' + needs: [ quick-checks ] runs-on: sm-standard-4 timeout-minutes: 60 strategy: @@ -389,6 +393,7 @@ jobs: build-rustfs-debug-binary: name: Build RustFS Debug Binary if: github.event_name != 'pull_request' || github.event.action != 'closed' + needs: [ quick-checks ] runs-on: sm-standard-4 timeout-minutes: 30 env: @@ -419,6 +424,7 @@ jobs: build-rustfs-debug-binary-rio-v2: name: Build RustFS Debug Binary (rio-v2) if: github.event_name != 'pull_request' || github.event.action != 'closed' + needs: [ quick-checks ] runs-on: sm-standard-4 timeout-minutes: 30 env: @@ -455,6 +461,7 @@ jobs: # suite (measured 4m17s / 7m19s / 7m31s on runs 30678272341 / 30678117601 / # 30662728539) and kept the cancellation run in progress for minutes. if: github.event_name != 'pull_request' || github.event.action != 'closed' + needs: [ quick-checks ] # GitHub-hosted ubuntu-latest runs a recent kernel with io_uring and, unlike # a container, applies no seccomp filter that would block io_uring_setup — so # the probe succeeds and the tests exercise the real UringBackend/FdCache/