Skip to content

Register dotnetup Daily channel for publishing#16813

Merged
mmitche merged 1 commit into
mainfrom
dotnetup-daily-channel
May 14, 2026
Merged

Register dotnetup Daily channel for publishing#16813
mmitche merged 1 commit into
mainfrom
dotnetup-daily-channel

Conversation

@dsplaisted
Copy link
Copy Markdown
Member

Register dotnetup Daily channel for publishing

Wires up the new dotnetup Daily channel (id 10506, created by maestro-configuration#61048) to publish via Arcade's PublishArtifactsInManifest flow.

Background

dotnetup is a new NativeAOT installer tool built out of dotnet/sdk (see dotnet/sdk#54254). Until now its standalone executables were copied to a private Azure blob via az login-gated scripts, which prevents anonymous installation and is operationally awkward. We're switching to BAR/channel-based publishing so:

  • Daily binaries can be downloaded anonymously from https://ci.dot.net/public/dotnetup/<SemVer>/<file>.
  • Stable aka.ms/dotnet/dotnetup/daily/<file> links always point at the latest build.
  • The Microsoft.Dotnet.Installation NuGet package eventually flows through the same channel (replacing a direct 1ES.PublishNuget@1 step in the dotnetup pipeline) — defense in depth for MSRC scenarios.

End-to-end mechanics were validated by promoting BAR build 314208 to General Testing (promotion build 2974290) — blobs landed correctly at ci.dot.net/dev/dotnetup/0.1.3-preview.4.26263.3/... with HTTP 200 anonymous access on all 16 binary/checksum assets.

Configuration choices

Knob Value Rationale
id 10506 Channel id assigned by BAR after maestro-configuration#61048 merged.
isInternal false Public channel — dotnetup needs anonymous download.
publishingInfraVersion Latest Same as other public channels.
akaMSChannelNames ["dotnetup/daily"] Yields stable URLs at aka.ms/dotnet/dotnetup/daily/<file>.
akaMSCreateLinkPatterns DotnetupAkaMSCreateLinkPatterns (new) Default* is extension-based and skips our extensionless Linux/macOS binaries.
targetFeeds DotNetToolsFeeds Matt Mitchell's recommendation: packages → dotnet-tools feed (defense in depth — channel-based MSRC kill switch); installers → ci.dot.net/public.
flatten (default true) Strips the dotnetup/<SemVer>/ prefix from the blob Id when constructing the aka.ms URL.
symbolTargetType Public Matches .NET 6 Eng etc. (no symbols today, but consistent posture).

New regex pattern

DefaultAkaMSCreateLinkPatterns matches files by extension (.exe, .zip, .gz, .rpm, …). The Windows binaries (dotnetup-win-x64.exe) match \.exe$ and get aka.ms links. The Linux/macOS binaries are extensionless (dotnetup-linux-x64, dotnetup-osx-arm64, …) and silently fall through. DotnetupAkaMSCreateLinkPatterns adds:

new Regex(@"(^|[\\/])dotnetup-(linux|osx)[a-z0-9-]*(\.sha512)?$", RegexOptions.IgnoreCase)

Modeled on AspireAkaMSCreateLinkPatterns, which solves the same problem for the extensionless get-aspire-cli.{ps1,sh} scripts.

Rollout sequencing

This PR is one of three coordinated changes:

  1. maestro-configuration#61048 ✅ merged — creates the dotnetup Daily channel.
  2. This PR — wires the channel through PublishArtifactsInManifest.
  3. maestro-configuration#61053 (open) — adds default-channel mapping dotnet/sdk@release/dnup → dotnetup Daily so every dotnetup CI build auto-promotes.

Plus the corresponding pipeline changes in dotnet/sdk (still on the dotnetup-bar-experiment branch; will be merged after this PR lands).

Validation plan

After this PR merges:

  1. Trigger a manual dotnetup build on the experiment branch (or wait for the next CI build once merged into release/dnup).
  2. Promote to dotnetup Daily (darc add-build-to-channel --id <BARId> --channel "dotnetup Daily").
  3. Verify:
    • ci.dot.net/public/dotnetup/<SemVer>/dotnetup-* returns HTTP 200 for all 8 RID binaries and their .sha512.
    • aka.ms/dotnet/dotnetup/daily/dotnetup-win-x64.exe etc. resolve to the latest build.
    • Microsoft.Dotnet.Installation .nupkg (when added to the manifest) is restorable from the dotnet-tools feed.

Routes the new dotnetup Daily channel (created by https://dev.azure.com/dnceng/internal/_git/maestro-configuration/pullrequest/61048) through DotNetToolsFeeds so:

- Standalone executables and .sha512 checksums land at ci.dot.net/public/dotnetup/<SemVer>/<file>

- NuGet packages (when added) flow to the dotnet-tools feed (defense in depth: an MSRC kill switch lives in the channel config rather than a per-pipeline publishing step)

Adds DotnetupAkaMSCreateLinkPatterns because the Linux/macOS dotnetup binaries have no file extension and don't match DefaultAkaMSCreateLinkPatterns. Stable aka.ms links land at aka.ms/dotnet/dotnetup/daily/<filename>.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@mmitche mmitche merged commit 92ad3b8 into main May 14, 2026
9 checks passed
@mmitche mmitche deleted the dotnetup-daily-channel branch May 14, 2026 15:11
dsplaisted added a commit to dotnet/sdk that referenced this pull request May 22, 2026
…lse)

The dotnetup CI pipeline was inheriting isAssetlessBuild: true from the main dotnet/sdk pipeline pattern. That setting is correct for dotnet/sdk itself, whose assets are published downstream by the dotnet/dotnet VMR. dotnetup has no equivalent downstream flow; this repo's official build is the source of truth for the dotnetup-* binaries on the 'dotnetup Daily' channel.

With isAssetlessBuild: true, `darc add-build-to-channel` is invoked with --skip-assets-publishing, which assigns the build to the channel but bypasses the Maestro Build Promotion pipeline (def 750). No promotion run means no upload to ci.dot.net/public/dotnetup/<SemVer>/ and no aka.ms/dotnet/dotnetup/daily/* shortlinks.

Flip to isAssetlessBuild: false so the publish job downloads our AssetManifests + BlobArtifacts and queues the promotion pipeline, which then runs PublishArtifactsInManifestV3 against the channel's TargetChannelConfig (registered in dotnet/arcade#16813) to upload the binaries and create the aka.ms links.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants