Skip to content

MSBuild Release Checklist 18.7 #13639

@SimaTian

Description

@SimaTian

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.

  • Validate inputs:
    • Confirm eng/Versions.props on main has VersionPrefix = 18.7.0
    • Confirm branch vs18.7 does not already exist
    • Confirm DARC channel VS 18.7 exists (ID: 10189)
  • Create this tracking issue in dotnet/msbuild with all placeholders replaced
  • Record all tracking URLs in the table below as phases are completed:
Artifact URL
Next-version branding PR
VisualStudio.ChannelName PR
Phase 1 DARC config PR https://dev.azure.com/dnceng/internal/_git/maestro-configuration/pullrequest/60575
Phase 3 DARC config PR
Final branding PR
VS insertion PR
Channel promotion PR

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.

  • 1.1 Create branch vs18.7 from HEAD of main:
    git push upstream HEAD:refs/heads/vs18.7
    • If branched too early (main has commits that shouldn't be in the release): fast-forward the branch to the correct commit (the one currently inserted into VS main):
      git push upstream :refs/heads/vs18.7
  • 1.2 DARC configuration — batch all channel/mapping changes into one PR on the maestro-configuration repo.
    Use --configuration-branch release/msbuild-18.7 on every command and --no-pr on all but the last:
    • 1.2a Ensure branch-to-channel association exists:
      First check: darc get-default-channels --channel "VS 18.7" --branch vs18.7 --source-repo https://github.com/dotnet/msbuild
      If 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-pr
    • 1.2b Create DARC channel for next release:
      darc 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.)
    • 1.2c Pre-create default channel mapping for the next release branch (last command — omit --no-pr to 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.7
    • 1.2d Get the maestro-configuration PR reviewed and merged
    • 1.2e Ping internal "First Responders" Teams channel to get the new VS 18.8 channel available as a promotion target
      • Not needed — VS 18.7/18.8/18.9/18.10 publishing entries were added to arcade in dotnet/arcade@e385506c on 2026-03-21 (PR arcade#16617). Maestro/BAR accepts the channel — verified by PR #60575 and darc add-default-channel "VS 18.8".
      • Follow-up: pending arcade dep-flow PR [main] Update dependencies from dotnet/arcade #13434 (DIRTY since 2026-03-23) needs rebase+merge so msbuild's main arcade pin picks up the new publishing constants.
  • 1.3 Update .config/git-merge-flow-config.jsonc: \ — PR Update merge-flow config for vs18.7 release branch #13643 merged 4/30
    Insert vs18.7 as the last entry before main in the merge chain. Add a comment noting the VS/SDK version context.

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:

  • 2.1 eng/Versions.props: Update VersionPrefix to 18.8.0
  • 2.2 eng/Versions.props: Update PackageValidationBaselineVersion to 18.7.0-preview-26229-01 (matches the 18.7 preview just inserted into VS main).
  • 2.3 Not needed — ApiCompat passed; no suppression updates required.
  • 2.4 azure-pipelines/vs-insertion.yml: no AutoInsertTargetBranch field on the current version — no change needed.
  • 2.5 azure-pipelines/vs-insertion-experimental.yml: already lists main/rel/insiders/rel/stable — no change needed.
  • 2.6 Merge branding PR Bump main to 18.8.0 after vs18.7 snap #13657OPEN, BLOCKED: failing on pre-existing broken-on-main test Microsoft.Build.Utilities.UnitTests_net472_x86. Needs admin merge or test fix.

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):

  • 3.1 SDK main subscription ID: d1c6afb2-7bf1-43e4-8f2e-af7e0680b540
  • 3.2 vs18.7 → VS 18.7 association already exists (id 6921) — 3.3d not needed.

Operations issued via darc (each created its own maestro-config PR — these need merging):

  • 3.3 DARC channel/subscription updates (3 PRs awaiting merge):
    • 3.3a Remove main → VS 18.7 mapping → maestro-config PR #60704
    • 3.3b Add main → VS 18.8 mapping → maestro-config PR #60705
    • 3.3c Update SDK main sub channel VS 18.7VS 18.8 → maestro-config PR #60706
    • 3.3d N/A — vs18.7 → VS 18.7 association already existed
    • 3.3e N/A — no other subscriptions need fixing in this batch
    • 3.3f PRs auto-created by darc (one per command since darc 1.1+ no longer batches without explicit --configuration-branch)
    • 3.3g Get all three maestro-configuration PRs (#60704, #60705, #60706) reviewed and merged

Verifications (parallel — read-only, no ordering dependency):

  • 3.4 Arcade subscription verified — Enabled: True, source channel .NET 10 Eng
  • 3.5 NuGet client subscription verified — Enabled: True
  • 3.6 Roslyn subscription verified — Enabled: True
  • 3.7 Confirm Roslyn and NuGet subscriptions are disabled (Enabled: False) — DEVIATION: both currently Enabled: True. Decide whether to disable per release process or keep enabled.
  • 3.8 Fix any missing or misconfigured subscriptions — see 3.7

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.

  • 4.1 Promote public API on vs18.7 branch:
    No-op — no non-empty PublicAPI.Unshipped.txt entries on vs18.7.
  • 4.2 Run scripts/Stabilize-Release.ps1 on vs18.7 branch:
    Applied via PR Final branding for 18.7 release #13658.
  • 4.3 Final branding PR Final branding for 18.7 release #13658MERGED 4/30 12:27 UTC (commit 6ed5e9aa).
  • 4.4 Bootstrap OptProf for vs18.7partially done; tracking item open for full bootstrap:
    • First official 9434 build of vs18.7 ran (build 13982412, 20260430.11, version 18.7.1) using OptProf drop override …/main/20260428.11/13968297/1 per Rainer's guidance.
    • Verify OptProf data collection pipeline 17389 was triggered for vs18.7 by build 13982412.
    • Run a second 9434 build of vs18.7 with no OptProf overrides (picks up vs18.7-trained drop produced by 17389).
  • 4.5 Get M2 or QB approval as necessary per the VS schedule
  • 4.6 VS insertion PR — devdiv VS PR #734106 merged 5/1 1:58 UTC (vs18.7 18.7.1-servicing-26230-11 → VS main, before 5/1 snap).
  • 4.7 Retarget vs18.7 → rel/insidersN/A: PR Simplify vs-insertion pipelines: remove obsolete rel/dX.Y branch logic #13409 (March) simplified vs-insertion.yml. auto always = main; rel/insiders/rel/stable are manual-only TargetBranch overrides. No file edit needed; servicing fixes for insiders are inserted by manually firing pipeline 24295 with TargetBranch=rel/insiders.
  • 4.8 (After stable snap on 2026-05-27, if needed) Fire pipeline 24295 manually with TargetBranch=rel/stable for any servicing fix landing in stable.

Phase 5: Post-GA

Trigger: 2026-06-09 has passed and VS release (18.7.0 Feature Update) has shipped.

  • 5.1 Push packages to nuget.org (contact dnceng). Packages:
    • Microsoft.Build.Utilities.Core.18.7.0.nupkg
    • Microsoft.Build.18.7.0.nupkg
    • Microsoft.Build.Framework.18.7.0.nupkg
    • Microsoft.Build.Runtime.18.7.0.nupkg
    • Microsoft.Build.Tasks.Core.18.7.0.nupkg
    • Microsoft.NET.StringTools.18.7.0.nupkg
    • Microsoft.Build.Templates.18.7.0.nupkg
  • 5.2 Publish docs at https://aka.ms/publishondocs
  • 5.3 Create GitHub release:
    git checkout <COMMIT>
    git tag v18.7.0
    git push upstream v18.7.0
    
    Create release at https://github.com/dotnet/msbuild/releases/new
  • 5.4 Update BootstrapSdkVersion in eng/Versions.props if a fresh SDK was released.
  • 5.5 Extend OptProf data expiration for vs18.7 branch if the release is LTSC.
  • 5.6 Verify main subscriptions point to VS 18.8 channel:
    darc get-subscriptions --exact --target-repo https://github.com/dotnet/msbuild --target-branch main
  • 5.7 Review this tracking issue for any process deviations.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions