Skip to content

Cut release/9.x before the first breaking change lands on main #64

Closed

Description

@CaffeinatedCoder

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:

  1. 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.
  2. 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.
  3. Protect release/** the way main is protected: up to date before merging, and the required checks Test, Integration, Pack and Consumer smoke test.
  4. 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.
  5. 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.
  6. Write it down in CONTRIBUTING.md and AGENTS.md.
  7. 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 when release/9.x exists with CI and protection, and the first breaking PR can merge into main without blocking a 9.x release.

Activity

  1. added this to the 10.0.0 milestone on Oct 17, 2026
  2. added
    choreBuild, CI, packaging, refactoring with no behaviour change
    area/releaseVersioning, changelogs, release wiring
    on Oct 17, 2026
  3. CaffeinatedCoder commented on Oct 17, 2026

    @CaffeinatedCoder
    OwnerAuthor

    Done.

    • release/9.x was cut from main at da90201: everything for 9.1.0 so far, plus chore: run CI on release branches and document the release/9.x flow #82.
    • 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.

    v9.1.0 should now be tagged on release/9.x.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/releaseVersioning, changelogs, release wiringchoreBuild, CI, packaging, refactoring with no behaviour change

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions