From 6bfd75ed62b44817e596dc5449df533d997d447a Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 26 Jun 2026 17:15:56 -0700 Subject: [PATCH 1/2] Skip validate-release on smoke builds Fixes #219. The validate-release gate ran unconditionally, including in PR smoke builds. A smoke build checks out the PR head in detached HEAD, so NBGV always computes a prerelease version (X.Y.Z-g). On a main-base PR (a develop->main promotion carrying a build target) the gate's branch==main arm then fails ("public release version carries a prerelease suffix"), the build job is skipped, and the required Check pull request workflow status fails - blocking every clean develop->main promotion that includes a build change. Skip the gate for smoke builds (they never publish), keeping the job in the graph as a success so build-*'s `needs: [get-version, validate-release]` stays satisfied. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/build-release-task.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/build-release-task.yml b/.github/workflows/build-release-task.yml index 93bdf032..5fdd0ab0 100644 --- a/.github/workflows/build-release-task.yml +++ b/.github/workflows/build-release-task.yml @@ -82,8 +82,16 @@ jobs: env: SEMVER2: ${{ needs.get-version.outputs.SemVer2 }} BRANCH: ${{ inputs.branch }} + SMOKE: ${{ inputs.smoke }} run: | set -euo pipefail + # This gate guards real publishes. A smoke build checks out the PR head in detached HEAD, so NBGV always + # yields a prerelease version; on a main-base PR that would trip the public-release check and fail every + # develop->main promotion that carries a build target. Skip the gate for smoke builds (they never publish). + if [[ "$SMOKE" == "true" ]]; then + echo "Smoke build; skipping release version validation." + exit 0 + fi CORE_AND_PRE="${SEMVER2%%+*}" if [[ "$BRANCH" == "main" ]]; then if [[ "$CORE_AND_PRE" == *-* ]]; then From 272aecd992c4015a879261504733ef47a07fe725 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 26 Jun 2026 17:18:35 -0700 Subject: [PATCH 2/2] Trim validate-release smoke-skip comment to one line (Copilot review) Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/build-release-task.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/build-release-task.yml b/.github/workflows/build-release-task.yml index 5fdd0ab0..63e46bdc 100644 --- a/.github/workflows/build-release-task.yml +++ b/.github/workflows/build-release-task.yml @@ -85,9 +85,7 @@ jobs: SMOKE: ${{ inputs.smoke }} run: | set -euo pipefail - # This gate guards real publishes. A smoke build checks out the PR head in detached HEAD, so NBGV always - # yields a prerelease version; on a main-base PR that would trip the public-release check and fail every - # develop->main promotion that carries a build target. Skip the gate for smoke builds (they never publish). + # Smoke builds never publish and always version as prerelease (detached PR HEAD), which would trip the main arm. if [[ "$SMOKE" == "true" ]]; then echo "Smoke build; skipping release version validation." exit 0