[vs18.6] Fix OptProf bootstrapper channel: use 'int.stable' not 'release'#14005
Merged
rainersigwald merged 2 commits intoJun 8, 2026
Merged
Conversation
'release' is not a valid VS18 channel moniker (aka.ms/vs/18/release/channel
bounces to a Bing page -> "Invalid JSON primitive"). 'stable' is the public
VS18 channel but the MicroBuildBuildVSBootstrapper task only special-cases the
VS17-era names release/preview, so it routes 'stable' down the internal vsdrop
path and rejects its public CDN URL ("drop url ... is invalid").
int.stable is the internal, vsdrop-backed equivalent of stable: it tracks the
stable 18.x bits (not the moving int.main that caused assembly drift) and its
installer-manifest URL is a vsdrop {prefix};{suffix} URL the task accepts.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Updates the OptProf Visual Studio bootstrapper configuration for the VS 18.6 pipeline to use a VS18-valid internal channel moniker so the MicroBuild bootstrapper task can resolve and parse the channel manifest correctly.
Changes:
- Change
VisualStudio.ChannelNamefrom'release'to'int.stable'for VS 18 builds. - Ensure
MicroBuildBuildVSBootstrapper@3receives the updated channel name viachannelName: $(VisualStudio.ChannelName).
Avoid colliding with the in-flight 18.6.10 official build. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
rainersigwald
approved these changes
Jun 8, 2026
rainersigwald
pushed a commit
that referenced
this pull request
Jun 8, 2026
…ase' (#14006) ### Problem The previous fix (#13993, `stable` -> `release`) was wrong. On the official build it fails with: > ##[error]Invalid JSON primitive: . because `release` is **not a valid channel moniker for VS 18**. `https://aka.ms/vs/18/release/channel` bounces to a Bing fallback page, which the bootstrapper task saves as the `.chman` and then fails to parse as JSON. ### Why `release` and `stable` are both wrong The aka.ms moniker convention changed between VS17 and VS18: | moniker | VS 17 | VS 18 | | --- | --- | --- | | `release` | real CDN manifest | bounces to bing.com (broken) | | `stable` | bounces to bing.com | real **public** CDN manifest (`VisualStudio.18.Release.chman`) | | `int.stable` | n/a | **internal vsdrop** manifest (`VisualStudio.18.int.stable.chman`) | So for VS 18 the public GA channel is `stable` (not `release`). But the MicroBuild `MicroBuildBuildVSBootstrapper` task's `CreateConfigFile` only special-cases the VS17-era public names `release`/`preview`. Any other name — including `stable` — is routed down the **internal** path, where it parses the installer-manifest URL as a vsdrop `{prefix};{suffix}` drop. `stable`'s public CDN URL has no semicolon, hence the original *"drop url ... is invalid"* failure. ### Fix Use **`int.stable`**: the **internal, vsdrop-backed** equivalent of `stable`. It tracks the stable 18.x bits (not the moving `int.main` that caused the System.Text.Json 10.0.0.4 drift in #13923), and because it is an internal channel its installer-manifest URL is a vsdrop `{prefix};{suffix}` URL that `CreateConfigFile` accepts. - `https://aka.ms/vs/18/int.stable/channel` resolves to `VisualStudio.18.int.stable.chman` on `vsdrop.microsoft.com` (verified). Relevant task logic (`CreateConfigFile`): https://dev.azure.com/devdiv/Engineering/_git/MicroBuild?path=/src/Tasks/BuildVSBootstrapper/plugin.ps1&line=286&lineEnd=307&lineStartColumn=1&lineEndColumn=1&lineStyle=plain&_a=contents Companion to #14005 (vs18.6). --- ### Local validation (verified before merge) Replicated every step the `MicroBuildBuildVSBootstrapper` task performs, using the same VSDrop token audience the task uses | Check | Result | Failure mode it rules out | | --- | --- | --- | | (a) `aka.ms/vs/18/int.stable/channel` redirects to **vsdrop** (not bing.com) | ✅ | the `release` "Invalid JSON primitive" (Bing fallback page) | | (b) `.chman` downloads and is valid JSON (11 channelItems) | ✅ | the `release` "Invalid JSON primitive" | | (c) installer-manifest URL splits into `{prefix};{suffix}` (2 parts) | ✅ | the `stable` "drop url ... is invalid" (`CreateConfigFile` `Split(";")` check) | | (d) config payload `…;bootstrappers/Enterprise/configuration/vs_setup_bootstrapper.config` returns **HTTP 200** (after the corp→ZTN host rewrite the task does) | ✅ | the only downstream config-download risk | | (bonus) installer `.vsman` downloads and parses (20,527 packages) | ✅ | the `vsman overlay` step input | This is the same code path `int.main` already runs successfully; `int.stable` only pins it to stable 18.x bits. > Note: the `int.stable` channel's installer manifest is named `VisualStudioIntPreview.vsman` (`...Channels.IntPreviewInstallerManifest`). That is just the drop's internal naming for the stable-pinned channel and does not affect correctness — all checks above passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The previous fix (#13992,
stable->release) was wrong. On the official build it fails with:because
releaseis not a valid channel moniker for VS 18.https://aka.ms/vs/18/release/channelbounces to a Bing fallback page, which the bootstrapper task saves as the.chmanand then fails to parse as JSON.Why
releaseandstableare both wrongThe aka.ms moniker convention changed between VS17 and VS18:
releasestableVisualStudio.18.Release.chman)int.stableVisualStudio.18.int.stable.chman)So for VS 18 the public GA channel is
stable(notrelease). But the MicroBuildMicroBuildBuildVSBootstrappertask'sCreateConfigFileonly special-cases the VS17-era public namesrelease/preview. Any other name — includingstable— is routed down the internal path, where it parses the installer-manifest URL as a vsdrop{prefix};{suffix}drop.stable's public CDN URL has no semicolon, hence the original "drop url ... is invalid" failure.Fix
Use
int.stable: the internal, vsdrop-backed equivalent ofstable. It tracks the stable 18.x bits (not the movingint.mainthat caused the System.Text.Json 10.0.0.4 drift in #13923), and because it is an internal channel its installer-manifest URL is a vsdrop{prefix};{suffix}URL thatCreateConfigFileaccepts.https://aka.ms/vs/18/int.stable/channelresolves toVisualStudio.18.int.stable.chmanonvsdrop.microsoft.com(verified).Relevant task logic (
CreateConfigFile): https://dev.azure.com/devdiv/Engineering/_git/MicroBuild?path=/src/Tasks/BuildVSBootstrapper/plugin.ps1&line=286&lineEnd=307&lineStartColumn=1&lineEndColumn=1&lineStyle=plain&_a=contentsCompanion to #14006 (vs18.7).
Local validation (verified before merge)
Replicated every step the
MicroBuildBuildVSBootstrappertask performs, using the same VSDrop token audience the task uses (perplugin.ps1):aka.ms/vs/18/int.stable/channelredirects to vsdrop (not bing.com)release"Invalid JSON primitive" (Bing fallback page).chmandownloads and is valid JSON (11 channelItems)release"Invalid JSON primitive"{prefix};{suffix}(2 parts)stable"drop url ... is invalid" (CreateConfigFileSplit(";")check)…;bootstrappers/Enterprise/configuration/vs_setup_bootstrapper.configreturns HTTP 200 (after the corp→ZTN host rewrite the task does).vsmandownloads and parses (20,527 packages)vsman overlaystep inputThis is the same code path
int.mainalready runs successfully;int.stableonly pins it to stable 18.x bits.