Skip to content

Use the 17.0 dashboard image for generated deployments - #21119

Merged
James Newton-King (JamesNK) merged 1 commit into
mainfrom
jamesnk/dashboard-image-17
Oct 19, 2026
Merged

James Newton-King (JamesNK) merged 1 commit into
mainfrom
jamesnk/dashboard-image-17

Conversation

@JamesNK

Copy link
Copy Markdown
Member

Description

Docker Compose and Kubernetes publishing can now use the published Aspire 17.0 dashboard image instead of pinning generated deployments to 13.6.

  • Comment out AspireDashboardImageTag in eng/Versions.props, with a 17.0 example and a note to uncomment it in future releases when the development branch precedes its dashboard image.
  • Retain the existing assembly metadata and override-resolution infrastructure. Without an active override, publishers resolve the dashboard tag from their product version.
  • Update running-publisher tests to expect 17.0, retain informational-version parsing and assembly-version fallback coverage, and exercise the optional override with a future-major publisher.
  • Regenerate all 28 affected publishing snapshots: 16 Docker, 11 Kubernetes, and one Yarp. Each snapshot changes only the dashboard tag.
  • Audit all tracked files, including hidden configuration, for legacy dashboard image repository names. No legacy references remain. The publisher playground sample intentionally keeps :latest; standalone documentation keeps the canonical stable repository.

The image-repository migration itself was completed in #20177. This change keeps mcr.microsoft.com/aspire/nightly/dashboard, does not change the product version, and does not switch generated deployments to latest.

Fixes #20068

User-facing usage

Generated Docker Compose and Kubernetes deployments now select:

# Before
image: "mcr.microsoft.com/aspire/nightly/dashboard:13.6"
# After
image: "mcr.microsoft.com/aspire/nightly/dashboard:17.0"

Validation

46 targeted tests passed, zero failed or skipped: Docker 17, Kubernetes 28, and Yarp 1. All three commands built the changed source and excluded quarantined and outerloop tests. Commands were run with MSBUILDTERMINALLOGGER=false and DiffEngine_Disabled=true.

Exact test commands and results
# Passed: 17 tests, 0 failed, 0 skipped.
dotnet test --project tests\Aspire.Hosting.Docker.Tests\Aspire.Hosting.Docker.Tests.csproj --no-launch-profile -p:SkipNativeBuild=true -- --filter-method '*.DashboardWithForwardedHeadersWritesEnvVar' --filter-method '*.DockerComposeAppliesServiceCustomizations' --filter-method '*.DockerComposeCorrectlyEmitsPortMappings' --filter-method '*.DockerComposeOnlyExposesExternalEndpoints' --filter-method '*.DockerComposeWithProjectResources' --filter-method '*.DockerSwarmDeploymentLabelsSerializedCorrectly' --filter-method '*.DockerSwarmUpdateConfigSerializedCorrectly' --filter-method '*.MultipleDockerComposeEnvironmentsSupported' --filter-method '*.PrepareStep_ResolvesArbitraryIValueProviderSource' --filter-method '*.PublishAsync_GeneratesValidDockerComposeFile' --filter-method '*.PublishAsync_HandlesConditionalReferenceExpression' --filter-method '*.PublishAsync_HandlesConditionalReferenceExpressionWithParameterCondition' --filter-method '*.PublishAsync_MultipleResourcesWithOtlp_ConfiguresAllForDashboard' --filter-method '*.PublishAsync_WithDashboard_HonorsRequiredOtlpProtocols' --filter-method '*.PublishAsync_WithDashboardEnabled_IncludesDashboardService' --filter-method '*.Name_UsesCanonicalAspireNightlyRepository' --filter-method '*.ResolveTag_*' --filter-not-trait 'quarantined=true' --filter-not-trait 'outerloop=true'

# Passed: 28 tests, 0 failed, 0 skipped.
dotnet test --project tests\Aspire.Hosting.Kubernetes.Tests\Aspire.Hosting.Kubernetes.Tests.csproj --no-launch-profile -p:SkipNativeBuild=true -- --filter-method '*.KubernetesMapsPortsForBaitAndSwitchResources' --filter-method '*.KubernetesWithProjectResources' --filter-method '*.MultipleKubernetesEnvironmentsSupported' --filter-method '*.PublishAsync_ConditionalWithParameterBranch_UsesIfElseSyntax' --filter-method '*.PublishAsync_CustomWorkloadAndResourceType' --filter-method '*.PublishAsync_GeneratesValidHelmChart' --filter-method '*.PublishAsync_HandlesConditionalReferenceExpression' --filter-method '*.PublishAsync_HandlesConditionalReferenceExpressionWithParameterCondition' --filter-method '*.PublishAsync_HandlesSpecialResourceName' --filter-method '*.PublishAsync_ResourceWithProbes' --filter-method '*.Name_UsesCanonicalAspireNightlyRepository' --filter-method '*.ResolveTag_*' --filter-not-trait 'quarantined=true' --filter-not-trait 'outerloop=true'

# Passed: 1 test, 0 failed, 0 skipped.
dotnet test --project tests\Aspire.Hosting.Yarp.Tests\Aspire.Hosting.Yarp.Tests.csproj --no-launch-profile -p:SkipNativeBuild=true -- --filter-method '*.GenerateEnvVariablesConfigurationDockerCompose' --filter-not-trait 'quarantined=true' --filter-not-trait 'outerloop=true'

Image validation on October 19, 2026:

  • docker pull mcr.microsoft.com/aspire/nightly/dashboard:17.0 — passed on linux/amd64.
  • docker run -d --rm -p 127.0.0.1::18888 -e ASPIRE_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS=true -e ASPIRE_DASHBOARD_TELEMETRY_OPTOUT=true mcr.microsoft.com/aspire/nightly/dashboard:17.0 — passed. The container logged dashboard version 17.0.0-preview.1.26514.11; an HTTP probe following the landing-page redirect returned 200. The smoke-test container was removed afterward.
  • Registry checks for both linux/amd64 and linux/arm64 manifests, configs, and all layer blobs — HTTP 200. No arm64 container execution is claimed.
  • XML validation confirmed the override is commented out and metadata wiring remains in both publishers — passed.
  • git diff --check — passed.

Full Docker Compose and Kubernetes deployment E2E checks were not run locally; they still need CI validation.

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

Keep the dashboard image override available but commented out for future releases. Update publisher tests and snapshots to resolve the 17.0 product-version tag.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@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://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 21119

Or

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

@github-actions

Copy link
Copy Markdown
Contributor

Tests selector

Selects the full PR test matrix + all PR-gated jobs (ALL) — a rule matching 'eng/Versions.props' selects ALL


Selection computed for commit 48af9b9.

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.

🔵 Needs a closer look

Docker Compose and Kubernetes deployment validation with the new image remains unconfirmed and needs human verification before approval.

No open issues 🎉

What changed in this PR

Updates generated Aspire deployments to use dashboard image 17.0, following the canonical repository migration in #20177.

Changes:

  • Disables the 13.6 override while retaining optional override support.
  • Updates tag-resolution tests for product version 17.0.
  • Changes only dashboard tags in 28 Docker, Kubernetes, and Yarp snapshots.
File Description
tests/​Aspire.Hosting.Yarp.Tests/​Snapshots/​YarpConfigGeneratorTests.GenerateEnvVariablesConfigurationDockerCompose.verified.env Expects dashboard 17.0.
tests/​Aspire.Hosting.Kubernetes.Tests/​Snapshots/​KubernetesPublisherTests.PublishAsync_ResourceWithProbes#00.verified.yaml Updates probes snapshot tag.
tests/​Aspire.Hosting.Kubernetes.Tests/​Snapshots/​KubernetesPublisherTests.PublishAsync_HandlesSpecialResourceName#02.verified.yaml Updates resource-name snapshot tag.
tests/​Aspire.Hosting.Kubernetes.Tests/​Snapshots/​KubernetesPublisherTests.PublishAsync_HandlesConditionalReferenceExpressionWithParameterCondition#02.verified.yaml Updates parameter-condition snapshot tag.
tests/​Aspire.Hosting.Kubernetes.Tests/​Snapshots/​KubernetesPublisherTests.PublishAsync_HandlesConditionalReferenceExpression#02.verified.yaml Updates conditional-reference snapshot tag.
tests/​Aspire.Hosting.Kubernetes.Tests/​Snapshots/​KubernetesPublisherTests.PublishAsync_GeneratesValidHelmChart#02.verified.yaml Updates Helm chart snapshot tag.
tests/​Aspire.Hosting.Kubernetes.Tests/​Snapshots/​KubernetesPublisherTests.PublishAsync_CustomWorkloadAndResourceType#02.verified.yaml Updates custom-workload snapshot tag.
tests/​Aspire.Hosting.Kubernetes.Tests/​Snapshots/​KubernetesPublisherTests.PublishAsync_ConditionalWithParameterBranch_UsesIfElseSyntax#02.verified.yaml Updates conditional-branch snapshot tag.
tests/​Aspire.Hosting.Kubernetes.Tests/​Snapshots/​KubernetesPublisherTests.KubernetesWithProjectResources#02.verified.yaml Updates project-resource snapshot tag.
tests/​Aspire.Hosting.Kubernetes.Tests/​Snapshots/​KubernetesPublisherTests.KubernetesMapsPortsForBaitAndSwitchResources#02.verified.yaml Updates port-mapping snapshot tag.
tests/​Aspire.Hosting.Kubernetes.Tests/​Snapshots/​KubernetesEnvironmentResourceTests.MultipleKubernetesEnvironmentsSupported/​env2/​templates/​env2-dashboard/​deployment.verified.yaml Updates second environment’s tag.
tests/​Aspire.Hosting.Kubernetes.Tests/​Snapshots/​KubernetesEnvironmentResourceTests.MultipleKubernetesEnvironmentsSupported/​env1/​templates/​env1-dashboard/​deployment.verified.yaml Updates first environment’s tag.
tests/​Aspire.Hosting.Kubernetes.Tests/​DashboardImageTests.cs Covers 17.0 resolution and future-major overrides.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposeTests.MultipleDockerComposeEnvironmentsSupported/​env2/​docker-compose.verified.yaml Updates second environment’s tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposeTests.MultipleDockerComposeEnvironmentsSupported/​env1/​docker-compose.verified.yaml Updates first environment’s tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposeTests.DockerSwarmUpdateConfigSerializedCorrectly.verified.yaml Updates Swarm configuration snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposeTests.DockerSwarmDeploymentLabelsSerializedCorrectly.verified.yaml Updates Swarm labels snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposeTests.DockerComposeOnlyExposesExternalEndpoints.verified.yaml Updates external-endpoints snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposeTests.DashboardWithForwardedHeadersWritesEnvVar.verified.yaml Updates forwarded-headers snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposePublisherTests.PublishAsync_WithDashboardEnabled_IncludesDashboardService.verified.yaml Updates dashboard-enabled snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposePublisherTests.PublishAsync_WithDashboard_HonorsRequiredOtlpProtocols.verified.yaml Updates telemetry-protocol snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposePublisherTests.PublishAsync_MultipleResourcesWithOtlp_ConfiguresAllForDashboard.verified.yaml Updates multi-resource telemetry snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposePublisherTests.PublishAsync_HandlesConditionalReferenceExpressionWithParameterCondition.verified.yaml Updates parameter-condition snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposePublisherTests.PublishAsync_HandlesConditionalReferenceExpression.verified.yaml Updates conditional-reference snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposePublisherTests.PublishAsync_GeneratesValidDockerComposeFile.verified.yaml Updates Compose generation snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposePublisherTests.PrepareStep_ResolvesArbitraryIValueProviderSource.verified.yaml Updates value-provider snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposePublisherTests.DockerComposeWithProjectResources.verified.yaml Updates project-resource snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposePublisherTests.DockerComposeCorrectlyEmitsPortMappings.verified.yaml Updates port-mapping snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​Snapshots/​DockerComposePublisherTests.DockerComposeAppliesServiceCustomizations.verified.yaml Updates service-customization snapshot tag.
tests/​Aspire.Hosting.Docker.Tests/​DashboardImageTests.cs Checks canonical repository and 17.0 resolution.
src/​Shared/​DashboardImage.cs Updates documentation example only.
eng/​Versions.props Comments out the active image override.

Review effort: Balanced

@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.

@mitchdenny Mitch Denny (mitchdenny) left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

One non-blocking scope difference: this disables the active dashboard image pin but retains the assembly metadata and override-resolution support for future version bumps. Issue #20068 originally called for removing that plumbing too; our closed PR #21127 shows that alternative cleanup in commit 7170c852f8.

Retaining reusable override support is acceptable here and does not block approval. The generated output matches our change, and the Docker Compose and Kubernetes deployment E2E checks passed.

@JamesNK
James Newton-King (JamesNK) merged commit 545e47e into main Oct 19, 2026
2530 of 2548 checks passed
@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 17.0 milestone Oct 19, 2026
@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Pull request created: #1909

Generated by PR Documentation Check · copilot · auto · 88.6 AIC · ⌖ 10.6 AIC · ⊞ 20.4K

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

📝 Documentation has been drafted in microsoft/aspire.dev#1909 targeting release/17.0.

Added a "Default container image updates" section to whats-new/aspire-17.mdx documenting that generated Docker Compose and Kubernetes deployments now resolve the 17.0 dashboard image tag (mcr.microsoft.com/aspire/nightly/dashboard:17.0) instead of the previous 13.6 pin, based on the pr_body_has_user_facing_section signal (PR body's "User-facing usage" before/after YAML snippet) and pr_body_has_cli_flag_mention signal (test-command evidence). Clarifies the tag resolves automatically from the product version absent an override, and that the image repository and latest-tag behavior are unchanged.

Note

This draft PR needs human review before merging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove temporary dashboard image override before 17.0 ships

3 participants