Skip to content

Add resource icons to all hosting integration packages - #18954

Merged
James Newton-King (JamesNK) merged 4 commits into
microsoft:mainfrom
afscrome:afscrome-resource-icon-audit
Aug 6, 2026
Merged

James Newton-King (JamesNK) merged 4 commits into
microsoft:mainfrom
afscrome:afscrome-resource-icon-audit

Conversation

@afscrome

@afscrome Alex Crome (afscrome) commented Aug 1, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Adds explicit resource icons to all Aspire hosting integration packages that didn't have them. Without these icons, resources fall back to generic type-based heuristics in the dashboard (container → box, project → code, etc.), which loses semantic meaning. With explicit icons, users can immediately tell at a glance what kind of resource they're looking at in the Aspire dashboard — whether it's a database, message broker, AI model, or cloud service.

Icons are set via .WithIconName("IconName") which attaches a ResourceIconAnnotation to the resource builder. The dashboard resolves them from the FluentUI Filled icon set.

This should fix most of #11602

Resource → Icon mapping

Resource Type Package Icon Name Icon
RedisResource Aspire.Hosting.Redis Database
RedisCommanderResource Aspire.Hosting.Redis WindowDatabase
RedisInsightResource Aspire.Hosting.Redis WindowDatabase
GarnetResource Aspire.Hosting.Garnet Database
ValkeyResource Aspire.Hosting.Valkey Database
AzureRedisCacheResource Aspire.Hosting.Azure.Redis Database
AzureManagedRedisResource Aspire.Hosting.Azure.Redis Database
MongoDBServerResource Aspire.Hosting.MongoDB DatabaseMultiple
MongoDBDatabaseResource Aspire.Hosting.MongoDB Database
MongoExpressContainerResource Aspire.Hosting.MongoDB WindowDatabase
PostgresDatabaseResource Aspire.Hosting.PostgreSQL Database
PgAdminContainerResource Aspire.Hosting.PostgreSQL WindowDatabase
PgWebContainerResource Aspire.Hosting.PostgreSQL WindowDatabase
MySqlDatabaseResource Aspire.Hosting.MySql Database
SqlServerDatabaseResource Aspire.Hosting.SqlServer Database
OracleDatabaseResource Aspire.Hosting.Oracle Database
MilvusServerResource Aspire.Hosting.Milvus DatabaseMultiple
MilvusDatabaseResource Aspire.Hosting.Milvus Database
AttuResource Aspire.Hosting.Milvus WindowDatabase
QdrantServerResource Aspire.Hosting.Qdrant DatabaseSearch
KafkaServerResource Aspire.Hosting.Kafka MailMultiple
KafkaUIContainerResource Aspire.Hosting.Kafka WindowDatabase
RabbitMQServerResource Aspire.Hosting.RabbitMQ MailMultiple
NatsServerResource Aspire.Hosting.Nats MailMultiple
SeqResource Aspire.Hosting.Seq ClipboardPulse
KeycloakResource Aspire.Hosting.Keycloak PersonLock
YarpResource Aspire.Hosting.Yarp GlobeArrowForward
OpenAIResource Aspire.Hosting.OpenAI BrainCircuit
OpenAIModelResource Aspire.Hosting.OpenAI BrainCircuit
GitHubModelResource Aspire.Hosting.GitHub.Models BrainCircuit
DotnetProjectResource Aspire.Hosting.Dotnet CodeCsRectangle
GoAppResource Aspire.Hosting.Go Code
MAUI Android/iOS device resources Aspire.Hosting.Maui PhoneLaptop
DockerComposeEnvironmentResource Aspire.Hosting.Docker BoxMultiple
KubernetesEnvironmentResource Aspire.Hosting.Kubernetes ServerMultiple
KubernetesHelmChartResource Aspire.Hosting.Kubernetes Archive
KubernetesGatewayResource Aspire.Hosting.Kubernetes GlobeArrowForward
KubernetesIngressResource Aspire.Hosting.Kubernetes GlobeArrowForward
CertManagerResource Aspire.Hosting.Kubernetes Certificate
CertManagerIssuerResource Aspire.Hosting.Kubernetes ContactCard
AzureCosmosDBResource Aspire.Hosting.Azure.CosmosDB DatabaseMultiple
AzureCosmosDBDatabaseResource Aspire.Hosting.Azure.CosmosDB Database
AzureCosmosDBContainerResource Aspire.Hosting.Azure.CosmosDB Box
AzureKustoClusterResource Aspire.Hosting.Azure.Kusto DatabaseMultiple
AzureKustoReadWriteDatabaseResource Aspire.Hosting.Azure.Kusto Database
AzureEventHubsResource Aspire.Hosting.Azure.EventHubs MailMultiple
AzureEventHubResource Aspire.Hosting.Azure.EventHubs Mail
AzureEventHubConsumerGroupResource Aspire.Hosting.Azure.EventHubs Mail
AzureServiceBusResource Aspire.Hosting.Azure.ServiceBus MailMultiple
AzureServiceBusQueueResource Aspire.Hosting.Azure.ServiceBus Mail
AzureServiceBusTopicResource Aspire.Hosting.Azure.ServiceBus Mail
AzureServiceBusSubscriptionResource Aspire.Hosting.Azure.ServiceBus Mail
AzureStorageResource Aspire.Hosting.Azure.Storage HardDrive
AzureBlobStorageResource Aspire.Hosting.Azure.Storage DocumentMultiple
AzureBlobStorageContainerResource Aspire.Hosting.Azure.Storage FolderOpen
AzureDataLakeStorageResource Aspire.Hosting.Azure.Storage HardDrive
AzureDataLakeStorageFileSystemResource Aspire.Hosting.Azure.Storage FolderOpen
AzureTableStorageResource Aspire.Hosting.Azure.Storage TableSimple
AzureQueueStorageResource Aspire.Hosting.Azure.Storage Mail
AzureQueueStorageQueueResource Aspire.Hosting.Azure.Storage Mail
AzureKeyVaultResource Aspire.Hosting.Azure.KeyVault Vault
AzureKeyVaultSecretResource Aspire.Hosting.Azure.KeyVault LockClosed
AzureSearchResource Aspire.Hosting.Azure.Search Search
AzureAppConfigurationResource Aspire.Hosting.Azure.AppConfiguration Settings
AzureFunctionsProjectResource Aspire.Hosting.Azure.Functions Flash
DurableTaskSchedulerResource Aspire.Hosting.Azure.Functions CalendarClock
DurableTaskHubResource Aspire.Hosting.Azure.Functions CalendarClock
AzureOpenAIResource Aspire.Hosting.Azure.CognitiveServices BrainCircuit
AzureOpenAIDeploymentResource Aspire.Hosting.Azure.CognitiveServices BrainCircuit
AzureApplicationInsightsResource Aspire.Hosting.Azure.ApplicationInsights ChartMultiple
AzureLogAnalyticsWorkspaceResource Aspire.Hosting.Azure.OperationalInsights ChartMultiple
AzureContainerRegistryResource Aspire.Hosting.Azure.ContainerRegistry Archive
AzureVirtualNetworkResource Aspire.Hosting.Azure.Network Router
AzureNetworkSecurityGroupResource Aspire.Hosting.Azure.Network ShieldLock
AzureKubernetesEnvironmentResource Aspire.Hosting.Azure.Kubernetes ServerMultiple
AzureAppServiceEnvironmentResource Aspire.Hosting.Azure.AppService Globe
AzureFrontDoorResource Aspire.Hosting.Azure.FrontDoor GlobeArrowForward
AzureSignalRResource Aspire.Hosting.Azure.SignalR MailMultiple
AzureWebPubSubResource Aspire.Hosting.Azure.WebPubSub MailMultiple

Icon semantics

Icon Database DatabaseMultiple DatabaseSearch WindowDatabase MailMultiple Mail BrainCircuit
Meaning Single DB / cache DB server / cluster Vector search DB DB admin UI Message broker Queue / topic / hub AI / ML model

Fixes # (issue)

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

@github-actions

github-actions Bot commented Aug 1, 2026

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 -- 18954

Or

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

@github-actions github-actions Bot added the area-integrations Issues pertaining to Aspire Integrations packages label Aug 1, 2026

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

Adds semantic Fluent UI icons across Aspire hosting integrations so dashboard resources no longer rely on generic type-based icons.

Changes:

  • Adds default icons to database, messaging, cloud, AI, and application resources.
  • Adds distinct icons for child resources and administration tools.
  • Updates MAUI mobile resources to use PhoneLaptop.

Reviewed changes

Copilot reviewed 51 out of 51 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/Aspire.Hosting.Yarp/YarpResourceExtensions.cs Adds a proxy icon.
src/Aspire.Hosting.Valkey/ValkeyBuilderExtensions.cs Adds a database icon.
src/Aspire.Hosting.SqlServer/SqlServerBuilderExtensions.cs Adds a database child icon.
src/Aspire.Hosting.Seq/SeqBuilderExtensions.cs Adds an observability icon.
src/Aspire.Hosting.Redis/RedisBuilderExtensions.cs Adds Redis and admin UI icons.
src/Aspire.Hosting.RabbitMQ/RabbitMQBuilderExtensions.cs Adds a broker icon.
src/Aspire.Hosting.Qdrant/QdrantBuilderExtensions.cs Adds a vector-search icon.
src/Aspire.Hosting.PostgreSQL/PostgresBuilderExtensions.cs Adds database and admin UI icons.
src/Aspire.Hosting.Oracle/OracleDatabaseBuilderExtensions.cs Adds a database child icon.
src/Aspire.Hosting.OpenAI/OpenAIExtensions.cs Adds AI resource icons.
src/Aspire.Hosting.Nats/NatsBuilderExtensions.cs Adds a broker icon.
src/Aspire.Hosting.MySql/MySqlBuilderExtensions.cs Adds a database child icon.
src/Aspire.Hosting.MongoDB/MongoDBBuilderExtensions.cs Adds server, database, and UI icons.
src/Aspire.Hosting.Milvus/MilvusBuilderExtensions.cs Adds server, database, and UI icons.
src/Aspire.Hosting.Maui/MauiiOSExtensions.cs Updates iOS resource icons.
src/Aspire.Hosting.Maui/MauiAndroidExtensions.cs Updates Android resource icons.
src/Aspire.Hosting.Kubernetes/KubernetesIngressExtensions.cs Adds an ingress icon.
src/Aspire.Hosting.Kubernetes/KubernetesHelmChartExtensions.cs Adds a Helm chart icon.
src/Aspire.Hosting.Kubernetes/KubernetesGatewayExtensions.cs Adds a gateway icon.
src/Aspire.Hosting.Kubernetes/KubernetesEnvironmentExtensions.cs Adds an environment icon.
src/Aspire.Hosting.Kubernetes/CertManagerExtensions.cs Adds certificate resource icons.
src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs Adds an identity icon.
src/Aspire.Hosting.Kafka/KafkaBuilderExtensions.cs Adds broker and UI icons.
src/Aspire.Hosting.Go/GoHostingExtensions.cs Adds a code icon.
src/Aspire.Hosting.GitHub.Models/GitHubModelsExtensions.cs Adds an AI model icon.
src/Aspire.Hosting.Garnet/GarnetBuilderExtensions.cs Adds a database icon.
src/Aspire.Hosting.Dotnet/DotnetProjectHostingExtensions.cs Adds a C# project icon.
src/Aspire.Hosting.Docker/DockerComposeEnvironmentExtensions.cs Adds a Compose environment icon.
src/Aspire.Hosting.Azure.WebPubSub/AzureWebPubSubExtensions.cs Adds a messaging icon.
src/Aspire.Hosting.Azure.Storage/AzureStorageExtensions.cs Adds storage service and child icons.
src/Aspire.Hosting.Azure.SignalR/AzureSignalRExtensions.cs Adds a messaging icon.
src/Aspire.Hosting.Azure.ServiceBus/AzureServiceBusExtensions.cs Adds namespace and entity icons.
src/Aspire.Hosting.Azure.Search/AzureSearchExtensions.cs Adds a search icon.
src/Aspire.Hosting.Azure.Redis/AzureRedisExtensions.cs Adds a database icon.
src/Aspire.Hosting.Azure.Redis/AzureManagedRedisExtensions.cs Adds a database icon.
src/Aspire.Hosting.Azure.OperationalInsights/AzureLogAnalyticsWorkspaceExtensions.cs Adds an analytics icon.
src/Aspire.Hosting.Azure.Network/AzureVirtualNetworkExtensions.cs Adds a network icon.
src/Aspire.Hosting.Azure.Network/AzureNetworkSecurityGroupExtensions.cs Adds a security icon.
src/Aspire.Hosting.Azure.Kusto/AzureKustoBuilderExtensions.cs Adds cluster and database icons.
src/Aspire.Hosting.Azure.Kubernetes/AzureKubernetesEnvironmentExtensions.cs Adds an AKS environment icon.
src/Aspire.Hosting.Azure.KeyVault/AzureKeyVaultResourceExtensions.cs Adds vault and secret icons.
src/Aspire.Hosting.Azure.Functions/DurableTask/DurableTaskResourceExtensions.cs Adds scheduler and hub icons.
src/Aspire.Hosting.Azure.Functions/AzureFunctionsProjectResourceExtensions.cs Adds a Functions icon.
src/Aspire.Hosting.Azure.FrontDoor/AzureFrontDoorExtensions.cs Adds a routing icon.
src/Aspire.Hosting.Azure.EventHubs/AzureEventHubsExtensions.cs Adds namespace and entity icons.
src/Aspire.Hosting.Azure.CosmosDB/AzureCosmosDBExtensions.cs Adds account, database, and container icons.
src/Aspire.Hosting.Azure.ContainerRegistry/AzureContainerRegistryExtensions.cs Adds a registry icon.
src/Aspire.Hosting.Azure.CognitiveServices/AzureOpenAIExtensions.cs Adds Azure OpenAI icons.
src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs Adds an App Service environment icon.
src/Aspire.Hosting.Azure.ApplicationInsights/AzureApplicationInsightsExtensions.cs Adds an analytics icon.
src/Aspire.Hosting.Azure.AppConfiguration/AzureAppConfigurationExtensions.cs Adds a configuration icon.

Comment thread src/Aspire.Hosting.Yarp/YarpResourceExtensions.cs
Comment thread src/Aspire.Hosting.Azure.Storage/AzureStorageExtensions.cs
Copilot AI review requested due to automatic review settings August 1, 2026 14:29

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

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

Suppressed comments (1)

src/Aspire.Hosting.Azure.Storage/AzureStorageExtensions.cs:840

  • The Mail icon is only attached to the queue-service resource here. AddQueue still registers AzureQueueStorageQueueResource without WithIconName at lines 655–661, so that child resource continues to use the generic fallback despite the PR's mapping explicitly listing it. Add .WithIconName("Mail") to the child builder returned by AddQueue.
            .WithIconName("Mail")

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

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

Suppressed comments (1)

src/Aspire.Hosting.Redis/RedisBuilderExtensions.cs:99

  • The new icon mappings are string literals, but the PR does not add coverage that verifies these names resolve through IconResolver or that the affected resources receive the intended ResourceIconAnnotation. An invalid or renamed FluentUI name silently falls back to the generic resource icon, so this feature can regress without CI failing. Please add parameterized coverage for all newly introduced icon names and representative integration assertions for the attached annotations.

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.

Found 5 resource-icon coverage omissions and 1 missing regression-coverage issue. The core WithIconName replacement behavior itself is covered and passes its focused tests.

Comment thread tests/Aspire.Hosting.Tests/WithIconNameTests.cs
Comment thread src/Aspire.Hosting.Kubernetes/KubernetesEnvironmentExtensions.cs
Comment thread src/Aspire.Hosting.Azure.Network/AzureVirtualNetworkExtensions.cs

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

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

@github-actions

github-actions Bot commented Aug 4, 2026

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.

Alex Crome (afscrome) and others added 4 commits August 6, 2026 23:08
Add WithIconName() calls to ~50 resource builder extension files covering
databases, message brokers, AI/ML, cloud services, DevOps, and more.

Icon mapping summary:
- Database servers: DatabaseMultiple
- Child databases: Database
- DB admin UIs: WindowDatabase
- Message brokers (Kafka/RabbitMQ/NATS/EventHubs/ServiceBus): MailMultiple
- Individual messages/queues/topics: Mail
- Search databases (Qdrant): DatabaseSearch
- AI/ML resources: BrainCircuit
- Azure KeyVault: Vault / LockClosed (secrets)
- Azure Storage: HardDrive / DocumentMultiple / FolderOpen / TableSimple
- Azure AppInsights/Log Analytics: ChartMultiple
- Azure Functions: Flash / CalendarClock (durable)
- Azure Network: Router / ShieldLock
- Azure Search: Search
- Azure AppConfig: Settings
- Azure AKS: ServerMultiple
- Azure Container Registry: Archive
- Azure FrontDoor/YARP: GlobeArrowForward
- Azure App Service: Globe
- Kubernetes Helm: Archive
- Kubernetes Gateway: ArrowRouting
- Kubernetes Ingress: GlobeArrowForward
- CertManager: Certificate / ContactCard (issuers)
- Docker/Kubernetes environments: BoxMultiple / ServerMultiple
- Go apps: Code
- .NET project: CodeCsRectangle
- MAUI mobile: PhoneLaptop
- Seq: ClipboardPulse
- Keycloak: PersonLock
- SignalR/WebPubSub: MailMultiple

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

- Use ResourceAnnotationMutationBehavior.Replace in WithIconName so calling it
  twice replaces rather than appends, keeping annotations clean
- Update test to assert single annotation (not two) after double WithIconName call
- Add missing .WithIconName('Mail') to AddQueue for AzureQueueStorageQueueResource

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…, 3699290741, 3699290745, 3699290746)

- KubernetesNodePoolResource: ServerMultiple icon in AddNodePool
- AzureSubnetResource: Router icon in AddSubnetCore
- AzureKubernetesLoadBalancerResource: GlobeArrowForward icon in AddLoadBalancer
- AksNodePoolResource: Cpu icon in AddNodePool and auto-created pools
- AzureContainerRegistryResource: Archive icon in all factory methods

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 6, 2026 15:14

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

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

Suppressed comments (1)

src/Aspire.Hosting.Yarp/YarpResourceExtensions.cs:42

  • This user-visible default is introduced without coverage, as are the other new resource/icon mappings in this PR. Because these names are untyped strings and IconResolver silently falls back when one cannot be resolved, a typo, unsupported icon, or missed registration would leave the generic icon while all tests still pass. Add focused integration assertions for the resulting ResourceIconAnnotation values and a dashboard resolver theory covering every distinct new icon name.

@JamesNK
James Newton-King (JamesNK) merged commit 0c0d3bf into microsoft:main Aug 6, 2026
316 of 341 checks passed
@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 13.5 milestone Aug 6, 2026
@github-actions github-actions Bot locked and limited conversation to collaborators Sep 6, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-integrations Issues pertaining to Aspire Integrations packages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants