Skip to content

Migrate dashboard consumers to canonical Aspire images - #20177

Merged
David Pine (IEvangelist) merged 2 commits into
mainfrom
ievangelist-dashboard-image-consumer-migration
Oct 12, 2026
Merged

David Pine (IEvangelist) merged 2 commits into
mainfrom
ievangelist-dashboard-image-consumer-migration

Conversation

@IEvangelist

@IEvangelist David Pine (IEvangelist) commented Sep 16, 2026 •

Copy link
Copy Markdown
Member

Description

Move Aspire Dashboard consumers to the canonical Aspire image family introduced by dotnet/dotnet-docker#7337, merged September 15, 2026. Docker Compose and Kubernetes publishing use mcr.microsoft.com/aspire/nightly/dashboard; standalone documentation uses mcr.microsoft.com/aspire/dashboard.

Publication is verified. On October 12, 2026, all images consumed by this PR returned HTTP 200. Their manifest digests match the corresponding legacy v13 aliases, and their linux/amd64 and linux/arm64 manifests, configs, and every layer are accessible:

Consumer Image Manifest digest
Docker Compose, Kubernetes, and Yarp publishing mcr.microsoft.com/aspire/nightly/dashboard:13.6 sha256:03a6f96028282634e3e957fb0b146e83fcc88e98f34aa3d689a38cd8ac31e5e7
Existing publisher sample and defensive tag fallback mcr.microsoft.com/aspire/nightly/dashboard:latest sha256:03a6f96028282634e3e957fb0b146e83fcc88e98f34aa3d689a38cd8ac31e5e7
Standalone persistence documentation mcr.microsoft.com/aspire/dashboard:latest sha256:613f297a274958abd85e7b71664f51fb42b0ddeb697ebd4c159677774433345b

Related to #20068; this PR does not close it. Current development assemblies are version 17.0 and retain the existing AspireDashboardImageTag=13.6 build-time override. Canonical 14.0 and 17.0 tags are not published, so removing the pin or changing the product version would break deployment. The informational-version parser, assembly-version fallback, explicit override, and historical latest fallback are unchanged. The legacy repositories remain v13 syndication aliases, not the future-major publication target.

Repository-wide audit

Audited the complete tracked repository, including hidden configuration, release/nightly consumers, publishing code, tests and snapshots, engineering scripts, workflows, playground samples, and documentation. No active legacy dotnet/aspire-dashboard or dotnet/nightly/aspire-dashboard image references remain. Other aspire-dashboard occurrences are resource/container names, native archive/package naming, telemetry, local data paths, or historical release content; they are not image repository references and were preserved. Custom-image test fixtures are also unchanged.

The final diff retains the original scope: the shared image name/catalog link, 28 publishing snapshots (16 Docker, 11 Kubernetes, one Yarp), one repository-name regression test, the standalone documentation, and the existing publisher sample. Tags, nightly/stable channel selection, generated settings, and encodings are preserved. Fresh canonical main was fetched; the existing approved PR head is conflict-free. No unnecessary head update was pushed.

User-facing usage

Generated deployments keep their existing pinned tag and change only the repository name:

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

Kubernetes manifests use the same image. Resource names, ports, environment variables, and AppHost configuration are unchanged.

Validation

Validated source checkout and CI at exact head 997455d5fecad0b77bba0e6714fe6840334d81c7.

42 focused local tests passed, zero failed or skipped: Docker 16, Kubernetes 25, Yarp 1. These cover every changed snapshot method, canonical image naming, build-time pins in both publisher assemblies, informational-version parsing, assembly-version fallback, and the defensive latest fallback. git diff --check upstream/main...HEAD passed.

SDK bootstrap/restore: .\restore.cmd /p:SkipNativeBuild=true — passed. The source test commands below were run with MSBUILDTERMINALLOGGER=false and DiffEngine_Disabled=true:

# Passed: 16 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 '*.ResolveTag_FromRunningAssembly_UsesBuildTimeImageTag' --filter-not-trait 'quarantined=true' --filter-not-trait 'outerloop=true'
# Passed: 25 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'

Real deployment verification is present in CI run 37870763313 on this same head. The DockerDeploymentTests job and KubernetesDeployBasicApiServiceTests job each executed 2 tests, all passed, zero failed or skipped; their logs were inspected, not inferred from job status alone. Docker and Kubernetes hosting tests also passed on Windows and Linux. The local Docker daemon is unavailable, so no local container startup or deployment E2E execution is claimed.

Release follow-up

Keep the existing 13.6 override until the matching canonical future-major nightly tag is published and pullable on deployment-test platforms. #20068 remains separate cleanup for 17.0; its publication prerequisite should refer to mcr.microsoft.com/aspire/nightly/dashboard:17.0, not the legacy syndicated repository. Do not undo the product version bump or switch generated deployments to latest.

Coordinated consumer PRs: microsoft/aspire.dev#1679 and microsoft/aspire-samples#1952.

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

Co-authored-by: Copilot App <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 -- 20177

Or

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

@aspire-repo-bot
aspire-repo-bot Bot requested a balanced review from Copilot September 16, 2026 13:30
@github-actions github-actions Bot added the area-integrations Issues pertaining to Aspire Integrations packages label Sep 16, 2026
@github-actions

This comment has been minimized.

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.

🟡 Changes recommended

The documented stable tag is unavailable, and canonical image publication plus real Docker/Kubernetes deployment verification remain outstanding.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Migrates Aspire Dashboard consumers to canonical Aspire image repositories while preserving version-tag resolution and fallback behavior.

Changes:

  • Updates shared image configuration and regression coverage.
  • Refreshes Docker, Kubernetes, and YARP snapshots.
  • Updates documentation and publisher samples.
  • Approval remains blocked pending image publication and deployment verification.
File summaries
File Summary
tests/Aspire.Hosting.Yarp.Tests/Snapshots/YarpConfigGeneratorTests.GenerateEnvVariablesConfigurationDockerCompose.verified.env Updates the generated dashboard image repository.
tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_ResourceWithProbes#00.verified.yaml Updates the Kubernetes dashboard image repository while preserving the tag.
tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_HandlesSpecialResourceName#02.verified.yaml Updates the Kubernetes dashboard image repository.
tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_HandlesConditionalReferenceExpressionWithParameterCondition#02.verified.yaml Updates the Kubernetes dashboard image repository.
tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_HandlesConditionalReferenceExpression#02.verified.yaml Updates the Kubernetes dashboard image repository.
tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_GeneratesValidHelmChart#02.verified.yaml Updates the Helm dashboard image repository.
tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_CustomWorkloadAndResourceType#02.verified.yaml Updates the Kubernetes dashboard image repository.
tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_ConditionalWithParameterBranch_UsesIfElseSyntax#02.verified.yaml Updates the Kubernetes dashboard image repository.
tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.KubernetesWithProjectResources#02.verified.yaml Updates the Kubernetes dashboard image repository.
tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.KubernetesMapsPortsForBaitAndSwitchResources#02.verified.yaml Updates the Kubernetes dashboard image repository.
tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesEnvironmentResourceTests.MultipleKubernetesEnvironmentsSupported/env2/templates/env2-dashboard/deployment.verified.yaml Updates the environment dashboard image repository.
tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesEnvironmentResourceTests.MultipleKubernetesEnvironmentsSupported/env1/templates/env1-dashboard/deployment.verified.yaml Updates the environment dashboard image repository.
tests/Aspire.Hosting.Kubernetes.Tests/DashboardImageTests.cs Adds coverage for the canonical repository name.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.MultipleDockerComposeEnvironmentsSupported/env2/docker-compose.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.MultipleDockerComposeEnvironmentsSupported/env1/docker-compose.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.DockerSwarmUpdateConfigSerializedCorrectly.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.DockerSwarmDeploymentLabelsSerializedCorrectly.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.DockerComposeOnlyExposesExternalEndpoints.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.DashboardWithForwardedHeadersWritesEnvVar.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_WithDashboardEnabled_IncludesDashboardService.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_WithDashboard_HonorsRequiredOtlpProtocols.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_MultipleResourcesWithOtlp_ConfiguresAllForDashboard.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_HandlesConditionalReferenceExpressionWithParameterCondition.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_HandlesConditionalReferenceExpression.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_GeneratesValidDockerComposeFile.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PrepareStep_ResolvesArbitraryIValueProviderSource.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.DockerComposeWithProjectResources.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.DockerComposeCorrectlyEmitsPortMappings.verified.yaml Updates the generated dashboard image repository.
tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.DockerComposeAppliesServiceCustomizations.verified.yaml Updates the generated dashboard image repository.
src/Shared/DashboardImage.cs Switches generated deployments to the canonical nightly repository; publication and real-image validation remain required.
playground/publishers/aspire-output/docker-compose.yaml Updates the publisher sample to the canonical nightly image.
docs/specs/dashboard-persistence.md Uses the canonical stable image; the referenced tag must be published and verified.
Review details
  • Files reviewed: 32/32 changed files
  • Comments generated: 2
  • Review effort level: Lite (auto)

Note

Copilot is running an experiment and ran this review at Lite.

Comment thread docs/specs/dashboard-persistence.md Resolved
Comment thread src/Shared/DashboardImage.cs Resolved
@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.

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 review overview

🟡 Changes recommended

The persistence example references the canonical stable repository before that image is published.

Review effort: Balanced
Findings: 1 High severity · 1 Medium severity

Open (2)

Preserve the canonical Aspire image migration alongside main's 17.0 product version and 13.6 dashboard-image override. Resolve the documentation-only conflict using main's concise resolver documentation.

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

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Tests selector

7 / 98 PR test projects · 3 PR jobs, from 31 changed files.

Selected PR test projects (7 / 98)

Aspire.Cli.EndToEnd.Tests, Aspire.Hosting.Azure.Kubernetes.Tests, Aspire.Hosting.CodeGeneration.TypeScript.Tests, Aspire.Hosting.Docker.Tests, Aspire.Hosting.Kubernetes.Tests, Aspire.Hosting.Yarp.Tests, Aspire.Playground.Tests

Selected PR jobs (3)

extension-e2e, polyglot, typescript-api-compat


How these were chosen — grouped by what changed

🔧 src/Shared/DashboardImage.cs (changed source)
→ 3 via the project graph: Aspire.Hosting.Azure.Kubernetes.Tests (2 hops), Aspire.Hosting.CodeGeneration.TypeScript.Tests, Aspire.Playground.Tests (2 hops)

📦 affected project Aspire.Hosting.Kubernetes
→ 1 test: Aspire.Cli.EndToEnd.Tests

📄 playground/publishers/aspire-output/docker-compose.yaml (changed)
→ 1 directly: Aspire.Playground.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.DockerComposeAppliesServiceCustomizations.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.DockerComposeCorrectlyEmitsPortMappings.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.DockerComposeWithProjectResources.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PrepareStep_ResolvesArbitraryIValueProviderSource.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_GeneratesValidDockerComposeFile.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_HandlesConditionalReferenceExpression.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_HandlesConditionalReferenceExpressionWithParameterCondition.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_MultipleResourcesWithOtlp_ConfiguresAllForDashboard.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_WithDashboardEnabled_IncludesDashboardService.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.PublishAsync_WithDashboard_HonorsRequiredOtlpProtocols.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.DashboardWithForwardedHeadersWritesEnvVar.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.DockerComposeOnlyExposesExternalEndpoints.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.DockerSwarmDeploymentLabelsSerializedCorrectly.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.DockerSwarmUpdateConfigSerializedCorrectly.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.MultipleDockerComposeEnvironmentsSupported/env1/docker-compose.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposeTests.MultipleDockerComposeEnvironmentsSupported/env2/docker-compose.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/DashboardImageTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesEnvironmentResourceTests.MultipleKubernetesEnvironmentsSupported/env1/templates/env1-dashboard/deployment.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesEnvironmentResourceTests.MultipleKubernetesEnvironmentsSupported/env2/templates/env2-dashboard/deployment.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.KubernetesMapsPortsForBaitAndSwitchResources#02.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.KubernetesWithProjectResources#02.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_ConditionalWithParameterBranch_UsesIfElseSyntax#02.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_CustomWorkloadAndResourceType#02.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_GeneratesValidHelmChart#02.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_HandlesConditionalReferenceExpression#02.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_HandlesConditionalReferenceExpressionWithParameterCondition#02.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_HandlesSpecialResourceName#02.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.PublishAsync_ResourceWithProbes#00.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Yarp.Tests/Snapshots/YarpConfigGeneratorTests.GenerateEnvVariablesConfigurationDockerCompose.verified.env (changed test)
→ 1 directly: Aspire.Hosting.Yarp.Tests

Job reasons

Job Triggered by
extension-e2e affected project Aspire.Hosting.Docker
polyglot • affected project Aspire.Hosting.Kubernetes
• affected project Aspire.Hosting.Azure.Provisioning.ContainerService
typescript-api-compat affected project Aspire.Hosting.Kubernetes

Selection computed for commit 997455d.

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

The changes are internally consistent, but container startup and deployment against the new registry paths have not been validated.

2 open findings

🧠 Review effort: Balanced

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

Approved for merge once the canonical Aspire Dashboard images referenced by this PR are published and verified as pullable.

@IEvangelist
David Pine (IEvangelist) marked this pull request as ready for review October 10, 2026 12:31
@IEvangelist
David Pine (IEvangelist) enabled auto-merge (squash) October 10, 2026 12:31

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.

No issues found. Verified that the canonical stable latest and nightly 13.6 image tags are published, match the legacy manifest digests, and expose accessible manifests/config/layers for linux/amd64 and linux/arm64. The existing 13.6 build-time override is retained. Reviewed passing CI coverage on this commit, including Docker and Kubernetes hosting tests and real Docker Compose and Kubernetes deployment E2E tests (two passed in each deployment class, none skipped). Local deployment tests were not run because the Docker daemon is unavailable.

@IEvangelist
David Pine (IEvangelist) merged commit b1d4824 into main Oct 12, 2026
202 checks passed
@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 17.0 milestone Oct 12, 2026
David Pine (IEvangelist) added a commit to microsoft/aspire.dev that referenced this pull request Oct 12, 2026
## Summary

<!-- Describe what this pull request changes and why. -->

Update active dashboard image references to the published canonical
Aspire repositories. The previous draft/publication warnings are
resolved: all exact image tags consumed by this PR returned HTTP 200 on
October 12, 2026. The PR is ready for review and conflict-free; an
explicit user-directed merge hold remains in effect.

- Audit all 2,475 tracked files, including 611 documentation pages and
every available localization, plus generated data, runnable examples,
configuration, scripts, and workflows. All active tagged references now
use canonical names; legacy names remain only in migration explanations.
Historical release pages and the hosting-integration image catalog are
unchanged.
- Use `mcr.microsoft.com/aspire/dashboard:latest` in all standalone
Docker examples, including the newly added persistence examples.
Preserve container names, ports, authentication, telemetry limits, CORS,
volumes, and persistence settings.
- Keep the English Compose examples on the intentional floating
`mcr.microsoft.com/aspire/nightly/dashboard:latest` selection, with an
explicit publisher-output caveat. Align both Japanese generated-output
examples with the current publisher's version-line selection,
`mcr.microsoft.com/aspire/nightly/dashboard:13.6`, rather than
introducing a new manual translation.
- Preserve the upstream sample's nightly `13.6` pin in its command and
explanation, in both generated README fields. Retain current-main
screenshots and metadata; no other sample fields change semantically.
After the source change merged, normal-main generation verified that the
entire 29-sample catalog is semantically identical to this committed
data.
- Explain repository mappings, tag availability, immutable digests, and
Aspire 13 servicing compatibility. Do not silently upgrade a
version-constrained example when its old tag is unavailable in the new
repository.
- Merge canonical `main` (`1a61517655b4fd7811ef63fb5913f6fb623d9d6a`)
while preserving the original PR commits. Resolve the generated catalog
conflict through the existing updater and extend regression coverage to
persistence commands, all active documentation locales, and arbitrary
valid Docker image tags.

### Feedback addressed

Both actionable inline findings were fixed in
`728e2b88638808155fe10d8f9b0e5f078aa71635`, replied to, and resolved
after pushing to the existing upstream head:

- Match Docker tag grammar rather than three hard-coded tags. Regression
fixtures cover versions, architecture/preview tags, underscores, mixed
case, 128-character tags, end-of-input, and tag-plus-digest references
in both legacy channels. Historical release-page exclusions remain
intact.
- Align both Japanese Compose output examples to canonical nightly
`13.6`; retain the English guide's explicit floating-nightly
explanation. Browser clipboard verification confirms the final
language-specific selections.

A fully paginated feedback refresh returned two resolved threads, no
further thread/comment pages, and zero unresolved findings. No
additional actionable general comments were present.

### Dependencies and merge gates

- Publisher prerequisite
[dotnet/dotnet-docker#7337](dotnet/dotnet-docker#7337)
merged on September 15, 2026. Publisher manifests use `aspire/dashboard`
on `main` (`f731d8c7f1049741a025a3ed8c034f6921c8af5e`) and
`aspire/nightly/dashboard` on `nightly`
(`f1f5cc1b0a02f0dd4538d013cca20a89d4ada83e`); actual publication is
independently confirmed below.
- Source synchronization is fulfilled:
[microsoft/aspire-samples#1952](microsoft/aspire-samples#1952)
merged as `9e83d52d2f0e8be2c5cc61e87e2a3d9b010f1fc3`. This catalog was
initially generated from corrected head
`d9ee93a5ef275919aa81956794ad34285a262199` with the supported
`SAMPLES_BRANCH` override; running the existing generator against normal
`main` after the merge produced semantically identical data for all 29
samples. No needless follow-up catalog edit was made.
- Companion
[microsoft/aspire#20177](microsoft/aspire#20177)
is coordinated separately. At current product `main`
(`b1d4824f1249ea4297b818a3f67c48f0cdb5a3ef`),
`src/Shared/DashboardImage.cs` and the Docker publisher select the
canonical nightly name and resolve a build override or the running
product's major/minor tag. This documentation does not claim that manual
image edits rewrite installed tooling's output.
- **Do not merge, enable auto-merge, or enqueue while the user-directed
incident hold is active.** GitHub auto-merge is disabled and the PR has
no queue entry.
- A valid human approval of the final work and green required/relevant
exact-head CI are mandatory after the hold is lifted. `mitchdenny`
approved the preceding head `e55de41c1d28522ef5f40aa22a53f19134e36017`;
GitHub retains that approval after the feedback push, so a summary
`APPROVED` state must not be mistaken for review of the current head. No
self-approval or bypass was performed.

### Exact published image decisions

| Use | Image | Manifest verification |
| --- | --- | --- |
| Standalone guides | `mcr.microsoft.com/aspire/dashboard:latest` | HTTP
200;
`sha256:613f297a274958abd85e7b71664f51fb42b0ddeb697ebd4c159677774433345b`
|
| Explicitly illustrative English Compose examples |
`mcr.microsoft.com/aspire/nightly/dashboard:latest` | HTTP 200;
`sha256:03a6f96028282634e3e957fb0b146e83fcc88e98f34aa3d689a38cd8ac31e5e7`
|
| Japanese publisher-output examples and upstream sample |
`mcr.microsoft.com/aspire/nightly/dashboard:13.6` | HTTP 200;
`sha256:03a6f96028282634e3e957fb0b146e83fcc88e98f34aa3d689a38cd8ac31e5e7`
|

Both canonical tag lists contain `13`, `13.6`, and `latest`, but earlier
minors such as `13.0` are absent. Exact canonical `13.0`–`13.3` requests
returned 404 while their legacy counterparts returned 200. A repository
rename is not a reason to change an intentionally pinned version or
switch release channels.

## Third-party links and affiliations

<!--
List any third-party links added or changed by this pull request and
disclose any
material affiliation with the linked organizations, such as employment,
sponsorship, or ownership. Write "None" if this pull request doesn't add
or
change third-party links.
-->

None. Added catalog links point to Microsoft's own Microsoft Container
Registry.

## Validation

<!-- List the checks you ran or explain why validation isn't needed. -->

Validated/pushed head: `728e2b88638808155fe10d8f9b0e5f078aa71635`.

- `pnpm --dir .\src\frontend exec vitest run --config vitest.config.ts
tests/unit/dashboard-image-references.vitest.test.ts
tests/unit/dashboard-agent-commands.vitest.test.ts
tests/unit/update-samples.vitest.test.ts`: **69 passed** after the
feedback fixes. Earlier extended coverage reproduced three stale
persistence/sample-reference failures before correction.
- `pnpm --dir .\src\frontend exec eslint
tests\unit\dashboard-image-references.vitest.test.ts --max-warnings 0`:
**passed**.
- `$env:SAMPLES_BRANCH = 'd9ee93a5ef275919aa81956794ad34285a262199';
pnpm --dir .\src\frontend update:samples`: **passed**, all 29 samples
fetched; only the standalone-dashboard README fields changed
semantically versus the base. Its `readmeRaw` exactly matches the pinned
source bytes. Post-merge execution of the same `update-samples.ts` with
`SAMPLES_BRANCH=main` in a temporary output directory: **passed**, all
29 generated sample objects matched the committed catalog; temporary
assets were removed.
- `git diff upstream/main HEAD --check`: **passed**. Final PR diff: nine
intended files, 215 insertions and 20 deletions. Existing PR history and
the latest base ancestry are preserved.
- `pnpm dev --host 127.0.0.1 --port 4389` with telemetry disabled:
**started successfully**. Playwright CLI verified all seven affected
documentation routes, Bash/PowerShell
standalone/configuration/CORS/persistence variants, C#/TypeScript
deployment variants, migration anchors, both image catalogs, and
`/reference/samples/standalone-dashboard/`. Final Japanese and sample
clipboard checks passed. The owned browser/scratch artifacts and preview
server were cleaned up; port 4389 has no listener.
- `docker manifest inspect mcr.microsoft.com/aspire/dashboard:latest`,
`docker manifest inspect
mcr.microsoft.com/aspire/nightly/dashboard:latest`, and `docker manifest
inspect mcr.microsoft.com/aspire/nightly/dashboard:13.6`: **passed**,
each advertises Linux AMD64 and ARM64. Exact registry manifests were
**HTTP 200** with the digests above.
- Container execution/login/OTLP/persistence runtime checks were
**blocked by the unavailable local Docker Desktop Linux engine**, not
claimed as passed. Four copied Compose examples also exposed
pre-existing `environment must be a mapping` schema failures; a byte
comparison verified their unchanged content against canonical main apart
from dashboard image references. Those unrelated baseline defects were
not altered.
- No full local build was run. Current-head
[CI](https://github.com/microsoft/aspire.dev/actions/runs/38249739333)
has passed frontend Build, frontend lint/unit validation, release-sync,
and change detection;
[CodeQL](https://github.com/microsoft/aspire.dev/actions/runs/38249739086),
forbidden words, and CLA are green. E2E/downstream gates must finish
before merge. Previous-head checks are not reused.

---------

Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <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-integrations Issues pertaining to Aspire Integrations packages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants