Skip to content

[release/13.2] Add WinGet publishing pipeline for Aspire CLI#14502

Draft
radical wants to merge 2 commits intodotnet:release/13.2from
radical:winget
Draft

[release/13.2] Add WinGet publishing pipeline for Aspire CLI#14502
radical wants to merge 2 commits intodotnet:release/13.2from
radical:winget

Conversation

@radical
Copy link
Member

@radical radical commented Feb 14, 2026

Add WinGet publishing pipeline for Aspire CLI

Summary

Adds automated WinGet manifest generation, validation, and publishing to the internal Azure DevOps pipeline so that the Aspire CLI (aspire) can be installed via winget install Microsoft.Aspire (release) or winget install Microsoft.Aspire.Prerelease (preview).

Motivation

Today users install the Aspire CLI through acquisition scripts (aspire.dev/get-aspire-cli.sh / aspire.dev/get-aspire-cli.ps1). Adding WinGet support gives Windows developers a familiar, first-class installation channel (winget install/winget upgrade) with automatic PATH management and upgrade semantics.

What's included

Pipeline changes (eng/pipelines/)

  • New publish_winget stage in azure-pipelines.yml – runs after the build stage on non-PR builds from main, release/*, and internal/release/* branches.
  • New publishReleaseToWinGet parameter (default false) – gates WinGet publishing on release branches so it only happens when explicitly opted in. Main branch builds publish automatically.
  • Branch-aware package identity – release branches use Microsoft.Aspire; all other branches use Microsoft.Aspire.Prerelease.
  • New reusable template eng/pipelines/templates/winget.yml that:
    1. Installs wingetcreate and the winget CLI on the build agent.
    2. Generates WinGet manifests from templates.
    3. Validates manifests with winget validate.
    4. Smoke-tests install/uninstall from the local manifest (with cleanup on failure).
    5. Publishes manifest artifacts.
    6. Submits a PR to microsoft/winget-pkgs via wingetcreate update --submit (gated behind publishToWinGet).

Manifest generation (eng/winget/)

  • generate-manifests.ps1 – PowerShell script that:

    • Takes a version, template directory, and optional RID list (win-x64,win-arm64 by default).
    • Derives installer URLs from the ci.dot.net publishing pattern.
    • Downloads each zip to compute SHA256 hashes.
    • Optionally validates URL accessibility before downloading (-ValidateUrls).
    • Renders three WinGet manifest files (version, locale, installer) from templates.
  • Two sets of YAML templates:

    Directory Package ID Use case
    eng/winget/microsoft.aspire/ Microsoft.Aspire Stable releases (release/*)
    eng/winget/microsoft.aspire.prerelease/ Microsoft.Aspire.Prerelease Preview builds (main)

    Each set contains:

    • Aspire.yaml.template – version manifest
    • Aspire.locale.en-US.yaml.template – locale/metadata manifest (description, tags, license, etc.)
    • Aspire.installer.yaml.template – installer manifest (zip → portable with aspire.exe)

Testing

  • Manifests are validated with winget validate --manifest on every qualifying build.
  • A full install → verify → uninstall cycle runs on the build agent before any submission.
  • Manifest artifacts are published for manual inspection on every run (including dry-runs where publishToWinGet is false).

radical and others added 2 commits February 13, 2026 20:50
Add WinGet manifest generation, validation, and publishing to the
internal pipeline. Includes install/uninstall testing with proper
cleanup on failure, and fixes _IsPublishBranch string comparison
for template expression evaluation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…Get param

Add publishReleaseToWinGet pipeline parameter (default: false) so that
release branch builds only publish to WinGet when explicitly opted in.
Main branch non-PR builds continue to publish automatically.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions
Copy link
Contributor

github-actions bot commented Feb 14, 2026

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 14502

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 14502"

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.

1 participant