From 7b2d9e9bcebae90c6e72716956a1f9e496430b1d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 28 Apr 2026 17:25:31 -0700 Subject: [PATCH] fix(ci): no-op job emits same check-run name as the real one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Branch protection on `main` requires "E2E API Smoke Test" as a status check. With Design B's no-op + e2e-api job split, when paths-filter excludes a commit: - e2e-api job (name="E2E API Smoke Test"): SKIPPED - no-op job (name="no-op"): SUCCESS Branch protection counts the skipped check-run as not-satisfied → auto-promote-staging's `git push origin main` rejected with GH006. Observed 2026-04-28 00:22 UTC: every gate green at the workflow level, all_green=true in auto-promote-staging's gate-check, but the FF push itself rejected with: Required status checks "..., E2E API Smoke Test, ..." were not set by the expected GitHub apps. Fix: give the no-op job the same `name:` as the real one. Now both register as check-runs named "E2E API Smoke Test" — exactly one runs per workflow execution (mutex `if`), the other registers as skipped with the same name. Branch protection sees at least one success, requirement satisfied. Same fix applied to e2e-staging-canvas.yml's no-op (name → "Canvas tabs E2E") for symmetry, even though "Canvas tabs E2E" isn't currently in main's required check list — kept consistent so the next time a required-checks reshuffle pulls it in, it doesn't recreate this bug. Note: Design B's intent was always "emit a result auto-promote can read" — that intent was satisfied at the workflow-conclusion level (success), but missed the per-check-run-name level. This PR closes that second-order gap. --- .github/workflows/e2e-api.yml | 9 +++++++++ .github/workflows/e2e-staging-canvas.yml | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/.github/workflows/e2e-api.yml b/.github/workflows/e2e-api.yml index 201d42a1..843c7301 100644 --- a/.github/workflows/e2e-api.yml +++ b/.github/workflows/e2e-api.yml @@ -56,9 +56,18 @@ jobs: echo "api=${{ steps.filter.outputs.api }}" >> "$GITHUB_OUTPUT" fi + # Same `name:` as the real job below so the check-run produced by the + # no-op path is indistinguishable from the real one for branch + # protection purposes. Without this, the real job was always skipped on + # paths-filtered commits → branch protection on `main` saw "E2E API + # Smoke Test" as a missing required check → auto-promote-staging's + # `git push origin main` got rejected with GH006. Observed 2026-04-28 + # 00:22 UTC blocking the staging→main promote despite all gates + # actually passing at the workflow level. no-op: needs: detect-changes if: needs.detect-changes.outputs.api != 'true' + name: E2E API Smoke Test runs-on: ubuntu-latest steps: - run: | diff --git a/.github/workflows/e2e-staging-canvas.yml b/.github/workflows/e2e-staging-canvas.yml index aa26ef64..a311844f 100644 --- a/.github/workflows/e2e-staging-canvas.yml +++ b/.github/workflows/e2e-staging-canvas.yml @@ -64,9 +64,14 @@ jobs: echo "canvas=${{ steps.filter.outputs.canvas }}" >> "$GITHUB_OUTPUT" fi + # Same `name:` as the playwright job below so the check-run is + # indistinguishable from the real one for branch protection. Mirrors + # the e2e-api.yml fix in the same PR — see that file for the + # 2026-04-28 incident reference. no-op: needs: detect-changes if: needs.detect-changes.outputs.canvas != 'true' + name: Canvas tabs E2E runs-on: ubuntu-latest steps: - run: |