[release-readiness] Add RC release support - #37856
Conversation
Recognize RC branches and tags, validate prerelease dependency flow, and surface missing default-channel mappings. Preserve Preview and SR behavior while covering transition, subscription, issue-filtering, and reporting edge cases with deterministic tests. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: c94d5278-b355-48eb-a6dc-ad96102f98cf
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 37856Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 37856" |
|
Azure Pipelines: 1 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
Pull request overview
Adds first-class Release Candidate (RC) support to the .github/skills/release-readiness tooling and the scheduled workflow, so RC branches/tags are discovered, tracked, and reported distinctly from Preview without “inventing” an extra Preview stage.
Changes:
- Extend tracker discovery + workflow matrix/dispatch to support
branchType: rcandrcNumber. - Update
Get-PreviewReadiness.ps1to treat Preview/RC as a unified “prerelease” lane with RC-specific checks (version metadata, dependency-flow wiring) and stage-aware issue filtering. - Update handoff generation, documentation, and tests to cover RC lifecycle transitions and dependency-flow behaviors.
Show a summary per file
| File | Description |
|---|---|
| .github/workflows/release-readiness.yml | Adds rc handling in the matrix payload and dispatches RC trackers through Get-PreviewReadiness.ps1. |
| .github/skills/release-readiness/tests/Test-ReleaseReadiness.ps1 | Adds RC branch/tag contract tests, RC window transition tests, and prerelease dependency-flow wiring tests. |
| .github/skills/release-readiness/SKILL.md | Documents RC as a first-class prerelease lane and updates usage guidance accordingly. |
| .github/skills/release-readiness/scripts/New-ReleaseHandoff.ps1 | Supports RC readiness JSON and renders RC names/sanitization alongside Preview/SR. |
| .github/skills/release-readiness/scripts/Get-PreviewReadiness.ps1 | Expands prerelease parsing from Preview-only to Preview/RC and adds RC-specific validations and reporting fields. |
| .github/skills/release-readiness/scripts/Find-ReleaseReadinessTrackers.ps1 | Adds strict RC branch/tag discovery and emits RC trackers/candidates in a dedicated lane. |
| .github/agents/release-readiness-agent.agent.md | Routes release/<major>.0.1xx-rc<N> to the prerelease lane (Get-PreviewReadiness.ps1). |
Review details
Suppressed comments (1)
.github/skills/release-readiness/scripts/Get-PreviewReadiness.ps1:891
- The comment header for
Test-PrereleaseMilestoneExistsstill describes “THIS preview” and only uses preview-shaped examples, even though the function now handles both Preview and RC milestones. Updating the synopsis/example will make the intent clearer and avoid confusion when reading RC reports.
Checks whether the GitHub milestone for THIS preview
(e.g. ".NET 11.0-preview7") exists in the repo.
.DESCRIPTION
A preview release-readiness tracker and its milestone are coupled: if
a tracker exists, the milestone must exist right away — not deferred to
- Files reviewed: 7/7 changed files
- Comments generated: 1
- Review effort level: Lite
| # Prerelease branch contract: release/<major>.0.1xx-<preview|rc><N>. | ||
| if ($Branch -notmatch '^release/(\d+)\.0\.1xx-(preview|rc)(\d+)$') { | ||
| throw "Branch '$Branch' does not match expected prerelease format 'release/<major>.0.1xx-<preview|rc><N>'." | ||
| } |
Skill Validation Results
✅ Skill Validation Results —
|
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Description of Change
Adds first-class Release Candidate support to the .NET MAUI release-readiness workflow.
The workflow now:
release/<major>.0.<band>xx-rc<N>branches and RC tags;.NET 11.0.1xx SDK RC 1;dotnet/dotnetsubscription;Root Cause
Tracker discovery and the prerelease report engine only understood Preview branches. RC branches were ignored or rejected, so the normal report could not expose a missing mapping such as:
release/11.0.1xx-rc1→.NET 11.0.1xx SDK RC 1The existing dependency-flow presentation also did not deterministically separate MAUI's outward default-channel mapping from Android/macOS-iOS inbound subscriptions and local VMR reconciliation.
Key Technical Details
dotnet/dotnetsubscription is expected; the official SDK/runtime pin is reconciled locally.darc get-subscriptionsempty-result response (exit 42 plusNo subscriptions found matching the specified criteria.) is normalized to an empty successful query so missing RC subscriptions become deterministic blockers rather thanUNKNOWN.darccontinue to report dependency-flow evidence asUNKNOWNinstead of guessing.Tests
pwsh -NoProfile -File .github/skills/release-readiness/tests/Test-ReleaseReadiness.ps1BLOCKEDwhile reporting the Android/macOS-iOS subscriptions and local VMR model separately.READY.darcempty-result handling.Limitations
RC package-level consumer installability remains
UNKNOWNuntil the workload-set package resolver supports RC package identities.Issues Fixed
N/A — release tooling enhancement.