Add a release-manager agent for the dotnet/extensions release process#7643
Add a release-manager agent for the dotnet/extensions release process#7643jeffhandley wants to merge 14 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a new .github agent, release-manager, to guide the end-to-end dotnet/extensions monthly + servicing release process via four playbooks (prepare-release, publish-release, validate-release, write-release-notes), including staged reference docs and a Source Link validation script.
Changes:
- Introduces the
release-manageragent definition plus playbook READMEs and stage reference documentation for preparing, publishing/promoting, validating, and writing release notes. - Adds a PowerShell script to validate symbol availability + Source Link for published packages.
- Adds structured release-notes guidance (SQL schema/queries, package-to-area mapping, experimental API tracking, formatting templates, and PR collection/dedup rules).
Reviewed changes
Copilot reviewed 16 out of 20 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| .github/agents/release-manager.agent.md | Defines the new release-manager agent and its operating rules + playbook entrypoints. |
| .github/agents/release-manager/prepare-release/README.md | Playbook overview and stage workflow for preparing a release. |
| .github/agents/release-manager/prepare-release/references/stage-1-prepare-internal-branch.md | Stage doc for internal-branch prep steps. |
| .github/agents/release-manager/prepare-release/references/stage-2-update-dependencies.md | Stage doc for darc-driven dependency updates. |
| .github/agents/release-manager/publish-release/README.md | Playbook overview for landing, publishing, and promoting the release build. |
| .github/agents/release-manager/publish-release/references/stage-1-land.md | Stage doc for landing the staged branch and running official builds. |
| .github/agents/release-manager/publish-release/references/stage-2-publish-and-promote.md | Stage doc for NuGet publishing (user-gated) and channel promotion. |
| .github/agents/release-manager/validate-release/README.md | Playbook overview for symbol/Source Link verification and branch reconciliation. |
| .github/agents/release-manager/validate-release/references/stage-1-verify-source-link.md | Stage doc for running the Source Link validation sweep. |
| .github/agents/release-manager/validate-release/references/stage-2-reconcile-branches.md | Stage doc for internal→public→main merge choreography. |
| .github/agents/release-manager/validate-release/references/stage-3-support-page.md | Stage doc for verifying the external support-page update. |
| .github/agents/release-manager/validate-release/scripts/Test-SourceLink.ps1 | Script to validate symbol-server availability and Source Link for shipped packages. |
| .github/agents/release-manager/write-release-notes/README.md | Playbook overview for drafting GitHub release notes. |
| .github/agents/release-manager/write-release-notes/references/sql-storage.md | SQL schema + query patterns for release-notes data shaping. |
| .github/agents/release-manager/write-release-notes/references/package-areas.md | Mapping from src/Libraries/* package paths to release-notes “area groups”. |
| .github/agents/release-manager/write-release-notes/references/format-template.md | Markdown templates/rules for full vs patch release notes. |
| .github/agents/release-manager/write-release-notes/references/experimental-features.md | Guidance for auditing and reporting experimental API changes. |
| .github/agents/release-manager/write-release-notes/references/collect-prs.md | Process for collecting and deduplicating PRs in the release window. |
| .github/agents/release-manager/write-release-notes/references/categorize-entries.md | Rules for categorizing PRs into release-note sections. |
| .github/agents/release-manager/write-release-notes/references/editorial-rules.md | Editorial standards for tone/structure of release notes. |
- Move the detailed internal-branch preparation steps into references/stage-1-prepare-internal-branch.md - Slim SKILL.md to a staged overview that points to the Stage 1 reference file - Add a Stage workflow section requiring per-stage (and per-sub-stage) review, approval, and a separate commit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add references/stage-2-update-dependencies.md with .NET 9, .NET 8, and .NET 10 dependency-update sub-stages - Direct the user to release.dot.net artifacts and accept manifests/ReleaseManifest.json by paste or local path to read barBuildIds - Validate each id with darc get-build before darc update-dependencies; require darc auth prerequisite - Encode per-sub-stage commits, NuGet.config keep-both feeds, and the LTSVersion/Net10Version Versions.props edits - Revert Version.Details.xml for 8.0 and 10.0, revert eng/common for 10.0, and keep the Arcade Templating entries - Add a Stage 2 pointer section to SKILL.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f88e403f-7492-48d8-bb79-d987bd99ddc5
Includes Test-SourceLink.ps1 for automated Source Link / symbol-server validation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f88e403f-7492-48d8-bb79-d987bd99ddc5
Automates staging the internal-to-public and release-to-main merges (with the infra-file doctoring and stabilization revert); pushing and PR completion remain user-directed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f88e403f-7492-48d8-bb79-d987bd99ddc5
…t 5 releases Adds an anomaly-vs-consistency check (versioning present, infra absent, skill/tooling excluded, expected backports) against the previous five releases' corresponding merge PRs before committing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f88e403f-7492-48d8-bb79-d987bd99ddc5
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…o match Option 1 Preserves each sub-stage commit as linear history for auditability, consistent with the direct-push option. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet/extensions publishes symbols to msdl, not symbols.nuget.org; the script now queries --microsoft-symbol-server (with the nuget server as a fallback), so it no longer reports false symbols-not-indexed for valid releases. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…in-PR numbers Add a dedup step that lists every PR merged into the prior release branch and harvests the #NNNN references from each PR's title and body, excluding candidates whose number appears in that set. This covers single-PR backports (e.g. dotnet#7547 -> dotnet#7546) and aggregate backports that carry many main PRs with no title twin (e.g. dotnet#7402 -> thirteen PRs). Keep title equivalence as a fallback for backports that omit the reference, and require the ancestry, notes-body, reference-harvest, and title checks to all run before marking candidates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Move the release-specific skills out of .github/skills into a repo-local release-manager agent (.github/agents/release-manager) so they load only when the agent is selected rather than always being in scope. The agent orchestrates four playbooks: prepare-release (prepare the internal branch, update .NET dependencies), publish-release (land the branch, publish to nuget.org, promote the shipping build to the public channel so symbols reach msdl), validate-release (verify Source Link and symbols, reconcile the internal/public/main branches, confirm the support-page update), and write-release-notes (draft GitHub release notes for a tag). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Normalize the end-to-end stage numbering, correct workflow and script references, make Source Link validation portable, add timeless starter prompts for release-manager sessions, and classify workflow changes as release-note infrastructure. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d88cce81-2b82-459a-a747-f456ea15a180
- Add servicing-release-prep.md playbook covering candidate selection, cherry-pick workflow, PR template with clean/conflict notation, and DO-NOT-SQUASH + rebase-and-merge guidance - Add Stage 3 build references for monthly and servicing tracks (stage-3-build-monthly.md, stage-3-build-servicing.md); rename from stage-3-land.md - Update publish/validate/write-release-notes to be track-aware: scope anchored to servicing-prep PR description for servicing releases - Add starter prompts and session-state assessment guidance to agent - Standardize terminology: 'monthly release' and 'servicing release' throughout; remove 'shipping build' in favor of 'official release build' Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d88cce81-2b82-459a-a747-f456ea15a180
f6686eb to
d95a798
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 19 out of 22 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (2)
.github/agents/release-manager/prepare-release/references/stage-1-prepare-internal-branch.md:68
- The YAML snippet uses
$(<private-feed-read-token>), which isn’t valid Azure Pipelines variable syntax and will fail if copied verbatim. Use a syntactically valid placeholder variable name (and let the user substitute their real secret variable name/value).
.github/agents/release-manager/prepare-release/references/stage-1-prepare-internal-branch.md:77 - Same issue as above:
$(<private-feed-read-token>)is not valid Azure Pipelines syntax. Use a valid placeholder variable reference so the snippet can be copy/pasted safely.
There was a problem hiding this comment.
There're two variants of stage 3. Should this one be called stage-1-and-2...?
Adds a
release-manageragent that owns the dotnet/extensions monthly and servicing release process, consolidating the formerprepare-releaseandwrite-release-notesskills into a single agent with four focused playbooks under.github/agents/release-manager/:Version.Details.xml/ non-suffixed...Versionentries, with .NET 8 (...LTSVersion) and .NET 10 (...Net10Version) layered on top. For a servicing release it backports the selectedmaincommits ontorelease/<major>.<minor>and bumps the patch version. Pushes only after each commit is reviewed.internal/release/<major>.<minor>and runs the official build. Servicing: after the servicing-prep PR merges into the publicrelease/<major>.<minor>branch, runs the official build from there. Both tracks then publish the in-scope packages to nuget.org and ensure the shipping build is on the public.NET <major>channel so symbols reach the Microsoft symbol server (msdl). Publishing is human-gated: the agent stages the package set and provides a user-run secure key-entry helper (Sublime Text / VS Code / Notepad) so the nuget.org API key is entered, used, and shredded on the user's own machine and never handled by the agent, and the user is reminded to delete or regenerate the key afterward.Test-SourceLink.ps1), reconciles the internal, public, andmainbranches for monthly releases (skipped for servicing releases prepared directly on the public release branch), and reviews the .NET support-page update.Each playbook has a README plus staged reference files that describe its process step by step.
validate-releasealso shipsTest-SourceLink.ps1for verifying Source Link against msdl.The agent is public-safe: internal infrastructure specifics (feeds, tokens, and pipeline definitions) are deliberately kept out of the repository.
Microsoft Reviewers: Open in CodeFlow