Skip to content

Forward-port the release-pipeline fixes from release/v10.4 - #567

Merged
ChrisonSimtian merged 3 commits into
Fallout-build:mainfrom
ChrisonSimtian:forward-port/release-pipeline-fixes
Jul 26, 2026
Merged

Forward-port the release-pipeline fixes from release/v10.4#567
ChrisonSimtian merged 3 commits into
Fallout-build:mainfrom
ChrisonSimtian:forward-port/release-pipeline-fixes

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Collaborator

Forward-ports the two release-pipeline fixes made on release/v10.4 while cutting v10.4.0-rc.4. Both were found by shipping that rc; main still carries them, and any release branch cut from main would reinherit both.

Workflow-only — no product code, no version.json change (the rc pin in #563 is release-branch-only by design and is deliberately not ported; main keeps {height} for per-commit previews).

1. Packages were stamped with a git-height suffix

v10.4.0-rc.3 shipped 22 packages named 10.4.0-rc.3.geabd043cc2. The pipeline checks out the tag, so HEAD is detached and matches none of version.json's publicReleaseRefSpec entries — they're all branch refs, and NB.GV never tests that spec against refs/tags/*. PublicRelease is now set explicitly on Test + Pack.

Worst at GA: a stable tag would publish with a prerelease-shaped suffix and sort below the version it claims to be.

2. The whole workflow_dispatch publish path was unreachable

Two independent causes, both silent — the run reported success while publishing nothing (evidence: test + pack: success, all three publish jobs skipped, green overall):

  • Skip propagation. validate-ref is skipped by design on workflow_dispatch, and a skipped job propagates through the graph. test-and-pack survives with always(), but that rescues only itself — its dependents still saw a skipped ancestor. This skipped publish-github-packages and publish-github-releases despite them carrying no condition at all.
  • Boolean compare. inputs.publish-to-nugetorg == true only matches when the run starts from the Actions UI. The REST API can only send strings and gh workflow run rejects a JSON boolean outright, so string-vs-boolean cast both to numbers ('true' → NaN) and the opt-in never matched from the CLI — including the invocation in docs/branching-and-release.md.

All three publish jobs now gate on always() && needs.test-and-pack.result == 'success', and the opt-in accepts the string as well as the boolean.

Verified on release/v10.4

v10.4.0-rc.4 published clean, unsuffixed packages, and the re-dispatch reached the nuget-org approval gate instead of skipping. Tag-push behaviour is unchanged — validate-ref still gates it, nuget.org still needs both the flag and the environment approval.

Runbook wording is a separate follow-up PR.

ChrisonSimtian and others added 2 commits July 27, 2026 01:12
The release pipeline checks out the tag being released, so HEAD is detached
and matches none of version.json's publicReleaseRefSpec entries — they are
all branch refs, and NB.GV never tests that spec against refs/tags/*. NB.GV
therefore treated every tag build as a non-public release and appended the
git height to the package version: v10.4.0-rc.3 shipped 22 packages named
10.4.0-rc.3.geabd043cc2 rather than 10.4.0-rc.3.

Setting PublicRelease explicitly on the Test + Pack step is the documented
override and the only one that works here; adding a refs/tags pattern to
publicReleaseRefSpec has no effect. Verified locally: Pack produces
10.4.0-rc.4.g03e52ff395 without it and a clean 10.4.0-rc.4 with it.

This matters most at GA — a stable tag would otherwise publish with a
prerelease-shaped suffix and sort below the version it claims to be.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit df3d4f2)
Every job downstream of test-and-pack was unreachable on a workflow_dispatch
run, so the manual path — the documented way to publish to nuget.org, and the
documented way to retry a partial publish — silently published nothing while
reporting success. Two independent causes:

validate-ref is skipped by design on workflow_dispatch (`if: event_name ==
'push'`), and a skipped job propagates through the dependency graph.
test-and-pack survives that with `always()`, but that rescues only itself: its
own dependents still saw a skipped ancestor and were skipped too. This hit all
three publish jobs, including the two that carry no condition of their own.

Separately, the nuget.org opt-in compared `inputs.publish-to-nugetorg == true`.
A `type: boolean` input is only a real boolean when the run starts from the
Actions UI; the REST API can only send strings, and `gh workflow run` rejects a
JSON boolean outright. Comparing a string to a boolean casts both to numbers
('true' → NaN, true → 1), so the opt-in never matched from the CLI — including
the exact invocation in docs/branching-and-release.md.

Both fixed: the publish jobs gate on `always() && needs.test-and-pack.result ==
'success'`, and the opt-in accepts the string as well as the boolean. Tag-push
behaviour is unchanged — validate-ref still gates it, and nuget.org still needs
both the flag and the environment approval.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 1a64ac9)
The environment URL read https://www.nuget.org/profiles/Fallout, which is not
the publishing account — the packages live under the Fallout.build profile
(22 packages). The link is what a maintainer clicks from the deployment entry
after approving a nuget.org push, so it sent them somewhere unrelated.

Display-only: the URL never affected which packages were pushed or where.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ChrisonSimtian
ChrisonSimtian marked this pull request as ready for review July 26, 2026 13:40
@ChrisonSimtian
ChrisonSimtian merged commit 989f4d8 into Fallout-build:main Jul 26, 2026
1 check passed
@ChrisonSimtian
ChrisonSimtian deleted the forward-port/release-pipeline-fixes branch July 26, 2026 13:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working target/vCurrent Targets the current version

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant