From 79649288104265e14e72ed5dee0eba944f6762e5 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 14 Aug 2026 18:28:38 +0200 Subject: [PATCH] build(ci): report the required check when only .claude/ changed #1846 gated the maven.yml build job with a job-level `if:` on the `changes` output, on the reasoning that a job skipped that way still reports its check as "skipped", which required status checks accept. That holds for a plain job, but not for a matrix one. A matrix job whose condition is false is skipped before the matrix expands, so it emits a single check run named after the raw name template rather than one per matrix entry. On #1848 the reported name was literally Build and Test (JDK ${{ matrix.java }})${{ ... }} while .asf.yaml requires the context "Build and Test (JDK 17)". That context never appeared, so it stayed Pending and the pull request could not be merged - exactly the failure mode #1846 set out to avoid. Drop the job-level condition and gate the four steps instead. The matrix expands, all five checks report success under their expanded names, and no Maven build runs: a .claude-only pull request costs five idle runners for a few seconds instead of five full builds. Jenkins is unaffected - stage-level `when` has no matrix to expand. Co-Authored-By: Claude Opus 5 --- .github/workflows/maven.yml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 6d1e861123..891530f242 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -19,8 +19,8 @@ on: # Deliberately NOT filtered by path. "Build and Test (JDK 17)" is a required # status check in .asf.yaml, and a workflow skipped by path filtering never # reports its checks - they stay Pending and the pull request can never be - # merged. The build job is skipped by condition instead (see `changes` below), - # which does report, as "skipped", and satisfies the requirement. + # merged. The build job always runs instead, and its steps are skipped by + # condition when only .claude/ changed (see `changes` below). pull_request: push: branches: @@ -77,7 +77,12 @@ jobs: build: name: Build and Test (JDK ${{ matrix.java }})${{ matrix.profile == '-Pjakartaee11' && ' (Jakarta EE 11 + Spring 7)' || matrix.profile }} needs: changes - if: needs.changes.outputs.code == 'true' + # No job-level `if:` here on purpose. A matrix job whose condition is false + # is skipped *before* the matrix expands, so it reports a single check run + # named after the raw `${{ matrix.* }}` template - never "Build and Test + # (JDK 17)". The required context then never reports at all and the pull + # request stays blocked. Gate the steps instead: the matrix expands, every + # expected check reports success, and nothing is built. runs-on: ubuntu-latest strategy: fail-fast: false @@ -95,20 +100,23 @@ jobs: profile: '-Pjakartaee11' steps: - name: Checkout code + if: needs.changes.outputs.code == 'true' uses: actions/checkout@v7 - name: Setup Java ${{ matrix.java }} + if: needs.changes.outputs.code == 'true' uses: actions/setup-java@v5 with: distribution: temurin java-version: ${{ matrix.java }} cache: 'maven' - name: Maven Verify on Java ${{ matrix.java }}${{ matrix.profile == '-Pjakartaee11' && ' (Jakarta EE 11 + Spring 7)' || matrix.profile }} + if: needs.changes.outputs.code == 'true' run: mvn -B -V -DskipAssembly verify ${{ matrix.profile }} --no-transfer-progress - name: Test Summary ${{ matrix.java }} ${{ matrix.profile }} uses: mikepenz/action-junit-report@d9f48fc87bc235f7e214acf696ca5abc0a986f16 #v6.4.2 continue-on-error: true - if: always() + if: always() && needs.changes.outputs.code == 'true' with: annotate_only: true # forked repo cannot write to checks so just do annotations report_paths: |