From 54bef2babac3ab68da448e0b8820e050f892b5ea Mon Sep 17 00:00:00 2001 From: JacobPEvans <20714140+JacobPEvans@users.noreply.github.com> Date: Mon, 27 Apr 2026 07:57:55 -0400 Subject: [PATCH 1/2] fix(release-please): tolerate label-application race with continue-on-error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The googleapis/release-please-action@v5 step opens the release PR successfully but then immediately tries to apply `autorelease: pending` via GraphQL. The PR's global node ID hasn't propagated yet at that point, so GitHub returns "Could not resolve to a node" — failing the job even though the PR was created correctly. Adding `continue-on-error: true` lets the downstream `Find release PR number` step discover the PR via REST and continue normally. The missing label is cosmetic; release-please re-applies it on the next run. (claude) --- .github/workflows/_release-please.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/_release-please.yml b/.github/workflows/_release-please.yml index 6e88a26..997bb0d 100644 --- a/.github/workflows/_release-please.yml +++ b/.github/workflows/_release-please.yml @@ -72,8 +72,15 @@ jobs: permission-pull-requests: write permission-issues: write + # `continue-on-error` tolerates the upstream label-application race: + # release-please-action opens the PR successfully, then immediately tries + # to apply `autorelease: pending` via GraphQL — but the PR's global node ID + # hasn't propagated yet, so GitHub returns "Could not resolve to a node". + # The PR is still created and the downstream `Find release PR number` step + # discovers it via REST, so a label-only failure should not fail the job. - uses: googleapis/release-please-action@v5 id: release + continue-on-error: true with: token: ${{ steps.app-token.outputs.token }} manifest-file: .release-please-manifest.json From aeeeb2f33e72b91050661cc5e17a8d72fac503f9 Mon Sep 17 00:00:00 2001 From: JacobPEvans <20714140+JacobPEvans@users.noreply.github.com> Date: Mon, 27 Apr 2026 08:05:41 -0400 Subject: [PATCH 2/2] fix(release-please): re-fail on genuine errors when no PR is found MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit continue-on-error masks all release-please failures, not just the transient label-application race. Add a guard step that re-fails the job when the release step errored AND the downstream REST lookup finds no release PR — distinguishing a genuine auth/config/API failure from the harmless race. (claude) --- .github/workflows/_release-please.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/_release-please.yml b/.github/workflows/_release-please.yml index 997bb0d..9ddfdd8 100644 --- a/.github/workflows/_release-please.yml +++ b/.github/workflows/_release-please.yml @@ -96,6 +96,12 @@ jobs: PR_NUMBER=$(gh pr list --head "release-please--branches--${BASE_BRANCH}" --json number --jq '.[0].number // empty') echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT" + - name: Re-fail on genuine release-please error + if: "!cancelled() && steps.release.outcome == 'failure' && steps.find-pr.outputs.number == ''" + run: | + echo "::error::release-please-action failed and no release PR was found via REST. This is a genuine failure (auth/config/API error), not a transient label-application race." + exit 1 + # Disable+re-enable handles RC3 (stale auto-merge queue: PR is CLEAN with # auto-merge enabled but GitHub never executes the merge). The retry loop # handles RC2 (transient GraphQL errors from `gh pr merge --auto`).