Communitygithub.com

microsoft/aspire.dev

Extrait toutes les références d'images conteneur (registre, image, tag) du code source microsoft/aspire et produit un fichier JSON de données pour le site Astro aspire.dev. À UTILISER POUR : mettre à jour le JSON des images conteneur, rafraîchir les données d'images conteneur, lister toutes les images conteneur Aspire, synchroniser les versions d'images conteneur, générer container-images.json. NE PAS UTILISER POUR : mettre à jour les versions d'images conteneur dans le code source Aspire lui-même (c'est une modification du dépôt produit), les données de packages NuGet (utiliser la compétence intégrations), ou les images Dockerfile pour les conteneurs de développement. UTILISE : bash, lecture/écriture de fichiers. POUR LES OPÉRATIONS UNIQUES : utiliser grep/find pour vérifier rapidement un seul tag d'image.

Qu'est-ce que aspire.dev ?

Cette compétence est conçue pour les développeurs et agents IA qui travaillent avec les référentiels microsoft/aspire et microsoft/aspire.dev. Elle automatise l'extraction de toutes les références d'images conteneur (registre, nom d'image, tag) à partir du code source du produit Aspire, en analysant les classes statiques *ContainerImageTags.cs. Les données extraites sont formatées en un fichier JSON structuré (container-images.json) qui alimente le site Astro aspire.dev, permettant un catalogue navigable de toutes les images conteneur utilisées par les intégrations d'hébergement Aspire. La compétence prend en charge les images principales et compagnons, les tags alternatifs, et les champs de propriétés statiques ou const. Elle est invoquée via bash et la lecture/écriture de fichiers, et exige une découverte dynamique des fichiers source pour s'adapter aux nouveaux packages d'hébergement ajoutés régulièrement. L'analyse inclut la résolution des tags interpolés, le tri des entrées, et la validation pour garantir l'exhaustivité et l'exactitude. Cette compétence est particulièrement utile pour les tâches de mise à jour des données d'images conteneur sur le site de documentation Aspire, et ne doit pas être utilisée pour modifier le code source du produit Aspire lui-même.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Compétence Images Conteneur

Cette compétence extrait chaque référence d'image conteneur du dépôt produit microsoft/aspire et écrit un fichier JSON structuré dans microsoft/aspire.dev à :

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

Ce JSON est consommé par les composants Astro sur le site aspire.dev pour afficher un catalogue navigable de toutes les images conteneur utilisées par les intégrations d'hébergement Aspire.


Modèle de code source

Toutes les métadonnées d'images conteneur dans microsoft/aspire résident dans des classes statiques nommées *ContainerImageTags (ou *ContainerImageTags.cs). Chaque fichier suit un modèle strict et cohérent :

internal static class <Nom>ContainerImageTags
{
    public const string Registry = "<hôte-registre>";
    public const string Image = "<chemin-image>";
    public const string Tag = "<tag>";

    // Certains fichiers ont des images compagnons supplémentaires, par exemple :
    public const string <Compagnon>Registry = "<hôte-registre>";
    public const string <Compagnon>Image = "<chemin-image>";
    public const string <Compagnon>Tag = "<tag>";
}

Où les trouver

Tous les fichiers correspondant au motif glob :

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

Ceux-ci couvrent de nombreux projets, y compris (sans s'y limiter) :

ProjetFichier
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

Important : De nouveaux packages d'hébergement peuvent être ajoutés à tout moment. Découvrez toujours les fichiers dynamiquement — ne vous fiez jamais à une liste codée en dur.


Procédure d'extraction

Étape 1 — Cloner ou accéder au dépôt aspire à HEAD

# Si vous travaillez en local :
git clone --depth 1 https://github.com/microsoft/aspire.git /tmp/aspire

Étape 2 — Trouver tous les fichiers ContainerImageTags

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

Étape 3 — Analyser chaque fichier

Pour chaque fichier, extrayez tous les groupes d'images. Un seul fichier peut définir plusieurs images (principale + compagnons). Les règles d'analyse sont :

  1. Image principale : Champs nommés exactement Registry, Image, Tag.
  2. Images compagnons : Champs avec un préfixe, par exemple PgAdminRegistry, PgAdminImage, PgAdminTag — regroupez-les par le préfixe partagé.
  3. Tags alternatifs : Champs comme TagVNextPreview, ManagementTag — incluez-les comme variantes de tag supplémentaires sur la même image.
  4. Propriétés statiques vs champs const : La plupart utilisent public const string, mais certains (par ex. Kusto) utilisent public static string { get; }. Gérez les deux.
  5. Tags calculés : Certains tags sont calculés, par exemple public const string ManagementTag = $"{Tag}-management"; — résolvez-les à leur valeur littérale.
  6. Dérivez aspirePackage à partir du nom du répertoire du projet (par exemple src/Aspire.Hosting.Redis/ → Aspire.Hosting.Redis).
  7. Dérivez sourceFile comme le chemin relatif par rapport à la racine du dépôt.

Étape 4 — Construire le JSON

Chaque entrée dans le tableau de sortie représente une image conteneur distincte :

[
  {
    "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": "Émulateur 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"]
  }
]

Définitions des champs

ChampTypeDescription
aspirePackagechaîneLe nom du package NuGet / projet (nom du répertoire sous src/)
namechaîneNom convivial. Pour les images principales, dérivez-le du nom de la classe (supprimez le suffixe ContainerImageTags / EmulatorContainerImageTags, divisez le PascalCase). Pour les images compagnons, dérivez-le du préfixe/type compagnon (par exemple PgAdmin*, RedisCommander*) plutôt que uniquement du nom de la classe.
registrychaîneHôte du registre de conteneurs (par exemple docker.io, mcr.microsoft.com, ghcr.io, quay.io, container-registry.oracle.com)
imagechaîneChemin de l'image dans le registre
tagchaîneTag principal
fullImagechaîneRéférence d'image complète : {registry}/{image}:{tag}
sourceFilechaîneChemin relatif vers le fichier source dans microsoft/aspire
sourceUrlchaîneLien permanent GitHub vers le fichier source sur la branche main
isCompanionbooléentrue s'il s'agit d'une image compagnon/outillage (par exemple pgAdmin, Kafka UI, phpMyAdmin)
companionOfchaîne ?Nom de l'image principale que celle-ci accompagne, ou null
alternateTagschaîne[]Toutes les constantes de tag supplémentaires définies pour cette image (par exemple vnext-preview, management)

Étape 5 — Trier et écrire

Triez le tableau par aspirePackage (croissant), puis par isCompanion (principale d'abord), puis par name (croissant).

Écrire dans : src/frontend/src/data/container-images.json


Liste de validation

Après avoir généré le fichier, vérifiez :

  • Chaque fichier *ContainerImageTags.cs dans src/ est représenté
  • Pas d'entrées en double (même registry + image + tag + aspirePackage)
  • Toutes les valeurs fullImage sont bien formées (registry/image:tag)
  • Les images compagnons sont correctement liées à leur image principale
  • Le JSON est valide et correctement formaté (indentation de 2 espaces)
  • Le fichier est trié selon les règles ci-dessus

Consommation des données dans Astro

Le fichier JSON à src/frontend/src/data/container-images.json peut être importé directement dans les composants Astro :

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

Cela suit le même modèle que les fichiers de données existants comme aspire-integrations.json, samples.json, et github-stats.json dans le même répertoire.

Liaison vers le contenu connexe

Chaque entrée d'image conteneur peut être croisée avec :

  • La documentation d'intégration à src/frontend/src/data/integration-docs.json (correspondance sur aspirePackage)
  • Les intégrations NuGet à src/frontend/src/data/aspire-integrations.json (correspondance sur title ≈ aspirePackage)
  • Le lien vers le fichier source retour vers microsoft/aspire pour les contributeurs

Règles importantes

  • Découvrez toujours les fichiers dynamiquement — de nouveaux packages d'hébergement sont ajoutés fréquemment.
  • Analysez les modèles de propriétés const et static — les deux existent dans le code source.
  • Résolvez l'interpolation de chaîne dans les valeurs de tag calculées (par exemple $"""{Tag}-management""").
  • N'incluez pas les images de devcontainer, les images de test uniquement, ou les images du répertoire playground/.
  • Extrayez uniquement du répertoire src/ les fichiers correspondant à *ContainerImageTags.cs.
  • Le dépôt aspire.dev est un site Astro — le fichier de données réside à côté des autres données JSON consommées par les composants.

Skills associés