Skip to content

[release/13.5] Fix DevTunnel endpoint URL publication - #19625

Merged
Jose Perez Rodriguez (joperezr) merged 2 commits into
release/13.5from
backport-pr-19590-release-13.5
Aug 24, 2026
Merged

[release/13.5] Fix DevTunnel endpoint URL publication#19625
Jose Perez Rodriguez (joperezr) merged 2 commits into
release/13.5from
backport-pr-19590-release-13.5

Conversation

@danegsta

Copy link
Copy Markdown
Member

Description

Backport of #19590 to release/13.5.

After upgrading to Aspire 13.5, DevTunnel port resources can reach Running and Healthy while the Dashboard and MCP resource snapshots report no public URLs. This change prevents DCP from assigning temporary proxyless ports to integration-owned endpoints so DevTunnels can publish their actual public endpoints.

The cherry-pick conflict was resolved by retaining the release branch's existing DevTunnel tests and adding only the source PR's DCP regression scenario. The assertion preserves the trailing slash used by the 13.5 inspect URL format.

Fixes #19496

/cc Karol Zadora-Przylecki (@karolz-ms)

Customer Impact

Aspire 13.5 customers using Dev Tunnels see healthy, running tunnel port resources with no public URLs in the Dashboard or MCP resource snapshots, forcing them to discover and open the working URLs manually.

Testing

Focused release/13.5 tests passed for proxyless allocation on compute and annotation-backed container resources, DotnetProjectResource compute classification, and DCP-backed DevTunnel URL publication.

Risk

Low. The change is localized to proxyless DCP port allocation and preserves allocation for compute/container workloads while excluding integration-owned endpoints; focused regression coverage exercises both sides.

Regression?

Yes - regressed in 13.5 when proxyless endpoint allocation from #17924 assigned a temporary localhost port to DevTunnel port resources.

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

* Fix DevTunnel endpoint allocation

Limit automatic proxyless port allocation to compute resources so integration-owned endpoints can publish their own addresses.

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

Copilot-Session: e3b04d22-d265-49d0-861a-09aac8be80d6

* Address code review findings

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ec7aab9b-2163-45b7-89f6-c349fef7f07f

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: e3b04d22-d265-49d0-861a-09aac8be80d6
Copilot-Session: ec7aab9b-2163-45b7-89f6-c349fef7f07f
The release branch preserves a trailing slash on the inspect URL, unlike main's normalized URL behavior.

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

Copilot-Session: 8d56e681-8c44-4dab-ba09-39ae0f6eacb2
@github-actions

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://github.com/@raw/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 19625

Or

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

@github-actions github-actions Bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Aug 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Tests selector (audit mode)

The full test matrix and all jobs still run in audit mode. The tests and jobs below are what selective CI would run under enforcement.

48 / 100 test projects · 4 jobs, from 4 changed files.

Selected test projects (48 / 100)

Aspire.EndToEnd.Tests, Aspire.Hosting.Analyzers.Tests, Aspire.Hosting.Azure.Kubernetes.Tests, Aspire.Hosting.Azure.Kusto.Tests, Aspire.Hosting.Azure.Tests, Aspire.Hosting.Blazor.Tests, Aspire.Hosting.Browsers.Tests, Aspire.Hosting.CodeGeneration.Go.Tests, Aspire.Hosting.CodeGeneration.Java.Tests, Aspire.Hosting.CodeGeneration.Python.Tests, Aspire.Hosting.CodeGeneration.Rust.Tests, Aspire.Hosting.CodeGeneration.TypeScript.Tests, Aspire.Hosting.Containers.Tests, Aspire.Hosting.DevTunnels.Tests, Aspire.Hosting.Docker.Tests, Aspire.Hosting.Dotnet.Tests, Aspire.Hosting.DotnetTool.Tests, Aspire.Hosting.EntityFrameworkCore.Tests, Aspire.Hosting.Foundry.Tests, Aspire.Hosting.Garnet.Tests, Aspire.Hosting.GitHub.Models.Tests, Aspire.Hosting.Go.Tests, Aspire.Hosting.JavaScript.Tests, Aspire.Hosting.Kafka.Tests, Aspire.Hosting.Keycloak.Tests, Aspire.Hosting.Kubernetes.Tests, Aspire.Hosting.Maui.Tests, Aspire.Hosting.Milvus.Tests, Aspire.Hosting.MongoDB.Tests, Aspire.Hosting.MySql.Tests, Aspire.Hosting.Nats.Tests, Aspire.Hosting.OpenAI.Tests, Aspire.Hosting.Oracle.Tests, Aspire.Hosting.Orleans.Tests, Aspire.Hosting.PostgreSQL.Tests, Aspire.Hosting.Python.Tests, Aspire.Hosting.Qdrant.Tests, Aspire.Hosting.RabbitMQ.Tests, Aspire.Hosting.Radius.Tests, Aspire.Hosting.Redis.Tests, Aspire.Hosting.RemoteHost.Tests, Aspire.Hosting.Seq.Tests, Aspire.Hosting.SqlServer.Tests, Aspire.Hosting.Testing.Tests, Aspire.Hosting.Tests, Aspire.Hosting.Valkey.Tests, Aspire.Hosting.Yarp.Tests, Aspire.Playground.Tests

Selected jobs (4)

deployment-e2e, extension-e2e, polyglot, typescript-api-compat


How these were chosen — grouped by what changed

⚠️ 42 of the 48 selected test projects come from a single change — src/Aspire.Hosting/Dcp/DcpExecutor.cs.

🔧 src/Aspire.Hosting/Dcp/DcpExecutor.cs (changed source)
42 via the project graph

show 42

Aspire.Hosting.Analyzers.Tests (2 hops), Aspire.Hosting.Azure.Kubernetes.Tests (2 hops), Aspire.Hosting.Azure.Kusto.Tests (2 hops), Aspire.Hosting.Azure.Tests, Aspire.Hosting.Browsers.Tests (2 hops), Aspire.Hosting.CodeGeneration.Go.Tests, Aspire.Hosting.CodeGeneration.Java.Tests, Aspire.Hosting.CodeGeneration.Python.Tests, Aspire.Hosting.CodeGeneration.Rust.Tests, Aspire.Hosting.CodeGeneration.TypeScript.Tests, Aspire.Hosting.Containers.Tests (2 hops), Aspire.Hosting.Docker.Tests (2 hops), Aspire.Hosting.DotnetTool.Tests (2 hops), Aspire.Hosting.EntityFrameworkCore.Tests (2 hops), Aspire.Hosting.Foundry.Tests (2 hops), Aspire.Hosting.Garnet.Tests (2 hops), Aspire.Hosting.GitHub.Models.Tests (2 hops), Aspire.Hosting.Go.Tests (2 hops), Aspire.Hosting.JavaScript.Tests (2 hops), Aspire.Hosting.Kafka.Tests (2 hops), Aspire.Hosting.Keycloak.Tests (2 hops), Aspire.Hosting.Kubernetes.Tests (2 hops), Aspire.Hosting.Maui.Tests, Aspire.Hosting.Milvus.Tests (2 hops), Aspire.Hosting.MongoDB.Tests (2 hops), Aspire.Hosting.MySql.Tests (2 hops), Aspire.Hosting.Nats.Tests (2 hops), Aspire.Hosting.OpenAI.Tests (2 hops), Aspire.Hosting.Oracle.Tests (2 hops), Aspire.Hosting.Orleans.Tests (2 hops), Aspire.Hosting.PostgreSQL.Tests (2 hops), Aspire.Hosting.Python.Tests (2 hops), Aspire.Hosting.Qdrant.Tests (2 hops), Aspire.Hosting.RabbitMQ.Tests (2 hops), Aspire.Hosting.Redis.Tests (2 hops), Aspire.Hosting.RemoteHost.Tests, Aspire.Hosting.Seq.Tests (2 hops), Aspire.Hosting.SqlServer.Tests (2 hops), Aspire.Hosting.Testing.Tests (2 hops), Aspire.Hosting.Valkey.Tests (2 hops), Aspire.Hosting.Yarp.Tests (2 hops), Aspire.Playground.Tests

🧪 tests/Aspire.Hosting.Tests/Dcp/DcpExecutorTests.cs (changed test)
1 directly: Aspire.Hosting.Tests
2 via the project graph: Aspire.Hosting.Blazor.Tests, Aspire.Hosting.Radius.Tests

📦 affected project Aspire.Hosting
1 test: Aspire.EndToEnd.Tests

🧪 tests/Aspire.Hosting.DevTunnels.Tests/DevTunnelResourceBuilderExtensionsTests.cs (changed test)
1 directly: Aspire.Hosting.DevTunnels.Tests

🧪 tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectResourceTests.cs (changed test)
1 directly: Aspire.Hosting.Dotnet.Tests

Job reasons

Job Triggered by
deployment-e2e affected project Aspire.Hosting.Azure
extension-e2e src/Aspire.Hosting/Dcp/DcpExecutor.cs
• affected project Aspire.Hosting
polyglot affected project Aspire.Hosting.Go
typescript-api-compat affected project Aspire.Hosting

Selection computed for commit cc384e2.

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.

Pull request overview

Backports the DevTunnel URL publication fix to release/13.5 by limiting automatic proxyless port allocation to DCP workloads.

Changes:

  • Restricts proxyless allocation to compute and container resources.
  • Adds regression coverage for DevTunnel URL publication and container allocation.
  • Verifies DotnetProjectResource remains a compute resource.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.

File Description
src/Aspire.Hosting/Dcp/DcpExecutor.cs Limits proxyless port allocation to DCP workloads.
tests/Aspire.Hosting.Tests/Dcp/DcpExecutorTests.cs Covers workload and DevTunnel allocation behavior.
tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectResourceTests.cs Verifies .NET project compute classification.
tests/Aspire.Hosting.DevTunnels.Tests/DevTunnelResourceBuilderExtensionsTests.cs Verifies public tunnel and inspect URLs reach resource snapshots.

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@joperezr

Copy link
Copy Markdown
Member

Failures are unrelated and have been fixed in the release branhc.

@joperezr
Jose Perez Rodriguez (joperezr) merged commit b5f1433 into release/13.5 Aug 24, 2026
1675 of 1696 checks passed
@joperezr
Jose Perez Rodriguez (joperezr) deleted the backport-pr-19590-release-13.5 branch August 24, 2026 23:31
@github-actions github-actions Bot added this to the 13.5.x milestone Aug 24, 2026
@aspire-repo-bot

Copy link
Copy Markdown
Contributor

✅ No documentation update needed.

Step 5 branch taken: excluded -> base_branch_is_release, title_release_prefix, body_backport_marker

This PR is a backport (of #19590 to release/13.5), confirmed by .pr-docs-check/signals.json (excluded: true). Backport PRs are out of scope for docs generation since user-facing documentation is authored against the original forward PR on the default branch; drafting a second docs PR here would be duplicate noise.

Triggered signals: none (signal_count: 0, recommendation: docs_optional) - the excluded flag overrides the recommendation regardless.

Exclusion reasons (from signals.json):

No documentation PR was drafted.

This was referenced Aug 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants