You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Cut release/9.x before the first breaking change lands on main #64
Releases so far are trunk-based: PRs merge into main, and release.yml publishes from an immutable v* tag on main. That stops working once 10.0.0's breaking work (#53 first) starts landing on main while 9.x still needs minor or patch releases.
When: before the first PR with the breaking label (or a silent fix that changes an answer) merges into main. Not earlier. A release branch with nothing to stabilise only adds double merges.
Steps:
Cut release/9.x from the last 9.x release tag (v9.1.0 if it's out by then), or from main just before the first breaking merge.
Add release/** to the pull_request and push branch filters in .github/workflows/dotnet.yml and .github/workflows/pr-hygiene.yml. Today both only run for main, so a PR into the release branch would get no CI at all.
Protect release/** the way main is protected: up to date before merging, and the required checks Test, Integration, Pack and Consumer smoke test.
Check release.yml: it publishes from any v* tag, so a v9.x.y tag on release/9.x works. The tag must still match Directory.Build.props on that branch.
Decide how fixes move between branches. The usual way is to fix on main first and cherry-pick to release/9.x, with the PR into the release branch linking the original.
Write it down in CONTRIBUTING.md and AGENTS.md.
Mind the tracking: Closes #n only closes issues when a PR merges into the default branch. Close an issue that is fixed only on release/9.x by hand, or link it from the matching main PR.
Done whenrelease/9.x exists with CI and protection, and the first breaking PR can merge into main without blocking a 9.x release.
CI: dotnet.yml and pr-hygiene.yml now run for release/**. The first push run on release/9.x passed Test, Integration, Pack and Consumer smoke test.
Protection: the ruleset "Release branches" (id 25314882) on refs/heads/release/** requires a PR, the branch up to date, and the four checks above. It also blocks deletion and force pushes, with no bypass actors, matching main's classic protection (admins included). Status checks aren't enforced when a branch is created, so a future release/10.x can be pushed.
release.yml creates a release with --latest=false when a higher version is already Latest.
The flow is in CONTRIBUTING.md#branches-and-releases and AGENTS.md: main first, then git cherry-pick -x into a PR against release/9.x. Issues fixed only there are closed by hand.
Activity
CaffeinatedCoder commentedon Oct 17, 2026
Done.
release/9.xwas cut frommainat da90201: everything for 9.1.0 so far, plus chore: run CI on release branches and document the release/9.x flow #82.dotnet.ymlandpr-hygiene.ymlnow run forrelease/**. The first push run onrelease/9.xpassed Test, Integration, Pack and Consumer smoke test.refs/heads/release/**requires a PR, the branch up to date, and the four checks above. It also blocks deletion and force pushes, with no bypass actors, matchingmain's classic protection (admins included). Status checks aren't enforced when a branch is created, so a futurerelease/10.xcan be pushed.release.ymlcreates a release with--latest=falsewhen a higher version is already Latest.mainfirst, thengit cherry-pick -xinto a PR againstrelease/9.x. Issues fixed only there are closed by hand.v9.1.0should now be tagged onrelease/9.x.