Skip to content

[release-readiness] Add RC release support - #37856

Merged
kubaflo merged 1 commit into
mainfrom
pureween-rc1-release-readiness
Aug 26, 2026
Merged

[release-readiness] Add RC release support#37856
kubaflo merged 1 commit into
mainfrom
pureween-rc1-release-readiness

Conversation

@PureWeen

Copy link
Copy Markdown
Member

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:

  • discovers strict release/<major>.0.<band>xx-rc<N> branches and RC tags;
  • tracks RC candidate, in-flight, shipped, and cut-before-bump transitions without inventing Preview 8;
  • derives the matching SDK channel, such as .NET 11.0.1xx SDK RC 1;
  • validates the outward MAUI default-channel mapping independently from inbound Android and macOS/iOS subscriptions;
  • requires RC subscriptions to be enabled and on the matching channel while preserving Preview's existing non-blocking subscription severity;
  • keeps VMR reconciliation local and blocks only an enabled dotnet/dotnet subscription;
  • emits missing mappings as explicit blockers in JSON and Markdown;
  • routes RC trackers through workflow reporting and release-handoff generation;
  • filters release-relevant issues by the active Preview/RC stage.

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 1

The 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

  • Outward flow: MAUI branch builds require an enabled default-channel mapping to the matching Preview/RC SDK channel.
  • Inbound flow: Android and macOS/iOS subscriptions are checked separately for target branch, channel, and enabled state.
  • VMR: no enabled dotnet/dotnet subscription is expected; the official SDK/runtime pin is reconciled locally.
  • CLI behavior: the exact darc get-subscriptions empty-result response (exit 42 plus No subscriptions found matching the specified criteria.) is normalized to an empty successful query so missing RC subscriptions become deterministic blockers rather than UNKNOWN.
  • Public safety: environments without authenticated darc continue to report dependency-flow evidence as UNKNOWN instead of guessing.

Tests

  • pwsh -NoProfile -File .github/skills/release-readiness/tests/Test-ReleaseReadiness.ps1
    • 2,466 passed, 0 failed
  • Live RC1 report validation confirmed the generated JSON and Markdown identify the missing default-channel mapping as BLOCKED while reporting the Android/macOS-iOS subscriptions and local VMR model separately.
  • Live enabled Preview mapping validation confirmed existing Preview mapping detection remains READY.
  • Focused fixtures cover RC branch/tag discovery, RC1/RC2 transitions, channel derivation, mapping missing/present, subscription state and severity, VMR enabled/disabled behavior, stage-aware issue filtering, and exact darc empty-result handling.

Limitations

RC package-level consumer installability remains UNKNOWN until the workload-set package resolver supports RC package identities.

Issues Fixed

N/A — release tooling enhancement.

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
Copilot AI lite review requested due to automatic review settings August 26, 2026 20:54
@PureWeen
PureWeen temporarily deployed to copilot-pat-pool August 26, 2026 20:54 — with GitHub Actions Inactive
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 37856

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 37856"

@azure-pipelines

Copy link
Copy Markdown
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.

@PureWeen
PureWeen temporarily deployed to copilot-pat-pool August 26, 2026 20:54 — with GitHub Actions Inactive
@PureWeen
PureWeen temporarily deployed to copilot-pat-pool August 26, 2026 20:55 — with GitHub Actions Inactive
@PureWeen
PureWeen temporarily deployed to copilot-pat-pool August 26, 2026 20:57 — with GitHub Actions Inactive
@PureWeen
PureWeen temporarily deployed to copilot-pat-pool August 26, 2026 20:59 — with GitHub Actions Inactive
@github-actions github-actions Bot added the area-ai-agents Copilot CLI agents, agent skills, AI-assisted development label Aug 26, 2026
@PureWeen
PureWeen temporarily deployed to copilot-pat-pool August 26, 2026 20:59 — with GitHub Actions Inactive

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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: rc and rcNumber.
  • Update Get-PreviewReadiness.ps1 to 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-PrereleaseMilestoneExists still 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

Comment on lines +196 to 199
# 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>'."
}
@github-actions

Copy link
Copy Markdown
Contributor

Skill Validation Results

@PureWeen — new skill validation results are available based on this last commit: b0fa8e8.
To request a fresh validation after new comments or commits, comment /evaluate-skills.

Overall Passed Static Passed LLM Skipped Skills 24 Agents 6

Skill Validation Resultsb0fa8e8 · [release-readiness] Add RC release support · 2026-08-26T21:05:50Z

✅ Static Checks Passed

Skills: 24 | Eval specs linted: 16

Full lint output
── .github/skills/agentic-labeler/tests/eval.vally.yaml
npm warn EBADENGINE Unsupported engine {
npm warn EBADENGINE   package: '@microsoft/vally-cli@0.12.0',
npm warn EBADENGINE   required: { npm: '>=11.11.1', node: '>=22.0.0' },
npm warn EBADENGINE   current: { node: 'v22.23.2', npm: '10.9.8' }
npm warn EBADENGINE }
npm warn EBADENGINE Unsupported engine {
npm warn EBADENGINE   package: '@microsoft/vally@0.12.0',
npm warn EBADENGINE   required: { npm: '>=11.11.1', node: '>=22.0.0' },
npm warn EBADENGINE   current: { node: 'v22.23.2', npm: '10.9.8' }
npm warn EBADENGINE }
npm warn EBADENGINE Unsupported engine {
npm warn EBADENGINE   package: '@microsoft/vally-server@0.12.0',
npm warn EBADENGINE   required: { npm: '>=11.11.1', node: '>=22.0.0' },
npm warn EBADENGINE   current: { node: 'v22.23.2', npm: '10.9.8' }
npm warn EBADENGINE }
Vally collects pseudonymous usage telemetry (command name, version, outcome, duration, persistent device identifier (when available), and coarse OS/runtime info) to improve the product. No prompts, datasets, file paths, or arguments are collected.
Opt out any time by setting VALLY_TELEMETRY_OPTOUT=1 or DO_NOT_TRACK=1.
Learn more: https://aka.ms/vally/telemetry
✔ .github/skills/agentic-labeler/tests/eval.vally.yaml is valid
── .github/skills/analyze-sessions/tests/eval.vally.yaml
✔ .github/skills/analyze-sessions/tests/eval.vally.yaml is valid
── .github/skills/ci-fix/tests/eval.ownership.vally.yaml
✔ .github/skills/ci-fix/tests/eval.ownership.vally.yaml is valid
── .github/skills/ci-fix/tests/eval.vally.yaml
✔ .github/skills/ci-fix/tests/eval.vally.yaml is valid
── .github/skills/code-review/tests/eval.inline-findings.vally.yaml
✔ .github/skills/code-review/tests/eval.inline-findings.vally.yaml is valid
── .github/skills/code-review/tests/eval.producer-trace.vally.yaml
✔ .github/skills/code-review/tests/eval.producer-trace.vally.yaml is valid
── .github/skills/code-review/tests/eval.trim-aot.vally.yaml
✔ .github/skills/code-review/tests/eval.trim-aot.vally.yaml is valid
── .github/skills/code-review/tests/eval.vally.yaml
✔ .github/skills/code-review/tests/eval.vally.yaml is valid
── .github/skills/code-review/tests/hermeticity.vally.yaml
✔ .github/skills/code-review/tests/hermeticity.vally.yaml is valid
── .github/skills/code-review/tests/soak.capability.vally.yaml
✔ .github/skills/code-review/tests/soak.capability.vally.yaml is valid
── .github/skills/evaluate-pr-tests/tests/eval.vally.yaml
✔ .github/skills/evaluate-pr-tests/tests/eval.vally.yaml is valid
── .github/skills/pr-review/tests/eval.gh-auth.vally.yaml
✔ .github/skills/pr-review/tests/eval.gh-auth.vally.yaml is valid
── .github/skills/try-fix/tests/eval.restore.vally.yaml
✔ .github/skills/try-fix/tests/eval.restore.vally.yaml is valid
── .github/skills/try-fix/tests/eval.vally.yaml
✔ .github/skills/try-fix/tests/eval.vally.yaml is valid
── .github/skills/verify-tests-fail-without-fix/tests/eval.protocol.vally.yaml
✔ .github/skills/verify-tests-fail-without-fix/tests/eval.protocol.vally.yaml is valid
── .github/skills/verify-tests-fail-without-fix/tests/eval.vally.yaml
✔ .github/skills/verify-tests-fail-without-fix/tests/eval.vally.yaml is valid

⏭️ LLM Evaluation: Skipped

No changed skills with eval specs found.

🔍 Full results and investigation steps

@kubaflo
kubaflo merged commit 073c90c into main Aug 26, 2026
22 of 23 checks passed
@kubaflo
kubaflo deleted the pureween-rc1-release-readiness branch August 26, 2026 22:07
@github-actions github-actions Bot added this to the .NET 10 SR11 milestone Aug 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-ai-agents Copilot CLI agents, agent skills, AI-assisted development

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants