40 lines
2.1 KiB
Markdown
40 lines
2.1 KiB
Markdown
# Release Branches
|
|
|
|
Shared reference for release skills. Describes the branch roles used by the release workflow and the rules each skill follows for selecting a branch and looking up the previous release.
|
|
|
|
## Branch roles
|
|
|
|
| Branch | Purpose | CI behavior |
|
|
| ------------------- | ----------------------------------------------- | -------------------------------------- |
|
|
| `main` | Next-MAJOR preview/development line | Nightly `cron` build → GitHub Packages |
|
|
| `release/{MAJOR}.x` | Long-lived servicing branch for a shipped MAJOR | Every push → GitHub Packages |
|
|
| `release-{version}` | Short-lived release preparation branch | Built by PR CI; no package publishing |
|
|
|
|
Official NuGet.org publishes happen only when a GitHub Release is created from a branch's tag.
|
|
|
|
## Selecting a source/base branch (`prepare-release` Step 1)
|
|
|
|
1. List candidate branches via:
|
|
`gh api repos/{owner}/{repo}/branches --paginate --jq '[.[] | select(.name == "main" or (.name | startswith("release/"))) | .name]'`
|
|
2. Present the list to the user. Default selection: `main`.
|
|
3. The selected branch drives:
|
|
- Previous-release lookup (see below).
|
|
- The branch on which the candidate version is read from `src/Directory.Build.props`.
|
|
- The commit range from which PRs are collected.
|
|
- The `--base` of the PR created at the end of the skill.
|
|
|
|
## Previous-release tag lookup
|
|
|
|
- On `main`: most recent published release globally (use `gh release list --exclude-drafts --limit 50` and pick the highest semver). No MAJOR filter.
|
|
- On `release/{MAJOR}.x`: most recent published release whose tag matches `v{MAJOR}.*`. Drafts are excluded.
|
|
|
|
This is purely a baseline-selection rule. It does **not** change the breaking-change policy. See [the versioning docs](https://csharp.sdk.modelcontextprotocol.io/versioning.html) for the policy.
|
|
|
|
## Work-branch naming
|
|
|
|
Prepare-release work branches are named `release-{version}` (flat, hyphen-separated):
|
|
- `release-2.0.0-preview.1`
|
|
- `release-1.3.1`
|
|
- `release-2.0.0`
|
|
|
|
Hyphens in prerelease versions are valid in git branch names.
|