From 89455e3a09e25143b14b00c049d5e2140c80835c Mon Sep 17 00:00:00 2001 From: w4ffl35 <25737761+w4ffl35@users.noreply.github.com> Date: Sat, 19 Sep 2026 12:39:29 -0600 Subject: [PATCH] fix(ci): required checks must always report (#53 follow-up) The leaf lane added in #53 made the twelve heavy jobs *skip* on a leaf change, assuming a skipped job satisfies a required check. A ruleset does not treat a skipped job as satisfied, so #54 (a leaf-only PR) came back BLOCKED even though `changes` and `leaf` passed. Fix: the five required jobs (`lint`, `test (3.12)`, `core-boundary`, `published-surfaces`, `packaging-guards`) now always run; only the seven non-required heavy jobs (`test-deploy`, `hub`, `extras`, `blocked-deps`, `docs`, `client`, `headless`) skip on a leaf change. `test` keeps `needs: changes` and narrows its matrix to `3.12` when leaf, so the required `test (3.12)` still reports while three cells are cut. The `leaf` job stays as a fast extra signal; it is not a required check (the ruleset was reverted to its original five). Refs Capsize-Games/hq#14 --- .github/workflows/ci.yml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e7c06f1..07142e7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,8 +54,6 @@ jobs: echo "leaf=$leaf" >> "$GITHUB_OUTPUT" lint: # Static checks are interpreter-version agnostic; run them once. - needs: changes - if: needs.changes.outputs.leaf != 'true' runs-on: [self-hosted, linux, x64, spikeforge-ci] steps: - uses: actions/checkout@v4 @@ -84,12 +82,11 @@ jobs: test: # The full suite across every supported interpreter (python_requires). needs: changes - if: needs.changes.outputs.leaf != 'true' runs-on: [self-hosted, linux, x64, spikeforge-ci] strategy: fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12", "3.13"] + python-version: ${{ fromJSON(needs.changes.outputs.leaf == 'true' && '["3.12"]' || '["3.10", "3.11", "3.12", "3.13"]') }} steps: - uses: actions/checkout@v4 @@ -374,8 +371,6 @@ jobs: # # Deliberately torch-free: readme_renderer plus the stdlib is the whole # dependency set, so this stays one of the fastest jobs in the matrix. - needs: changes - if: needs.changes.outputs.leaf != 'true' runs-on: [self-hosted, linux, x64, spikeforge-ci] steps: - uses: actions/checkout@v4 @@ -428,8 +423,6 @@ jobs: # The static half of the core boundary: no module-level import of a # forbidden root, and no function-local import outside the lazy shims. # Pure stdlib, so no dependencies are installed. - needs: changes - if: needs.changes.outputs.leaf != 'true' runs-on: [self-hosted, linux, x64, spikeforge-ci] steps: - uses: actions/checkout@v4 @@ -509,8 +502,6 @@ jobs: packaging-guards: # The three lightweight topology guards: disjoint import roots (PEP 420), # console-script ownership, and satellite pins == compatibility.json. - needs: changes - if: needs.changes.outputs.leaf != 'true' runs-on: [self-hosted, linux, x64, spikeforge-ci] steps: - uses: actions/checkout@v4