Rename Aspire Dashboard image to aspire/dashboard family#7218
Conversation
Publish the .NET Aspire Dashboard image under a dedicated 'aspire' product family (mcr.microsoft.com/aspire/dashboard, nightly: aspire/nightly/dashboard) instead of dotnet/aspire-dashboard. Hard cutover with no syndication alias. Internal identifiers (manifest id, src/aspire-dashboard paths, template dirs, version variables, README filenames, test categories) are intentionally kept as aspire-dashboard; only the published name and user-facing docs change. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Under the hard cutover to the aspire/ product family there is no microsoft/aspire-dashboard Docker Hub repo, so stop generating the Docker Hub portal README for the family and avoid emitting dead hub.docker.com links to it. - manifest.json: remove the .portal-docs/docker-hub README entry for the aspire repo (keep GitHub + MAR portal READMEs). - Get-GeneratedReadmes.ps1: stop copying the aspire docker-hub README. - Url.md: for the aspire family, emit the MAR artifact link instead of a hub.docker.com link when rendering for the dockerhub host, so other repos' Related Repositories lists point to MAR. - Remove the generated .portal-docs/docker-hub/README.aspire-dashboard.md and regenerate all docker-hub READMEs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the broad substring checks (find/match of REPO containing "aspire"), introduced when renaming the published name to the aspire/ family, with an exact first-path-segment check in the README templates. This precisely identifies the new top-level aspire/ product family and avoids false-positives on any future repo whose path merely contains the substring "aspire". Behavioral no-op for the current repo set (regenerated READMEs are unchanged). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
| * [dotnet/nightly/runtime-deps](https://github.com/dotnet/dotnet-docker/blob/nightly/README.runtime-deps.md): .NET Runtime Dependencies (Preview) | ||
| * [dotnet/nightly/monitor](https://github.com/dotnet/dotnet-docker/blob/nightly/README.monitor.md): .NET Monitor Tool (Preview) | ||
| * [dotnet/nightly/aspire-dashboard](https://github.com/dotnet/dotnet-docker/blob/nightly/README.aspire-dashboard.md): Aspire Dashboard (Preview) | ||
| * [aspire/nightly/dashboard](https://github.com/dotnet/dotnet-docker/blob/nightly/README.aspire-dashboard.md): Aspire Dashboard (Preview) |
There was a problem hiding this comment.
General question: If it's not a dotnet/* repo anymore, should we remove it from the related repos lists for the dotnet/* images?
Another way of thinking about it - If the dashboard image wasn't built out of this repo, I don't think we'd go out of our way to add it to these lists.
cc @mthalman
There was a problem hiding this comment.
This is a fair question. Is your recommendation to drop it from productRepos in eng/readme-templates/ReposProvider.md? I may be wrong but it looks like that would remove it from every other repo's list.
There was a problem hiding this comment.
Yes, that is what I was suggesting.
You could go farther if you want, and eject the aspire readme template from the default readme template entirely if that makes it easier to maintain. Most of the templating code is only needed to keep all the dotnet/* repos all looking the same.
The headers/sections that we use are what's recommended by MAR - Featured Tags, About, Usage, Related Repositories, etc.
| { | ||
| "productVersion": "$(aspire-dashboard|product-version)", | ||
| "sharedTags": { | ||
| "$(aspire-dashboard|fixed-tag)": {}, |
There was a problem hiding this comment.
Tags are missing syndication to the old dotnet/aspire-dashboard repo:
| "$(aspire-dashboard|fixed-tag)": { | |
| "syndication": { | |
| "repo": "dotnet/aspire-dashboard" | |
| } | |
| }, |
There was a problem hiding this comment.
I think for this, after talking with the team (@davidfowl ) we think the right move is to do a hard cutover instead.
There was a problem hiding this comment.
@joperezr just to make sure you understand the implications here: users of the images will no longer receive any security updates:
mcr.microsoft.com/dotnet/aspire-dashboard:latestmcr.microsoft.com/dotnet/aspire-dashboard:13mcr.microsoft.com/dotnet/nightly/aspire-dashboard:latestmcr.microsoft.com/dotnet/nightly/aspire-dashboard:13
For the record, syndication is essentially free by adding the json here. The old repos/image names don't have to be discoverable on MAR or advertised to users. I highly recommend syndicating images to the old repos until the next Aspire major version. I believe it is the right thing to do from a security/UX perspective.
What is your reasoning for not supporting the old repos for the remainder of Aspire 13?
Addresses PR review feedback: the "Microsoft Support for .NET" link in the Lifecycle section isn't the right pointer for the Aspire Dashboard repo. Swap it for an Aspire-specific support link (https://aspire.dev/support/) for the aspire family only, reusing the existing isAspireDashboard flag. Other repos are unchanged. Container Platforms Policy and Supported Tags Policy links stay (they describe dotnet-docker repo policy that still applies to aspire images). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The original ".NET/nightly LKG builds" wording is incoherent for the aspire/nightly/dashboard image: that image typically uses a stable .NET base and ships a pre-release Aspire Dashboard, and it isn't signed. Add an aspire-family branch in Announcement.md that uses wording agreed with the reviewer on PR #7218: > **Important**: The aspire/nightly/dashboard image is a preview > build of the Aspire Dashboard and is not signed. See aspire/dashboard > for stable releases. The dotnet-family announcement (and the dotnet product-family README.md page) is unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Summary
Renames the .NET Aspire Dashboard container image to a dedicated
aspireproduct family:mcr.microsoft.com/dotnet/aspire-dashboard→mcr.microsoft.com/aspire/dashboarddotnet/nightly/aspire-dashboard→aspire/nightly/dashboardThis is a hard cutover — no syndication/back-compat alias to the old repo. Tag scheme is unchanged (
13.x.y,13.x,13,latest).All internal identifiers are intentionally kept as
aspire-dashboard: manifestid, on-disksrc/aspire-dashboard/paths, template dirs (eng/dockerfile-templates/aspire-dashboard/,eng/mcr-tags-metadata-templates/aspire-dashboard-tags.yml),$(aspire-dashboard|...)version variables,README.aspire-dashboard.mdfilenames, and test categories/traits. Only the publishednameand user-facing docs change.Changes
manifest.json: reponame→aspire/nightly/dashboard(idunchanged).ImageData.GetRepoNamereconstructs the new published name for the aspire repo;StaticTagTestsappliance matcher updated.aspire/family parses (via ImageBuilder) toSHORT_REPO=dashboard/PARENT_REPO=nightly, so template special-cases map it back toaspire-dashboardfor readme-filename/qualifier derivation; the/nightlyinsertion andAnnouncement.mdfamily wording were generalized.documentation/image-signatures.md: registry-scope example updated tomcr.microsoft.com/aspire/dashboard.Validation
aspire/dashboardacross generated docs, and the dotnet product-familyREADME.mdis un-regressedaspire/nightly/dashboard; aspire image tests 7 passed, 0 faileddotnet/aspire-dashboardis the BAR version-source-name ineng/Set-DotnetVersions.ps1(build identity, not the MCR repo — correctly left unchanged)Related work