Repository navigation
Migrate dashboard consumers to canonical Aspire images - #20177
David Pine (IEvangelist) merged 2 commits into
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 20177Or
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 20177" |
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
🟡 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.
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
a0382bf to
3cb4c31
Compare
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>
Tests selector7 / 98 PR test projects · 3 PR jobs, from 31 changed files. Selected PR test projects (7 / 98)
Selected PR jobs (3)
How these were chosen — grouped by what changed🔧 📦 affected project 📄 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 🧪 Job reasons
Selection computed for commit |
Mitch Denny (mitchdenny)
left a comment
There was a problem hiding this comment.
Approved for merge once the canonical Aspire Dashboard images referenced by this PR are published and verified as pullable.
James Newton-King (JamesNK)
left a comment
There was a problem hiding this comment.
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.
## 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>


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 usesmcr.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:
mcr.microsoft.com/aspire/nightly/dashboard:13.6sha256:03a6f96028282634e3e957fb0b146e83fcc88e98f34aa3d689a38cd8ac31e5e7mcr.microsoft.com/aspire/nightly/dashboard:latestsha256:03a6f96028282634e3e957fb0b146e83fcc88e98f34aa3d689a38cd8ac31e5e7mcr.microsoft.com/aspire/dashboard:latestsha256:613f297a274958abd85e7b71664f51fb42b0ddeb697ebd4c159677774433345bRelated to #20068; this PR does not close it. Current development assemblies are version 17.0 and retain the existing
AspireDashboardImageTag=13.6build-time override. Canonical14.0and17.0tags 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 historicallatestfallback 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-dashboardordotnet/nightly/aspire-dashboardimage references remain. Otheraspire-dashboardoccurrences 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
mainwas 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:
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
latestfallback.git diff --check upstream/main...HEADpassed.SDK bootstrap/restore:
.\restore.cmd /p:SkipNativeBuild=true— passed. The source test commands below were run withMSBUILDTERMINALLOGGER=falseandDiffEngine_Disabled=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.6override 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 tomcr.microsoft.com/aspire/nightly/dashboard:17.0, not the legacy syndicated repository. Do not undo the product version bump or switch generated deployments tolatest.Coordinated consumer PRs: microsoft/aspire.dev#1679 and microsoft/aspire-samples#1952.
Checklist
<remarks />and<code />elements on your triple slash comments?