From 58e3dc5d45ac425108e5ddba7e66af2704064bfa Mon Sep 17 00:00:00 2001 From: Bryan Thompson Date: Fri, 29 May 2026 17:08:25 -0500 Subject: [PATCH] bump: fail the per-entry check-dispatch step when a dispatch fails The dispatch step logged each failed gh workflow run as a warning and exited 0, so a transient API error or rate limit could leave a per-entry bump PR missing a required check while the bump run still showed green. The composite action skips slugs with an open PR, so the stranded PR was never retried. Attempt every dispatch (one failure must not strand the other branches), record failures via a temp file (the while loop runs in a pipe subshell), then emit an error and exit non-zero if any dispatch failed, so the bump run goes red and the affected PR can be re-dispatched. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/bump-plugin-shas.yml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/bump-plugin-shas.yml b/.github/workflows/bump-plugin-shas.yml index 64345265..4fb48e57 100644 --- a/.github/workflows/bump-plugin-shas.yml +++ b/.github/workflows/bump-plugin-shas.yml @@ -64,8 +64,11 @@ jobs: # pr_url} entries emitted by the composite action when pr-mode is # per-entry. All three (scan / check / validate) are required on main and # none fire on the GITHUB_TOKEN-opened PR, so each must be dispatched. - # A single failed dispatch (transient API error) must not strand the - # remaining branches, so failures are logged as warnings, not fatal. + # A single failed dispatch (transient API error / rate limit) must not + # strand the remaining branches, so we attempt every dispatch, then fail + # the step if any failed: a missing required check would otherwise leave + # its bump PR silently blocked behind a green run, and the composite + # action skips slugs with an open PR so it would never be retried. - name: Dispatch required checks per per-entry PR if: steps.bump.outputs.pr-urls != '' && steps.bump.outputs.pr-urls != '[]' env: @@ -73,12 +76,19 @@ jobs: PR_URLS: ${{ steps.bump.outputs.pr-urls }} run: | set -euo pipefail + dispatch_failures="$(mktemp)" jq -c '.[]' <<<"$PR_URLS" | while read -r entry; do branch=$(jq -r '.branch' <<<"$entry") name=$(jq -r '.name' <<<"$entry") for wf in scan-plugins check-mcp-urls validate-plugins; do echo "Dispatching ${wf}.yml against $branch ($name)" - gh workflow run "${wf}.yml" --ref "$branch" \ - || echo "::warning::Failed to dispatch ${wf}.yml against $branch ($name) — required check may be missing on its PR" + if ! gh workflow run "${wf}.yml" --ref "$branch"; then + echo "::error::Failed to dispatch ${wf}.yml against $branch ($name) — required check will be missing; re-dispatch with: gh workflow run ${wf}.yml --ref $branch" + echo "${wf} ${branch}" >> "$dispatch_failures" + fi done done + if [ -s "$dispatch_failures" ]; then + echo "::error::$(wc -l < "$dispatch_failures" | tr -d ' ') required-check dispatch(es) failed; the affected bump PR(s) are blocked until re-dispatched (see annotations above)." + exit 1 + fi