Communitygithub.com

microsoft/aspire.dev

Extrae todas las referencias de imágenes de contenedor (registro, imagen, etiqueta) del código fuente de microsoft/aspire y produce un archivo de datos JSON para el sitio Astro aspire.dev. ÚSALO PARA: actualizar JSON de imágenes de contenedor, refrescar datos de imágenes de contenedor, listar todas las imágenes de contenedor de Aspire, sincronizar versiones de imágenes de contenedor, generar container-images.json. NO USAR PARA: actualizar las versiones de imágenes de contenedor en el propio código fuente de Aspire (eso es un cambio del repositorio de producto), datos de paquetes NuGet (usa la skill de integraciones), o imágenes basadas en Dockerfile para contenedores de desarrollo. INVOCA: bash, lectura/escritura de archivos. PARA OPERACIONES INDIVIDUALES: Usa grep/find para verificar rápidamente una sola etiqueta de imagen.

¿Qué es aspire.dev?

Esta skill está diseñada para extraer automáticamente todas las referencias de imágenes de contenedor del repositorio de producto microsoft/aspire y generar un archivo JSON estructurado que se utiliza en el sitio Aspire.dev, construido con Astro. Es útil para desarrolladores y equipos de documentación que necesitan mantener actualizado el catálogo de imágenes de contenedor que utilizan las integraciones de hosting de Aspire, ya que evita la actualización manual y propensa a errores de estos datos. La skill se ejecuta en sistemas que soportan bash (Linux, macOS, WSL) y requiere permisos de lectura/escritura de archivos. Funciona clonando o accediendo al repositorio aspire, buscando dinámicamente archivos que coinciden con el patrón `*ContainerImageTags.cs` dentro del directorio `src/`, y analizando clases estáticas de C# para extraer metadatos como registro, imagen, etiqueta y variantes. Los resultados se escriben en el archivo `src/frontend/src/data/container-images.json` dentro del repositorio aspire.dev, y se validan con una lista de verificación para garantizar precisión y completitud.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Skill de Imágenes de Contenedor

Esta skill extrae todas las referencias de imágenes de contenedor del repositorio de producto microsoft/aspire y escribe un archivo JSON estructurado en microsoft/aspire.dev en:

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

Este JSON es consumido por componentes Astro en el sitio aspire.dev para mostrar un catálogo navegable de todas las imágenes de contenedor utilizadas por las integraciones de hosting de Aspire.


Patrón del código fuente

Todos los metadatos de imágenes de contenedor en microsoft/aspire residen en clases estáticas llamadas *ContainerImageTags (o *ContainerImageTags.cs). Cada archivo sigue un patrón estricto y consistente:

internal static class <Nombre>ContainerImageTags
{
    public const string Registry = "<host-del-registro>";
    public const string Image = "<ruta-de-la-imagen>";
    public const string Tag = "<etiqueta>";

    // Algunos archivos tienen imágenes complementarias adicionales, por ejemplo:
    public const string <Complemento>Registry = "<host-del-registro>";
    public const string <Complemento>Image = "<ruta-de-la-imagen>";
    public const string <Complemento>Tag = "<etiqueta>";
}

Dónde encontrarlos

Todos los archivos que coinciden con el patrón glob:

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

Estos se distribuyen en muchos proyectos, incluyendo (pero no limitado a):

ProyectoArchivo
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: Pueden agregarse nuevos paquetes de hosting en cualquier momento. Siempre descubre archivos dinámicamente — nunca confíes en una lista fija.


Procedimiento de extracción

Paso 1 — Clonar o acceder al repositorio aspire en HEAD

# Si trabajas localmente:
git clone --depth 1 https://github.com/microsoft/aspire.git /tmp/aspire

Paso 2 — Encontrar todos los archivos ContainerImageTags

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

Paso 3 — Analizar cada archivo

Para cada archivo, extrae todos los grupos de imágenes. Un solo archivo puede definir múltiples imágenes (principal + complementarias). Las reglas de análisis son:

  1. Imagen principal: Campos nombrados exactamente Registry, Image, Tag.
  2. Imágenes complementarias: Campos con un prefijo, por ejemplo, PgAdminRegistry, PgAdminImage, PgAdminTag — agrúpalos por el prefijo compartido.
  3. Etiquetas alternativas: Campos como TagVNextPreview, ManagementTag — inclúyelos como variantes de etiqueta adicionales en la misma imagen.
  4. Propiedades estáticas vs campos const: La mayoría usa public const string, pero algunos (ej. Kusto) usan public static string { get; }. Maneja ambos.
  5. Etiquetas calculadas: Algunas etiquetas se calculan, por ejemplo, public const string ManagementTag = $"{Tag}-management"; — resuélvelas a su valor literal.
  6. Derivar aspirePackage del nombre del directorio del proyecto (ej. src/Aspire.Hosting.Redis/ → Aspire.Hosting.Redis).
  7. Derivar sourceFile como la ruta relativa a la raíz del repositorio.

Paso 4 — Construir el JSON

Cada entrada en el arreglo de salida representa una imagen de contenedor 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 de 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"]
  }
]

Definiciones de campo

CampoTipoDescripción
aspirePackagestringEl nombre del paquete NuGet / proyecto (nombre del directorio bajo src/)
namestringNombre legible para humanos. Para imágenes principales, derívalo del nombre de la clase (elimina el sufijo ContainerImageTags / EmulatorContainerImageTags, divide PascalCase). Para imágenes complementarias, derívalo del prefijo/tipo del complemento (ej. PgAdmin*, RedisCommander*) en lugar de solo del nombre de la clase.
registrystringHost del registro de contenedores (ej. docker.io, mcr.microsoft.com, ghcr.io, quay.io, container-registry.oracle.com)
imagestringRuta de la imagen dentro del registro
tagstringEtiqueta principal
fullImagestringReferencia completa de la imagen: {registry}/{image}:{tag}
sourceFilestringRuta relativa al archivo fuente en microsoft/aspire
sourceUrlstringEnlace permanente de GitHub al archivo fuente en la rama main
isCompanionbooleantrue si esta es una imagen complementaria/de herramientas (ej. pgAdmin, Kafka UI, phpMyAdmin)
companionOfstring?Nombre de la imagen principal a la que acompaña, o null
alternateTagsstring[]Cualquier constante de etiqueta adicional definida para esta imagen (ej. vnext-preview, management)

Paso 5 — Ordenar y escribir

Ordena el arreglo por aspirePackage (ascendente), luego por isCompanion (principales primero), luego por name (ascendente).

Escribe en: src/frontend/src/data/container-images.json


Lista de verificación de validación

Después de generar el archivo, verifica:

  • Cada archivo *ContainerImageTags.cs en src/ está representado
  • No hay entradas duplicadas (mismo registry + image + tag + aspirePackage)
  • Todos los valores de fullImage están bien formados (registry/image:tag)
  • Las imágenes complementarias están correctamente vinculadas a su principal
  • El JSON es válido y está formateado correctamente (sangría de 2 espacios)
  • El archivo está ordenado según las reglas anteriores

Consumir los datos en Astro

El archivo JSON en src/frontend/src/data/container-images.json se puede importar directamente en componentes Astro:

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

Esto sigue el mismo patrón que los archivos de datos existentes como aspire-integrations.json, samples.json y github-stats.json en el mismo directorio.

Vincular a contenido relacionado

Cada entrada de imagen de contenedor se puede hacer referencia cruzada con:

  • Los documentos de integración en src/frontend/src/data/integration-docs.json (coincidir por aspirePackage)
  • Las integraciones NuGet en src/frontend/src/data/aspire-integrations.json (coincidir por title ≈ aspirePackage)
  • El enlace al archivo fuente de vuelta a microsoft/aspire para contribuyentes

Reglas importantes

  • Siempre descubre archivos dinámicamente — se agregan nuevos paquetes de hosting con frecuencia.
  • Analiza tanto patrones de const como de propiedades static — ambos existen en el código base.
  • Resuelve la interpolación de cadenas en valores de etiquetas calculadas (ej. $"{Tag}-management").
  • No incluyas imágenes de devcontainer, imágenes solo de prueba o imágenes del directorio playground/.
  • Solo extrae del directorio src/ archivos que coincidan con *ContainerImageTags.cs.
  • El repositorio aspire.dev es un sitio Astro — el archivo de datos se encuentra junto a otros datos JSON consumidos por componentes.

Checklist de validación

Después de generar el archivo, verifica:

  • Cada archivo *ContainerImageTags.cs en src/ está representado
  • No hay entradas duplicadas (mismo registry + image + tag + aspirePackage)
  • Todos los valores de fullImage están bien formados (registry/image:tag)
  • Las imágenes complementarias están correctamente vinculadas a su principal
  • El JSON es válido y está formateado correctamente (sangría de 2 espacios)
  • El archivo está ordenado según las reglas anteriores

Skills relacionados