Communitygithub.com

microsoft/aspire.dev

Extrai todas as referências de imagens de contêiner (registry, imagem, tag) do código-fonte do microsoft/aspire e gera um arquivo JSON para o site Astro aspire.dev. USE PARA: atualizar JSON de imagens de contêiner, atualizar dados de imagens, listar todas as imagens Aspire, sincronizar versões de tags, gerar container-images.json. NÃO USE PARA: atualizar as versões de imagens no próprio código-fonte do Aspire (isto é uma alteração no repositório do produto), dados de pacotes NuGet (use a skill de integrações) ou imagens baseadas em Dockerfile para contêineres de desenvolvimento. INVOCA: bash, leitura/escrita de arquivos. PARA OPERAÇÕES ÚNICAS: Use grep/find para verificar rapidamente uma única tag de imagem.

O que é aspire.dev?

Esta skill extrai automaticamente todas as referências de imagens de contêiner do repositório de produto `microsoft/aspire` e as transforma em um arquivo JSON estruturado, consumido pelo site Astro aspire.dev. Ela escaneia arquivos `*ContainerImageTags.cs` no diretório `src/`, analisa campos como Registry, Image e Tag (incluindo imagens companheiras e tags alternativas), e gera o arquivo `src/frontend/src/data/container-images.json`. É útil para desenvolvedores que precisam manter um catálogo atualizado de imagens de contêiner usadas pelas integrações de hospedagem do Aspire, sem modificar o código-fonte do produto. Suporta os repositórios `microsoft/aspire` e `microsoft/aspire.dev`, e é invocada via comandos bash e operações de leitura/escrita de arquivos.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/microsoft/aspire.dev/tree/HEAD/.agents/skills/container-images

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Skill de Imagens de Contêiner

Esta skill extrai todas as referências de imagens de contêiner do repositório de produto microsoft/aspire e escreve um arquivo JSON estruturado em microsoft/aspire.dev no seguinte caminho:

src/frontend/src/data/container-images.json

Este JSON é consumido por componentes Astro no site aspire.dev para renderizar um catálogo navegável de todas as imagens de contêiner usadas pelas integrações de hospedagem do Aspire.


Padrão do código-fonte

Todos os metadados de imagens de contêiner no microsoft/aspire residem em classes estáticas chamadas *ContainerImageTags (ou *ContainerImageTags.cs). Cada arquivo segue um padrão estrito e consistente:

internal static class <Nome>ContainerImageTags
{
    public const string Registry = "<host-do-registry>";
    public const string Image = "<caminho-da-imagem>";
    public const string Tag = "<tag>";

    // Alguns arquivos têm imagens companheiras adicionais, por exemplo:
    public const string <Companion>Registry = "<host-do-registry>";
    public const string <Companion>Image = "<caminho-da-imagem>";
    public const string <Companion>Tag = "<tag>";
}

Onde encontrá-los

Todos os arquivos que correspondem ao padrão glob:

src/**/ContainerImageTags.cs
src/**/*ContainerImageTags.cs

Estes estão espalhados por muitos projetos, incluindo (mas não limitado a):

ProjetoArquivo
Aspire.Hosting.RedisRedisContainerImageTags.cs
Aspire.Hosting.PostgreSQLPostgresContainerImageTags.cs
Aspire.Hosting.SqlServerSqlServerContainerImageTags.cs
Aspire.Hosting.MongoDBMongoDBContainerImageTags.cs
Aspire.Hosting.MySqlMySqlContainerImageTags.cs
Aspire.Hosting.KafkaKafkaContainerImageTags.cs
Aspire.Hosting.RabbitMQRabbitMQContainerImageTags.cs
Aspire.Hosting.NatsNatsContainerImageTags.cs
Aspire.Hosting.GarnetGarnetContainerImageTags.cs
Aspire.Hosting.ValkeyValkeyContainerImageTags.cs
Aspire.Hosting.SeqSeqContainerImageTags.cs
Aspire.Hosting.QdrantQdrantContainerImageTags.cs
Aspire.Hosting.KeycloakKeycloakContainerImageTags.cs
Aspire.Hosting.OracleOracleContainerImageTags.cs
Aspire.Hosting.MilvusMilvusContainerImageTags.cs
Aspire.Hosting.ElasticsearchElasticsearchContainerImageTags.cs
Aspire.Hosting.YarpYarpContainerImageTags.cs
Aspire.Hosting.Azure.StorageStorageEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.CosmosDBCosmosDBEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.ServiceBusServiceBusEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.EventHubsEventHubsEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.SignalRSignalREmulatorContainerImageTags.cs
Aspire.Hosting.Azure.AppConfigurationAppConfigurationEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.FunctionsDurableTaskSchedulerEmulatorContainerImageTags.cs
Aspire.Hosting.Azure.KustoAzureKustoEmulatorContainerImageTags.cs

Importante: Novos pacotes de hospedagem podem ser adicionados a qualquer momento. Sempre descubra arquivos dinamicamente — nunca confie em uma lista fixa.


Procedimento de extração

Etapa 1 — Clonar ou acessar o repositório aspire no HEAD

# Se estiver trabalhando localmente:
git clone --depth 1 https://github.com/microsoft/aspire.git /tmp/aspire

Etapa 2 — Encontrar todos os arquivos ContainerImageTags

find /tmp/aspire/src -name '*ContainerImageTags.cs' -type f

Etapa 3 — Analisar cada arquivo

Para cada arquivo, extraia todos os grupos de imagens. Um único arquivo pode definir múltiplas imagens (principal + companheiras). As regras de análise são:

  1. Imagem principal: Campos exatamente chamados Registry, Image, Tag.
  2. Imagens companheiras: Campos com um prefixo, por exemplo, PgAdminRegistry, PgAdminImage, PgAdminTag — agrupe-os pelo prefixo compartilhado.
  3. Tags alternativas: Campos como TagVNextPreview, ManagementTag — inclua-os como variantes de tag adicionais na mesma imagem.
  4. Propriedades estáticas vs campos const: A maioria usa public const string, mas alguns (ex.: Kusto) usam public static string { get; }. Lide com ambos.
  5. Tags computadas: Algumas tags são computadas, por exemplo, public const string ManagementTag = $"{Tag}-management"; — resolva-as para seu valor literal.
  6. Derive o aspirePackage a partir do nome do diretório do projeto (ex.: src/Aspire.Hosting.Redis/ → Aspire.Hosting.Redis).
  7. Derive o sourceFile como o caminho relativo à raiz do repositório.

Etapa 4 — Construir o JSON

Cada entrada no array de saída representa uma imagem de contêiner distinta:

[
  {
    "aspirePackage": "Aspire.Hosting.Redis",
    "name": "Redis",
    "registry": "docker.io",
    "image": "library/redis",
    "tag": "8.6",
    "fullImage": "docker.io/library/redis:8.6",
    "sourceFile": "src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
    "sourceUrl": "https://github.com/microsoft/aspire/blob/main/src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
    "isCompanion": false,
    "companionOf": null,
    "alternateTags": []
  },
  {
    "aspirePackage": "Aspire.Hosting.Redis",
    "name": "Redis Commander",
    "registry": "docker.io",
    "image": "rediscommander/redis-commander",
    "tag": "latest",
    "fullImage": "docker.io/rediscommander/redis-commander:latest",
    "sourceFile": "src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
    "sourceUrl": "https://github.com/microsoft/aspire/blob/main/src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
    "isCompanion": true,
    "companionOf": "Redis",
    "alternateTags": []
  },
  {
    "aspirePackage": "Aspire.Hosting.Azure.CosmosDB",
    "name": "Emulador CosmosDB",
    "registry": "mcr.microsoft.com",
    "image": "cosmosdb/linux/azure-cosmos-emulator",
    "tag": "stable",
    "fullImage": "mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:stable",
    "sourceFile": "src/Aspire.Hosting.Azure.CosmosDB/CosmosDBEmulatorContainerImageTags.cs",
    "sourceUrl": "https://github.com/microsoft/aspire/blob/main/src/Aspire.Hosting.Azure.CosmosDB/CosmosDBEmulatorContainerImageTags.cs",
    "isCompanion": false,
    "companionOf": null,
    "alternateTags": ["vnext-preview"]
  }
]

Definições dos campos

CampoTipoDescrição
aspirePackagestringO nome do pacote NuGet / projeto (nome do diretório sob src/)
namestringNome amigável. Para imagens principais, derive do nome da classe (remova o sufixo ContainerImageTags / EmulatorContainerImageTags, divida PascalCase). Para imagens companheiras, derive do prefixo/tipo companheiro (ex.: PgAdmin*, RedisCommander*) em vez de apenas do nome da classe.
registrystringHost do registry de contêiner (ex.: docker.io, mcr.microsoft.com, ghcr.io, quay.io, container-registry.oracle.com)
imagestringCaminho da imagem dentro do registry
tagstringTag principal
fullImagestringReferência de imagem totalmente qualificada: {registry}/{image}:{tag}
sourceFilestringCaminho relativo ao arquivo fonte no microsoft/aspire
sourceUrlstringLink permanente do GitHub para o arquivo fonte na branch main
isCompanionbooleantrue se esta for uma imagem companheira/ferramenta (ex.: pgAdmin, Kafka UI, phpMyAdmin)
companionOfstring?Nome da imagem principal que esta acompanha, ou null
alternateTagsstring[]Quaisquer constantes de tag adicionais definidas para esta imagem (ex.: vnext-preview, management)

Etapa 5 — Ordenar e escrever

Ordene o array por aspirePackage (ascendente), depois por isCompanion (principais primeiro), depois por name (ascendente).

Escreva em: src/frontend/src/data/container-images.json


Lista de verificação de validação

Após gerar o arquivo, verifique:

  • Cada arquivo *ContainerImageTags.cs em src/ está representado
  • Nenhuma entrada duplicada (mesmo registry + image + tag + aspirePackage)
  • Todos os valores fullImage estão bem formados (registry/image:tag)
  • Imagens companheiras estão corretamente vinculadas à sua principal
  • O JSON é válido e formatado corretamente (indentação de 2 espaços)
  • O arquivo está ordenado conforme as regras acima

Consumindo os dados no Astro

O arquivo JSON em src/frontend/src/data/container-images.json pode ser importado diretamente em componentes Astro:

import containerImages from '../data/container-images.json';

Isso segue o mesmo padrão de arquivos de dados existentes, como aspire-integrations.json, samples.json e github-stats.json no mesmo diretório.

Vinculando a conteúdo relacionado

Cada entrada de imagem de contêiner pode ser referenciada cruzadamente com:

  • A documentação de integração em src/frontend/src/data/integration-docs.json (correspondência por aspirePackage)
  • As integrações NuGet em src/frontend/src/data/aspire-integrations.json (correspondência por title ≈ aspirePackage)
  • O arquivo fonte com link de volta para microsoft/aspire para contribuidores

Regras importantes

  • Sempre descubra arquivos dinamicamente — novos pacotes de hospedagem são adicionados com frequência.
  • Analise tanto padrões de const quanto de propriedades static — ambos existem no codebase.
  • Resolva interpolação de strings em valores de tag computados (ex.: $"""{Tag}-management""").
  • Não inclua imagens de devcontainer, imagens apenas de teste ou imagens do diretório playground/.
  • Extraia apenas do diretório src/ arquivos que correspondam a *ContainerImageTags.cs.
  • O repositório aspire.dev é um site Astro — o arquivo de dados fica ao lado de outros dados JSON consumidos por componentes.

Habilidades Relacionadas