Add vs18.9 to merge-flow config; retire vs18.3 - #14214
Conversation
Phase 1.3 of the 18.9 release (dotnet#14213). 1.3a: route vs18.8 -> vs18.9 and add vs18.9 -> main now that vs18.9 has been snapped. 1.3b: retire vs18.3. SDK band 10.0.2xx is past end-of-support (EoS May 2026 per the SDK/VS versioning lifecycle table) and VS 18.3 is out of support, so both lifecycles agree it is retired. vs18.0 (SDK 10.0.1xx, supported through the .NET 10 lifecycle) now forwards directly to vs18.6 so its fixes keep flowing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Updates the repository’s forward-merge automation configuration to reflect the MSBuild 18.9 release branch creation and to retire an out-of-support release branch, keeping the servicing chain aligned with supported VS/SDK lifecycles.
Changes:
- Insert
vs18.9into the forward-merge chain so merges flowvs18.8 -> vs18.9 -> main. - Retire
vs18.3from the merge flow and rewirevs18.0to merge directly tovs18.6. - Add/adjust inline comments documenting the lifecycle rationale (SDK band support + VS support status).
|
Caution agentic threat detected Error Messages Quality — LGTM This PR modifies only
|
|
Caution agentic threat detected Build Infrastructure Care — LGTM ✅All checks pass:
The stale No issues found in the Build Infrastructure Care dimension.
|
|
Caution agentic threat detected 24-dimension review — 23/24 LGTM
Key verification points:
One NIT (non-blocking, left as inline comment on line 26): the retirement tombstone comment explains why vs18.3 was retired but not what routing it replaced. Adding
|
There was a problem hiding this comment.
Caution
agentic threat detected
Threat detection flagged this output in warn mode. Manual review is REQUIRED before any follow-up automation.
Code Clarity & Readability
Two concrete clarity issues; one minor note.
ISSUE 1 — Retirement tombstone omits the prior routing
// vs18.3 (SDK 10.0.2xx) retired 2026-06: SDK band 10.0.2xx out of support (EoS May 2026) and VS 18.3 out of support.Concrete scenario: A future maintainer is asked to re-add vs18.3 if its support window is extended. Reading the config, they see vs18.0 → vs18.6 and a retirement note for vs18.3 — but the note never states that vs18.0 previously targeted vs18.3. They cannot reconstruct the original chain (vs18.0 → vs18.3 → ...) from the file alone.
Suggested fix:
// vs18.3 (SDK 10.0.2xx) retired 2026-06: was the MergeToBranch target for vs18.0;
// SDK band 10.0.2xx out of support (EoS May 2026) and VS 18.3 out of support; vs18.0 now merges directly to vs18.6.ISSUE 2 — vs18.7 and vs18.8 silently omit SDK band info
"vs18.7": { ... } // "(VS)"
"vs18.8": { ... } // "(VS)"vs18.6 carries (VS, SDK 10.0.3xx) and the new vs18.9 entry carries (VS, SDK 10.0.4xx), establishing a clear pattern. vs18.7 and vs18.8 just say (VS).
Concrete scenario: A maintainer is diagnosing a regression in SDK 10.0.3xx builds and searches the config comments for the corresponding branch. The absence of any SDK annotation on vs18.7/vs18.8 makes it ambiguous whether those branches have no dedicated SDK band (a VS-only release) or whether the band was simply not recorded. Either answer affects where they look for the fix.
If vs18.7 and vs18.8 genuinely have no SDK band, make that explicit:
// Automate opening PRs to merge msbuild's vs18.7 (VS only, no dedicated SDK band) into vs18.8 (VS)Minor note — (SDK X, VS) vs (VS, SDK X) ordering is inconsistent
vs17.12 and vs17.14 put SDK first; vs18.6 and vs18.9 put VS first. This is cosmetic and has no operational impact, so not flagging as an issue — but worth normalising in a follow-up if the file is touched again.
Generated by Expert Code Review (on open) for #14214 · 1.5K AIC · ⊞ 32.1K
Updated [Microsoft.Build.Utilities.Core](https://github.com/dotnet/msbuild) from 18.9.6 to 18.10.1. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Build.Utilities.Core's releases](https://github.com/dotnet/msbuild/releases)._ ## 18.10.1 ## What's Changed * [vs16.11] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/msbuild#13103 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/msbuild#13796 * [vs17.8] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/msbuild#13902 * [vs17.11] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/msbuild#13903 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/msbuild#13909 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/msbuild#13986 * Add vs18.9 to merge-flow config; retire vs18.3 by @JanProvaznik in dotnet/msbuild#14214 * Bump labeler-cache-retention to use issue-labeler v2.1.0 by @jeffhandley in dotnet/msbuild#14171 * Bump main to 18.10.0 after vs18.9 snap by @JanProvaznik in dotnet/msbuild#14216 * Improve release skill: Phase 2 DARC rules, VMR backflow, deterministic baseline by @JanProvaznik in dotnet/msbuild#14220 * Determinize release: hardcode OptProf baseline + Phase 3.2 baseline resolver by @JanProvaznik in dotnet/msbuild#14222 * Serialize BuildRequestConfiguration.RequestedTargets to fix solution metaproject MSB4057 in parallel builds by @ViktorHofer in dotnet/msbuild#14223 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in dotnet/msbuild#14203 * Core support for AbsolutePath/FileInfo/DirectoryInfo and ITaskItem<T> as task parameters by @baronfel in dotnet/msbuild#13971 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in dotnet/msbuild#14206 * Fix existence cache kind poisoning by @AlesProkop in dotnet/msbuild#14249 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in dotnet/msbuild#14226 * Don't disable the MSBuild server for /mt builds when node reuse is off by @AR-May in dotnet/msbuild#14248 * Enhance expert reviewer guidelines with additional checks. by @AR-May in dotnet/msbuild#14255 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in dotnet/msbuild#14253 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in dotnet/msbuild#14268 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in dotnet/msbuild#14267 * Bump github/gh-aw-actions/setup from 0.81.6 to 0.82.2 by @dependabot[bot] in dotnet/msbuild#14266 * Avoid boxing the struct enumerator in PropertyDictionary<T>.GetEnumerator() by @nareshjo in dotnet/msbuild#14272 * Refresh copy marker when implementation output changes by @AlesProkop in dotnet/msbuild#14231 * Send task-host build process environment as delta by @OvesN in dotnet/msbuild#14126 * Add regression coverage for metadata newline preservation by @VolPlita in dotnet/msbuild#14261 * Fix EmbedInBinlog items with relative paths from child projects by @huulinhnguyen-dev in dotnet/msbuild#13990 * Stop requiring VersionPrefix updates in servicing - insert prerelease versions to VS by @ViktorHofer in dotnet/msbuild#14277 * Fix WriteLinesToFile rewriting unchanged file when custom encoding is used by @huulinhnguyen-dev in dotnet/msbuild#14146 * Enable trim/AOT analyzers for Microsoft.Build and clean up annotations by @JeremyKuhne in dotnet/msbuild#14064 * [automated] Merge branch 'vs18.9' => 'main' by @github-actions[bot] in dotnet/msbuild#14291 * Fix MicroBuild plugin feed URL to use allowed pkgs.dev.azure.com format by @AlesProkop in dotnet/msbuild#14295 * Pass ExcludeRestorePackageImports during restore to avoid redundant evaluations by @ViktorHofer with @Copilot in dotnet/msbuild#14274 * [vs18.7] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in dotnet/msbuild#13988 * Adopt Clever Test Selection (CTS) as parallel, non-blocking PR pipeline by @jankratochvilcz in dotnet/msbuild#14212 * Harden exceptions when connecting to server by @JanProvaznik in dotnet/msbuild#14292 * Update MicrosoftBuildVersion in analyzer template by @github-actions[bot] in dotnet/msbuild#13886 * Fix MSBuild Server client dropping build result under WaitAny race (#14172) by @JanProvaznik in dotnet/msbuild#14251 * Partially revert #13660: remove NuGet RestoreTask transient TaskHost workaround by @JanProvaznik in dotnet/msbuild#14297 * Disable daily AI credits guardrail for Expert Code Review workflow by @JanProvaznik with @Copilot in dotnet/msbuild#14314 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 14614733 by @dotnet-bot in dotnet/msbuild#14246 * Add opt-in partial (stop-after-pass) project evaluation by @ViktorHofer in dotnet/msbuild#14290 * Use partial evaluation for -getProperty/-getItem without a target by @ViktorHofer in dotnet/msbuild#14296 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in dotnet/msbuild#14324 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in dotnet/msbuild#14333 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in dotnet/msbuild#14330 * Bump github/gh-aw-actions/setup from 0.82.2 to 0.82.8 by @dependabot[bot] in dotnet/msbuild#14328 * Restrict partial evaluation to ProjectInstance by @ViktorHofer in dotnet/msbuild#14340 ... (truncated) Commits viewable in [compare view](dotnet/msbuild@v18.9.6...v18.10.1). </details> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Phase 1.3 of the 18.9 release (#14213).
1.3a — add
vs18.9to the merge chainvs18.9was snapped frommainon 2026-06-30. This routesvs18.8 -> vs18.9and addsvs18.9 -> mainso forward-merge automation reachesmainthrough the new release branch.1.3b — retire
vs18.3Applying the combined SDK + VS retirement rule (retire only when both lifecycles are out of support):
10.0.2xx(paired withvs18.3) is past end-of-support — EoS May 2026 per the SDK/MSBuild/VS versioning lifecycle table.Both agree, so
vs18.3is removed andvs18.0now forwards directly tovs18.6.vs18.0(SDK10.0.1xx) stays in the chain because.1xxbands are supported throughout the .NET 10 lifecycle, so its fixes keep flowing forward.Resulting chain:
vs16.11 -> vs17.8 -> vs17.11 -> vs17.12 -> vs17.14 -> vs18.0 -> vs18.6 -> vs18.7 -> vs18.8 -> vs18.9 -> main