Inputs
| Placeholder |
Description |
Value |
PREVIOUS_RELEASE_VERSION |
Version being replaced as latest |
18.6 |
THIS_RELEASE_VERSION |
Version being released now |
18.7 |
THIS_RELEASE_EXACT_VERSION |
Full VersionPrefix on release branch after final branding |
18.7.0 (then bumped to 18.7.1 to enable insertion w/ OptProf) |
NEXT_VERSION |
Version that main will be bumped to |
18.8 |
Derived values:
- Release branch:
vs18.7
- DARC channel:
VS 18.7
- Next DARC channel:
VS 18.8
- VS insertion target: VS
main (VS snaps main → insiders → stable on its own schedule)
⚠️ Open follow-ups (handover) — last updated 2026-05-04
| Item |
Status |
Owner needed |
| #13657 Phase 2 main bump 18.7→18.8 |
OPEN, BLOCKED on broken-on-main test Microsoft.Build.Utilities.UnitTests_net472_x86 |
Admin merge or test fix. Highest priority — every main build is currently mis-versioned 18.7.0. |
| #13434 Arcade dep flow (XUnitV3Extensions conflict resolved) |
OPEN, MERGEABLE, awaiting review |
Reviewer approval, then merge |
#13659 Auto merge-flow vs18.7 → main |
OPEN, MERGEABLE, awaiting review |
Reviewer approval, then merge |
| Maestro PRs #60704, #60705, #60706 (DARC channel & sub updates) |
OPEN |
Get all three reviewed and merged |
| Phase 4.4 second OptProf build |
Not done |
Re-fire 9434 on vs18.7 with no overrides after 17389 produces vs18.7-trained drop |
Phase 5 (post-GA: nuget.org publish, GH release v18.7.0, docs) |
Not started |
Coordinate w/ dnceng — note: 18.5 and 18.6 were not pushed to nuget.org either; latest public release is v18.4.0 |
Phase 0: Instantiate Release
Trigger: User decides to start a release. Do this first.
Phase 1: Branch & Prepare
Trigger: 2026-05-01 reached (VS snaps main → rel/insiders for 18.7; per Dev18.7 Schedule).
Steps are sequential — complete in order.
Phase 2: Bump Main & Update Pipelines
Trigger: vs18.7 branch exists (Phase 1.1 done). Previous release is in insiders stage.
Create one PR in main containing all of the following changes:
Phase 3: DARC Subscription Updates
Trigger: Phase 2 branding PR merged (main now has 18.8 version).
First, gather information (read-only queries — no PR needed):
Operations issued via darc (each created its own maestro-config PR — these need merging):
Verifications (parallel — read-only, no ordering dependency):
Phase 4: Final Branding & VS Insertion
Trigger: 7 calendar days before 2026-05-01 (i.e., ~2026-04-24).
Precondition: Phases 1–3 complete. Preview builds from vs18.7 have been inserting into VS main since Phase 2.
Goal: Final-brand the release branch and get the final-branded bits inserted into VS main before VS snaps to rel/insiders.
Steps are sequential.
Phase 5: Post-GA
Trigger: 2026-06-09 has passed and VS release (18.7.0 Feature Update) has shipped.
Inputs
PREVIOUS_RELEASE_VERSION18.6THIS_RELEASE_VERSION18.7THIS_RELEASE_EXACT_VERSIONVersionPrefixon release branch after final branding18.7.0(then bumped to18.7.1to enable insertion w/ OptProf)NEXT_VERSION18.8Derived values:
vs18.7VS 18.7VS 18.8main(VS snaps main → insiders → stable on its own schedule)2026-05-04maintestMicrosoft.Build.Utilities.UnitTests_net472_x86mainbuild is currently mis-versioned18.7.0.vs18.7 → mainv18.7.0, docs)18.5and18.6were not pushed to nuget.org either; latest public release isv18.4.0Phase 0: Instantiate Release
eng/Versions.propsonmainhasVersionPrefix=18.7.0vs18.7does not already existVS 18.7exists (ID: 10189)Phase 1: Branch & Prepare
Steps are sequential — complete in order.
vs18.7from HEAD ofmain:git push upstream HEAD:refs/heads/vs18.7git push upstream :refs/heads/vs18.7Use
--configuration-branch release/msbuild-18.7on every command and--no-pron all but the last:First check:
darc get-default-channels --channel "VS 18.7" --branch vs18.7 --source-repo https://github.com/dotnet/msbuildIf
No matching channels were found.:darc add-default-channel --channel "VS 18.7" --branch vs18.7 --repo https://github.com/dotnet/msbuild --configuration-branch release/msbuild-18.7 --no-prdarc add-channel --name "VS 18.8" --configuration-branch release/msbuild-18.7 --no-pr(Channel VS 18.8 already exists — ID 10188, so this is a no-op.)
--no-prto create the PR):darc add-default-channel --channel "VS 18.8" --branch vs18.8 --repo https://github.com/dotnet/msbuild --configuration-branch release/msbuild-18.7VS 18.8channel available as a promotion targetdarc add-default-channel "VS 18.8".mainarcade pin picks up the new publishing constants..config/git-merge-flow-config.jsonc: \ — PR Update merge-flow config for vs18.7 release branch #13643 merged 4/30Insert
vs18.7as the last entry beforemainin the merge chain. Add a comment noting the VS/SDK version context.Phase 2: Bump Main & Update Pipelines
Create one PR in
maincontaining all of the following changes:eng/Versions.props: UpdateVersionPrefixto18.8.0eng/Versions.props: UpdatePackageValidationBaselineVersionto18.7.0-preview-26229-01(matches the 18.7 preview just inserted into VS main).azure-pipelines/vs-insertion.yml: noAutoInsertTargetBranchfield on the current version — no change needed.azure-pipelines/vs-insertion-experimental.yml: already listsmain/rel/insiders/rel/stable— no change needed.maintestMicrosoft.Build.Utilities.UnitTests_net472_x86. Needs admin merge or test fix.Phase 3: DARC Subscription Updates
First, gather information (read-only queries — no PR needed):
d1c6afb2-7bf1-43e4-8f2e-af7e0680b540vs18.7 → VS 18.7association already exists (id 6921) — 3.3d not needed.Operations issued via
darc(each created its own maestro-config PR — these need merging):main → VS 18.7mapping → maestro-config PR #60704main → VS 18.8mapping → maestro-config PR #60705VS 18.7→VS 18.8→ maestro-config PR #60706vs18.7 → VS 18.7association already existed--configuration-branch)Verifications (parallel — read-only, no ordering dependency):
Enabled: True, source channel.NET 10 EngEnabled: TrueEnabled: TrueEnabled: False) — DEVIATION: both currentlyEnabled: True. Decide whether to disable per release process or keep enabled.Phase 4: Final Branding & VS Insertion
Steps are sequential.
vs18.7branch:No-op — no non-empty
PublicAPI.Unshipped.txtentries onvs18.7.scripts/Stabilize-Release.ps1onvs18.7branch:Applied via PR Final branding for 18.7 release #13658.
6ed5e9aa).vs18.7— partially done; tracking item open for full bootstrap:vs18.7ran (build 13982412,20260430.11, version18.7.1) using OptProf drop override…/main/20260428.11/13968297/1per Rainer's guidance.vs18.7by build 13982412.vs18.7with no OptProf overrides (picks up vs18.7-trained drop produced by 17389).rel/insiders— N/A: PR Simplify vs-insertion pipelines: remove obsolete rel/dX.Y branch logic #13409 (March) simplifiedvs-insertion.yml.autoalways =main;rel/insiders/rel/stableare manual-onlyTargetBranchoverrides. No file edit needed; servicing fixes for insiders are inserted by manually firing pipeline 24295 withTargetBranch=rel/insiders.2026-05-27, if needed) Fire pipeline 24295 manually withTargetBranch=rel/stablefor any servicing fix landing in stable.Phase 5: Post-GA
BootstrapSdkVersionineng/Versions.propsif a fresh SDK was released.vs18.7branch if the release is LTSC.mainsubscriptions point toVS 18.8channel:darc get-subscriptions --exact --target-repo https://github.com/dotnet/msbuild --target-branch main