This is an automated email from the ASF dual-hosted git repository. ppkarwasz pushed a commit to branch build/build-all-gate in repository https://gitbox.apache.org/repos/asf/commons-xml.git
commit a8116c320797713cbffdc87ad2f444de167aa244 Author: Piotr P. Karwasz <[email protected]> AuthorDate: Sun Aug 30 22:30:40 2026 +0200 Add a build (all) gate job as the single required check Aggregate every build job into one slim gate that fails when a gating build failed, so branch protection can require a single stable check and the matrix can change shape without touching the required-checks list. A leg with continue-on-error reports success to needs and stays advisory; without always() a failed leg would leave the gate skipped, which branch protection treats as satisfied, so the gate runs always and fails explicitly. Assisted-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01MbfpcsKig16HfSe6jGhcvh --- .github/workflows/maven.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 39b7f81..434b6e9 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -219,3 +219,19 @@ jobs: android-tests/build/reports/androidTests/ if-no-files-found: ignore retention-days: 14 + + # Single required check for branch protection: fails when any gating build failed, so the matrix can + # change shape without touching the required-checks list. Legs marked experimental keep + # continue-on-error, which reports success to `needs` and stays advisory. + build-all: + name: build (all) + # The gate runs a single shell conditional; the slim image boots faster and carries no toolchain it will not use. + runs-on: ubuntu-slim + needs: [ build, build-android ] + # Without always() a failed leg would leave this job skipped, and branch protection treats a skipped + # required check as satisfied; running and failing explicitly is the only conclusion that blocks. + if: always() + steps: + - name: Fail when a gating build failed + if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') + run: exit 1
