Skip to content

Merge release/13.4 to main after v13.4.1 release#17883

Open
aspire-repo-bot[bot] wants to merge 10 commits into
mainfrom
release/13.4
Open

Merge release/13.4 to main after v13.4.1 release#17883
aspire-repo-bot[bot] wants to merge 10 commits into
mainfrom
release/13.4

Conversation

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

This PR merges the release/13.4 branch back to main after the v13.4.1 release.

Checklist

  • Verify all release-specific changes are appropriate for main
  • Resolve any merge conflicts
  • Ensure CI passes

Created automatically by the release workflow.

joperezr and others added 7 commits June 1, 2026 21:21
* [release/13.4] Add Aspire CLI npm package release integration

Backport of #17297 to release/13.4.

Adds npm packaging and release-pipeline publishing for the Aspire CLI:
pack/sign/verify of the @microsoft/aspire-cli pointer package and its
seven RID packages, npm install validation steps, npm publish + registry
validation stages in release-publish-nuget.yml, npm pipeline variables,
and CLI npm-install detection/update messaging.

The docs/release-process.md changes from the source PR are intentionally
omitted: on main they are interleaved with VS Code extension / Marketplace
release documentation that does not apply to release/13.4 (the VS Code
extension is not released from this branch).

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

* Fix Aspire CLI npm signing scope (#17770)

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…json (#17820)

The embedded CLI template src/Aspire.Cli/Templating/Templates/empty-apphost/aspire.config.json
shipped a profiles block that duplicated apphost.run.json. The canonical template in
src/Aspire.ProjectTemplates/templates/aspire-apphost-singlefile/aspire.config.json
intentionally has no profiles (per Damian's design): aspire run / dotnet run apphost.cs
honor apphost.run.json when present, so aspire.config.json for the C# Empty template
should only carry { "appHost": { "path": "apphost.cs" } }.

Updated NewCommandTests to:
- assert that aspire.config.json has no profiles block and pins appHost.path = apphost.cs
- assert that apphost.run.json carries the launch URLs (plain localhost and dev.localhost variants)
- drop the now-unused AssertHttpsApplicationUrlMatches helper

Fixes #17660

Co-authored-by: Mitch Denny <midenn@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Defer explicit-start DCP registration

Avoid evaluating execution configuration callbacks for session-scoped explicit-start resources until they are manually started. Persistent explicit-start resources are still registered eagerly, but manual start now patches the existing DCP object instead of recreating it.

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

* Refine explicit-start DCP lifecycle

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

---------

Co-authored-by: David Negstad <David.Negstad@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add proxyless endpoint on-demand allocation

Allow dynamic proxyless container endpoints to allocate a target-port fallback when an endpoint reference requires an allocated endpoint before container creation. Disable the on-demand allocator once container ports are built so later resolution continues to use DCP service updates.

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

* Log proxyless endpoint fallback allocation

Log when a dynamic proxyless container endpoint is resolved before container creation and Aspire assigns the public port to match the target port.

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

* Use atomic proxyless allocator cutoff

Replace the endpoint allocation cutoff lock with an atomic exchange so BuildContainerPorts remains the point where on-demand proxyless endpoint allocation stops.

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

* Remove proxyless allocator clear helper

Use the atomic OnDemandAllocatedEndpointProvider setter directly at the BuildContainerPorts cutoff instead of a dedicated clear wrapper.

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

* Simplify proxyless allocator provider storage

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

* Move proxyless allocator cutoff into port build

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

* Move on-demand endpoint allocation ownership to resource

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

* Clarify on-demand endpoint allocation lifecycle

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

* Simplify resource-owned endpoint allocation

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

* Move proxyless allocation cutoff after configuration

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

---------

Co-authored-by: David Negstad <David.Negstad@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix Redis persistent lifetime startup

Use Redis endpoint target ports for TLS startup arguments so container command-line evaluation does not wait for allocated public ports before the container exists.

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

* Bound Redis argument evaluation test

Use a bounded wait around the Redis argument evaluation regression test so the test fails promptly if endpoint resolution deadlocks again.

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

---------

Co-authored-by: David Negstad <David.Negstad@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings June 3, 2026 19:40
@aspire-repo-bot aspire-repo-bot Bot added the area-engineering-systems infrastructure helix infra engineering repo stuff label Jun 3, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

🚀 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/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 17883

Or

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

aspire-repo-bot Bot and others added 3 commits June 4, 2026 19:52
* Add per-integration persistence tests

Co-authored-by: danegsta <50252651+danegsta@users.noreply.github.com>

* Add CLI persistent container E2E test

Co-authored-by: danegsta <50252651+danegsta@users.noreply.github.com>

* Fix persistence test compilation

Co-authored-by: danegsta <50252651+danegsta@users.noreply.github.com>

* Address persistence test review feedback

Co-authored-by: danegsta <50252651+danegsta@users.noreply.github.com>

* Add Azure emulator mode coverage

Co-authored-by: danegsta <50252651+danegsta@users.noreply.github.com>

* Address emulator mode test review feedback

Co-authored-by: danegsta <50252651+danegsta@users.noreply.github.com>

* Stabilize persistent container tests

Use an isolated user-secrets store for persistent container test runs so integration defaults can persist generated parameters across AppHost restarts. Avoid the CI container registry override for Azurite because the mirrored tag is unavailable.

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

* Stop forcing test container registry in persistent helper

Let persistent container tests use the same container registry configuration path as normal TestDistributedApplicationBuilder usage instead of forcing the test mirror from the helper.

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

* Use start waits in persistent container E2E

Avoid blocking the test server on dependency health checks in the CLI E2E scenario. The endpoint verification already retries real Redis, PostgreSQL, and Azure Storage operations after the resources have started.

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

* Compare Docker container IDs in persistent tests

Assert persistent container tests observe container.lifetime=Persistent and compare the actual container.id across AppHost runs instead of the stable DCP resource ID.

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

* Read synthetic user secrets in persistent tests

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

* Allow persistent tests to opt into test registry

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

* Make persistent test secrets cleanup best effort

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

* Fix persistent container E2E networking

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

* Propagate CLI E2E start timeout

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

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: danegsta <50252651+danegsta@users.noreply.github.com>
Co-authored-by: David Negstad <David.Negstad@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… update manifest tags (#17958)

* fix(winget): unblock WinGet Manifest job on locked-down 1ES agents

The `🟣Install winget CLI` step on the WinGet Manifest job fails on
the 1ES `1es-windows-2022` pool with:

  An attempt was made to access a socket in a way forbidden by its
  access permissions. (cdn.winget.microsoft.com:443)

The step ran `Repair-WinGetPackageManager -Latest -Force -AllUsers`
to (re)install the winget CLI, which downloads the
Microsoft.DesktopAppInstaller MSIX from cdn.winget.microsoft.com.
That CDN is not reachable from the locked-down 1ES pool, so the
PowerShell step exits 1, `🟣Prepare WinGet manifests` is skipped,
and `🔒 🟣Publish WinGet manifests` then fails because the manifest
directory was never produced. The whole job aborts before any
manifests reach the artifact share. This is the failure on
release/13.4 builds 2989641, 2989822, 2990382, 2990509, 2990688.

Replace the install/repair step with a probe-only step that records
whether winget happens to be pre-installed on the image, and hardcode
the downstream `prepare-manifest-artifact.ps1` call to `Offline`
ValidationMode. The script tolerates a missing winget in Offline mode
(logs a warning, still produces the manifest artifact) but hard-fails
in Full mode — and Full mode is unreachable on this pool because
winget cannot be installed. Drop the `skipUrlValidation` template
parameter, the only callers (azure-pipelines.yml,
azure-pipelines-unofficial.yml), and the `_PackagesPublished`
variable composed only to feed it.

Manifest validation is intentionally delegated to upstream
`microsoft/winget-pkgs` CI — see the new "Validation model" section
in eng/winget/README.md for what upstream checks (schema, binary AV
scan, URL + SmartScreen, SHA256, install/uninstall in a clean VM).
This matches the pattern used by every other Microsoft repo
publishing to WinGet (PowerToys, terminal, winget-create itself,
which also runs on the same 1ES `windows-2022` pool and likewise
does not invoke winget in CI).

End-to-end probe + prepare + publish path validated on internal
build 2990922 (a sibling branch that exercised the WinGet Manifest
job via a stage-condition override). Real-prod validation occurs
when this lands on release/13.4 and the stage condition naturally
includes it.

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

* Update WinGet manifest tags

The WinGet package template still categorized the Aspire CLI with the
`dotnet` tag. Replace that tag with `csharp` and `typescript` so the
package metadata better matches supported Aspire application languages.

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

* docs(winget): note GH Actions install + smoke-test path

The 'Validation model' section originally implied the Aspire side does
only generation + opportunistic `winget validate`. In fact
`.github/workflows/prepare-installer-artifacts.yml` also runs
`dogfood.ps1 -Force` (real `winget install --manifest` from the
freshly built archive) plus a smoke test (`aspire new` + restore)
against the installed shim on every PR. Document that. Clarify that the
install-only path catches issues `winget validate` does not (SHA
mismatch, broken `InstallerSwitches`, missing `Commands`), while the
full install/uninstall round-trip remains an upstream-CI responsibility.

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

---------

Co-authored-by: Ankit Jain <radical@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix persistent container endpoint allocation

Default persistent container endpoints to proxied unless proxy support is disabled, and remove delayed proxyless container endpoint allocation in favor of target-port public port defaults. Preserve endpoint and connection string event timing from release/13.3 and add coverage for the KeyVault emulator-style health check path.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Restore health check URI binding timing

Set HTTP health check URIs during BeforeResourceStartedEvent again so surrogate resource builders that forward startup events continue to initialize their health checks. Add DCP coverage for the KeyVault-emulator-style surrogate pattern.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Bump Aspire patch version to 13.4.3

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

* Preserve blocking endpoint allocation dispatch

Keep ResourceEndpointsAllocatedEvent dispatch aligned with release/13.4 so subscriber exceptions propagate and endpoint allocation callbacks complete before startup proceeds.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Stabilize Kafka persistent reuse test port

Use a fixed public Kafka port for the persistent reuse test and let the shared persistent-container helper disable DCP test port randomization when a test needs explicit ports to remain stable.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

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

area-engineering-systems infrastructure helix infra engineering repo stuff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants