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
Copy file name to clipboardExpand all lines: .github/release-process.md
+10-1Lines changed: 10 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@ The following process is used when publishing new releases to NuGet.org.
10
10
11
11
## 2. Prepare the release
12
12
13
-
From a local clone of the repository, use Copilot CLI to invoke the `prepare-release` skill. The skill assesses the semantic version, bumps the version in [`src/Directory.Build.props`](../../src/Directory.Build.props), runs API compatibility checks, reviews documentation, drafts release notes, and creates a pull request with all release artifacts.
13
+
From a local clone of the repository, use Copilot CLI to invoke the `prepare-release` skill. The skill assesses the semantic version, bumps the version in [`src/Directory.Build.props`](../src/Directory.Build.props), runs API compatibility checks, reviews documentation, drafts release notes, and creates a pull request with all release artifacts.
14
14
15
15
Review the PR, request changes if needed, and merge when ready.
16
16
@@ -20,6 +20,15 @@ After the prepare-release PR is merged, invoke the `publish-release` skill. The
20
20
21
21
Review the draft release on GitHub, check 'Set as a pre-release' if appropriate, and click 'Publish release'.
22
22
23
+
## Branching
24
+
25
+
The `main` branch is the next-MAJOR preview and development line; currently, it produces the `2.0.0-preview.*` series. Nightly `cron` CI on `main` publishes CI-suffixed packages to GitHub Packages.
26
+
Long-lived `release/{MAJOR}.x` branches are created on demand when a shipped MAJOR needs servicing releases. Every push to a `release/*` branch publishes a CI-suffixed package to GitHub Packages, so servicing CI packages are commit-driven rather than clock-driven.
27
+
Short-lived `release-{version}` branches are local prepare-release work branches that become pull requests, such as `release-2.0.0-preview.1` or `release-1.3.1`.
28
+
Official NuGet.org publishes occur only when a GitHub Release is created from a branch's tag.
29
+
The prepare-release skill asks for the source/base branch first so the release PR targets the same line it assessed.
30
+
For the agent-facing, structured version of these rules, see [release-branches.md](skills/shared-resources/release-branches.md).
31
+
23
32
## 4. Monitor the Release workflow
24
33
25
34
- After publishing, a workflow will produce build artifacts and publish the NuGet packages to NuGet.org
Copy file name to clipboardExpand all lines: .github/skills/bump-version/SKILL.md
+18-10Lines changed: 18 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,18 +8,21 @@ compatibility: Requires gh CLI with repo access for creating branches and pull r
8
8
9
9
Assess and bump the SDK version in `src/Directory.Build.props` to prepare for the next release. This skill owns the [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html) assessment logic — the [SemVer assessment guide](references/semver-assessment.md) is the single source of truth for version assessment criteria used across the release workflow by both the **prepare-release** and **publish-release** skills.
10
10
11
+
Use the shared [release branch reference](../shared-resources/release-branches.md) for branch roles, previous-release lookup rules, and release work-branch naming.
12
+
11
13
> **Note**: For comprehensive release preparation — including ApiCompat/ApiDiff, documentation review, and release notes — use the **prepare-release** skill, which incorporates version assessment as part of its broader workflow.
12
14
13
15
## Process
14
16
15
17
### Step 1: Read Current Version and Previous Release
16
18
17
-
Read `src/Directory.Build.props` on the default branch and extract:
19
+
Read `src/Directory.Build.props` on the current branch and extract:
18
20
-`<VersionPrefix>` — the `MAJOR.MINOR.PATCH` version
21
+
-`<VersionSuffix>` — the prerelease suffix, when present
19
22
20
-
Display the current version to the user.
23
+
The candidate version is `{VersionPrefix}` plus `-{VersionSuffix}` when the suffix is present (for example, `2.0.0-preview.1`). Display the current candidate version to the user.
21
24
22
-
Determine the previous release tag from `gh release list` (most recent **published** release). Draft releases must be ignored — they represent a pending release that has not yet shipped. Use `--exclude-drafts` or filter to only published releases when querying.
25
+
Determine the previous release tag from `gh release list` (most recent **published** release). Draft releases must be ignored — they represent a pending release that has not yet shipped. Use `--exclude-drafts` or filter to only published releases when querying. The lookup is branch-aware: from a `release/{MAJOR}.x` branch, restrict candidates to tags matching `v{MAJOR}.*`; from `main`, use the most recent published release globally. See [release-branches.md](../shared-resources/release-branches.md) for details.
23
26
24
27
### Step 2: Assess and Determine Next Version
25
28
@@ -40,26 +43,31 @@ When context about queued changes is available or can be gathered, assess the ve
40
43
41
44
#### Default Suggestion (Fallback)
42
45
43
-
When a quick bump is needed without full change analysis, suggest the next **minor** version:
46
+
When a quick bump is needed without full change analysis, suggest based on the candidate version:
44
47
45
-
- Current `1.0.0` → suggest `1.1.0`
46
-
- Current `1.2.3` → suggest `1.3.0`
48
+
-**Stable candidate** — suggest the next **minor** version:
49
+
- Current `1.0.0` → suggest `1.1.0`
50
+
- Current `1.2.3` → suggest `1.3.0`
51
+
-**Prerelease candidate** — if the suffix starts with an identifier such as `preview.` or `rc.` followed by an integer, suggest incrementing the trailing integer:
52
+
- Current `2.0.0-preview.1` → suggest `2.0.0-preview.2`
53
+
- Current `2.0.0-rc.1` → suggest `2.0.0-rc.2`
47
54
48
55
Present the suggestion and let the user confirm or provide an alternative.
49
56
50
-
Parse the confirmed version into its `VersionPrefix`component.
57
+
Parse the confirmed version into its `VersionPrefix`and `VersionSuffix` components. Stable versions have no suffix.
51
58
52
59
### Step 3: Create Pull Request
53
60
54
-
1. Create a new branch named `bump-version-to-{version}` (e.g. `bump-version-to-1.1.0`) from the default branch
61
+
1. Create a new branch named `bump-version-to-{version}` (e.g. `bump-version-to-1.1.0`) from the current branch
55
62
2. Update `src/Directory.Build.props`:
56
-
- Set `<VersionPrefix>` to the new version
63
+
- Set `<VersionPrefix>` to the confirmed stable component
64
+
- Set `<VersionSuffix>` for prerelease versions, or clear it for stable versions; add the element if it is missing
57
65
- Update `<PackageValidationBaselineVersion>` if the MAJOR version has changed
58
66
3. Commit with message: `Bump version to {version}`
59
67
4. Push the branch and create a pull request:
60
68
-**Title**: `Bump version to {version}`
61
69
-**Label**: `infrastructure`
62
-
-**Base**: default branch
70
+
-**Base**: the current branch (which, for a servicing branch like `release/1.x`, is that servicing branch — not `main`)
Copy file name to clipboardExpand all lines: .github/skills/bump-version/references/semver-assessment.md
+25-6Lines changed: 25 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -56,13 +56,31 @@ Recommend a PATCH version increment if no MAJOR or MINOR criteria are met.
56
56
- MINOR: `MAJOR.(MINOR+1).0`
57
57
- PATCH: `MAJOR.MINOR.(PATCH+1)`
58
58
59
-
**Examples** from previous release `v1.2.0`:
59
+
### Prereleases
60
60
61
-
| Level | Recommended |
62
-
|-------|-------------|
63
-
| PATCH |`v1.2.1`|
64
-
| MINOR |`v1.3.0`|
65
-
| MAJOR |`v2.0.0`|
61
+
While the candidate version uses a prerelease suffix (e.g., `X.Y.Z-preview.N`, `X.Y.Z-rc.N`), the recommended next version increments the trailing integer of the suffix: `preview.3` → `preview.4`, `rc.1` → `rc.2`.
62
+
63
+
Going to GA drops the suffix entirely: `2.0.0-rc.2` → `2.0.0`.
64
+
65
+
This is purely about how to *compute* the next version. It does **not** declare any new policy about what kinds of changes are permitted between previews — refer to the existing [versioning documentation](../../../../docs/versioning.html) for breaking-change policy.
66
+
67
+
### Branch context
68
+
69
+
The "previous release" lookup is constrained to tags matching `v{MAJOR}.*` when assessing from a `release/{MAJOR}.x` servicing branch. On `main`, the lookup is unconstrained (most recent published release globally).
70
+
71
+
The MAJOR/MINOR/PATCH classification criteria above are unchanged regardless of branch.
72
+
73
+
See [release-branches.md](../../shared-resources/release-branches.md) for branch-role definitions and previous-release lookup rules.
0 commit comments