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

Reply via email to