ci: stopgap — switch release workflow to workflow_dispatch only#268
Merged
Conversation
Auto-publish on every push to main has been firing a Fallout.* release on every merge — about 20 patch versions in recent days for what was mostly internal cleanup (license-header strip, doc updates, etc). That generates a Dependabot upgrade PR in every downstream consumer repo, every morning. The proper restructure (tag-triggered publishes on release/vN branches with three GitHub Environments — nuget-org / github-packages / github-releases) is tracked under milestone #13 / RFC #267. Until that lands, this stopgap disables the auto-trigger and switches the release workflow to manual workflow_dispatch only. What changes for maintainers: - Releases no longer happen automatically on merge to main. - To cut a release: Actions → "release" → "Run workflow" → pick the ref. - Cherry-pick + tag flow on release/vN branches arrives with the full restructure under #13. What changes for consumers: dependabot stops screaming. Refs #267, milestone #13. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced May 29, 2026
ChrisonSimtian
added a commit
that referenced
this pull request
May 29, 2026
…ease/vN (#270) (#278) Updates docs/agents/release-and-versioning.md to reflect the new branching model now that release/v11 has been cut (#269) and the auto-publish stopgap landed (#268). Branching section: - main is now the integration trunk (PRs target here), no longer auto-publishes - release/vN is the release channel per major (release/v11 exists; release/v12 will follow when v12 ships) - Hotfix flow noted as "cherry-pick from main" - Stale "No release/* branches" line removed New "Branch protection on release/vN" subsection captures the policy that gets applied to every release/vN at cut time: - Required ubuntu-latest status check - Linear history - CODEOWNER review required - Stale-approval dismissal - Direct pushes / force-pushes / deletions blocked - Conversation resolution required - Admins can bypass in emergencies Release pipeline section updated to acknowledge the workflow_dispatch stopgap and reference the pending tag-triggered shape under #274, and the NUGET_API_KEY move-to-environment-secret under #273. Closes #270 (the API-level branch protection on release/v11 was already applied; this PR is the documentation half of the acceptance criteria). Refs milestone #13, RFC #267. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4 tasks
ChrisonSimtian
added a commit
that referenced
this pull request
May 29, 2026
Refactors .github/workflows/release.yml from the workflow_dispatch-only stopgap (#268) into the proper release-branch model shape per RFC #267 and milestone #13. ## Trigger - push: tags 'v*' is the primary trigger. The new validate-ref job verifies the tag is reachable from a release/v* branch and fails fast otherwise. - workflow_dispatch with a required `tag` input remains as a fallback for re-runs after a transient API failure. --skip-duplicate on each publish step keeps re-runs idempotent. ## Job graph validate-ref (skipped on workflow_dispatch) ↓ test-and-pack (Test + Pack via `dotnet fallout`, uploads output/packages/*.nupkg as Actions artifact) ↓ ↓ ↓ (fan-out) publish-nuget-org (env: nuget-org, Fallout.*.nupkg → nuget.org, gated) publish-github-packages (env: github-packages, Nuke.*.nupkg → GH Packages, unguarded) publish-github-releases (env: github-releases, all *.nupkg → GH Release, unguarded) Each publish job declares `environment:` so a per-channel deployment record appears under the Deployments tab. The nuget-org env requires approval (set in #272); the other two are unguarded. ## Channel routing - nuget.org gets ONLY Fallout.* — Nuke.* shim IDs belong to the original NUKE maintainer on nuget.org (#47). - GitHub Packages gets the Nuke.* shims — preserves the existing behaviour from the previous workflow. - GitHub Releases gets all *.nupkg attached to the tag's release page, with auto-generated notes via `gh release create --generate-notes`. Idempotent — if the release already exists (workflow_dispatch retry), uploads/replaces assets via --clobber. ## Tag protection ruleset (applied separately via API) A repository ruleset now blocks creation/deletion/update of tags matching v* for non-admins. Bypass actors: RepositoryRole 5 (admin). Combined with the env approval gate on nuget-org, this gates production releases at two layers. The ruleset is configured via API rather than in this YAML (ruleset:17017817). It was created in the same change but lives in repo Settings → Rules, not in the workflow file. ## Build.cs not touched The existing `IPublish.Publish` target and `ICreateGitHubRelease` from Build.cs are bypassed by this workflow — CI now calls `dotnet nuget push` and `gh release create` directly. The targets are still available for local invocation; consolidating or removing them is a follow-up. ## Docs docs/agents/release-and-versioning.md "Release pipeline" section rewritten to describe the new shape (trigger, jobs, channel routing, tag protection, fallback dispatch). CHANGELOG entry deferred to the umbrella docs PR #276 per the pattern set in earlier sub-issues — one consolidated v11-restructure entry rather than fragmented per-PR entries. Refs #274, milestone #13. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ChrisonSimtian
added a commit
that referenced
this pull request
May 29, 2026
…13) (#298) While v11 churns through the rebrand + plugin-foundation work, nothing should reach the nuget.org userbase. This routes v11 releases to the GH Packages feed instead: - Build.cs: IPublish.NuGetSource -> GitHub Packages feed (defensive — the Publish target itself can no longer reach nuget.org), NuGetApiKey fed the GITHUB_TOKEN. - release.yml: NuGetApiKey -> secrets.GITHUB_TOKEN; drop the nuget-org Environment binding (no nuget.org secret in play). Flags the lost approval gate + how to re-add one for GH Packages. Also lands tools/unlist-v11.0.1-18.json — the record of the 199 existing 11.0.x (package,version) pairs being unlisted from nuget.org (cleanup of what auto-published between the #220 major bump and the #268 stopgap). nuget.org stays reserved for the maintenance 10.x line and a future stabilised v11. Revisit the feed when v11 stabilises. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Auto-publish on every push to
mainhas been firing aFallout.*release on every merge — ~20 patch versions accumulated in recent days for what was mostly internal cleanup (license-header strip, AGENTS.md doc updates, the Fallout.Core extraction commits). Every release generates a Dependabot upgrade PR in every downstream consumer repo, every morning. That's recurring fan-out pain across the entire userbase, paid by them, for changes that are mostly invisible to them.This stopgap stops the noise today. The proper restructure — tag-triggered publishes on
release/vNbranches with multi-channel CD via GitHub Environments — lands as the rest of milestone #13 (driven by RFC #267).What
.github/workflows/release.ymltrigger changed frompush: branches: maintoworkflow_dispatch:with an optionalrefinput (defaults tomain; will berelease/v11once cut).[Unreleased] — 11.0→### Process.What this changes operationally
releaseworkflow → "Run workflow" → pick the ref. The job runs identically to before (dotnet fallout Test Pack Publish+ theNuke.*shim push to GH Packages).[Unreleased] — 11.0and ship whenever a release is manually triggered.ubuntu-latest,windows-latest,macos-latest) is unchanged — PR validation and post-merge validation still run as before.What does NOT change
Fallout.*package surface, contents, or quality.Test plan
ubuntu-latestshould run since we don't touch source code).releaseworkflow.🤖 Generated with Claude Code