From 2766b09326fd3ff331ee0ceb4a792e8be2fefbc3 Mon Sep 17 00:00:00 2001 From: Christoph Knittel Date: Sun, 18 Oct 2026 11:57:02 +0000 Subject: [PATCH] Adds a ci-ok job that summarizes the CI result The ci-ok job needs build-compiler, pkg-pr-new, api-docs and both installation test matrices, and succeeds only when all of them succeeded. The master ruleset can then require ci-ok instead of matrix check names that contain runner labels, so moving to new runners or adding jobs no longer needs a ruleset change. Review: Why always() and not !cancelled()? A skipped required check counts as passed. With always() the job also runs when a needed job fails, is skipped or the run is cancelled, and then fails. Review: Which jobs stay outside the gate? dev-playground runs only on pushes to master, and test-devcontainer was not required before; neither blocks a merge. Area: ci Output: unchanged Tests: none, because the CI run on this pull request reports ci-ok Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_014rR6jNpVHh7sx7L62iEf4u Signed-off-by: Christoph Knittel --- .github/workflows/ci.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f10dcb9090..14f2e18e11 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -662,3 +662,24 @@ jobs: node src/BeltTest.mjs shell: bash working-directory: ${{ steps.tmp-dir.outputs.path }} + + # The single CI check that the master ruleset requires. Matrix job names + # contain runner labels, so requiring this job instead keeps the ruleset + # unchanged when runners or jobs change. It runs even when a needed job fails + # or the run is cancelled, because a skipped required check counts as passed. + ci-ok: + if: ${{ always() }} + needs: + - build-compiler + - pkg-pr-new + - api-docs + - test-installation-npm + - test-installation-pnpm + runs-on: ubuntu-26.04 + steps: + - name: Check that all needed jobs succeeded + env: + NEEDS: ${{ toJSON(needs) }} + run: | + jq -r 'to_entries[] | "\(.key): \(.value.result)"' <<< "$NEEDS" + jq -e 'all(.[]; .result == "success")' <<< "$NEEDS" > /dev/null