Skip to main content

Configuration des mises à jour multi-écosystème pour Dependabot

Apprenez à configurer Dependabot pour regrouper les mises à jour entre différents écosystèmes afin de recevoir une seule requête de tirage consolidée par groupe au lieu d'une demande de tirage pour chaque écosystème.

Qui peut utiliser cette fonctionnalité ?

Users with write access

À propos des mises à jour multi-écosystème

Les mises à jour multi-écosystèmes vous permettent de créer des groupes qui couvrent plusieurs écosystèmes de paquets et d'obtenir une seule requête pull Dependabot avec des mises à jour pour tous les écosystèmes pris en charge. Cette approche permet de réduire le nombre de demandes d'extraction Dependabot que vous recevez et de rationaliser votre workflow de mise à jour des dépendances.

Les mises à jour multi-écosystème sont particulièrement utiles pour :

  • projets d’infrastructure qui utilisent plusieurs technologies (Docker, Terraform, scripts Python).
  • applications de pile complète avec les dépendances frontend et back-end qui doivent être mises à jour ensemble.
  • bibliothèques multiplateformes qui ont besoin de versions de protocole synchronisées entre les langages.

Mise en route

Vous devez suivre ces instructions pour configurer votre premier groupe multi-écosystème.

1. Ajoutez multi-ecosystem-groups à votre fichier .github/dependabot.yml

Commencez par définir un groupe avec une planification dans la section multi-ecosystem-groups de niveau supérieur :

YAML
version: 2

multi-ecosystem-groups:
  infrastructure:
    schedule:
      interval: "weekly"

updates:
  # Your existing package ecosystems will go here

2. Affecter des écosystèmes à des groupes avec des modèles

  1. Ajoutez la clé multi-ecosystem-group .
  2. Ajoutez patterns aux configurations de votre écosystème de packages.
YAML
version: 2

multi-ecosystem-groups:
  infrastructure:
    schedule:
      interval: "weekly"

updates:
  - package-ecosystem: "docker"
    directory: "/"
    patterns: ["nginx", "redis", "postgres"]
    multi-ecosystem-group: "infrastructure"
  
  - package-ecosystem: "terraform"
    directory: "/"
    patterns: ["aws", "terraform-*"]
    multi-ecosystem-group: "infrastructure"

Important

La clé patterns est requise lors de l'utilisation demulti-ecosystem-group. Vous pouvez spécifier des modèles de dépendance pour inclure uniquement certaines dépendances dans le groupe, ou utiliser ["*"] pour inclure toutes les dépendances.

3. Valider et surveiller les demandes de tirage consolidées

Une fois que vous avez validée les modifications apportées à votre fichier dependabot.yml , Dependabot effectue les opérations suivantes :

  • Rechercher les mises à jour selon la planification du groupe
  • Recherchez les mises à jour selon la planification du groupe.
  • Créez une requête de tirage unique contenant des mises à jour pour tous les écosystèmes spécifiés dans le groupe.
  • Utilisez l’identificateur de groupe dans le nom de la branche et le titre de la requête de tirage.

4. Personnaliser avec des clés supplémentaires (facultatif)

Ajoutez assignees, labelset d’autres paramètres à vos groupes :

YAML
multi-ecosystem-groups:
  infrastructure:
    schedule:
      interval: "weekly"
    assignees: ["@platform-team"]
    labels: ["infrastructure", "dependencies"]

updates:
  - package-ecosystem: "docker"
    directory: "/"
    patterns: ["nginx", "redis", "postgres"]
    multi-ecosystem-group: "infrastructure"
  
  - package-ecosystem: "terraform"
    directory: "/"
    patterns: ["aws", "terraform-*"]
    multi-ecosystem-group: "infrastructure"

Configuration spécifique à plusieurs écosystèmes

Les mises à jour multi-écosystèmes utilisent une structure de configuration à deux niveaux pour fournir une flexibilité et un contrôle sur la façon dont les mises à jour sont regroupées et gérées :

  • Au niveau du groupe (multi-ecosystem-groups): C'est ici que vous définissez le comportement général du groupe, la planification et les paramètres partagés qui s'appliquent à tous les écosystèmes de packages du groupe.
  • Au niveau de l'écosystème (updates): Configurez les gestionnaires de paquets individuels au sein du groupe, y compris les dépendances à inclure et les paramètres spécifiques à l'écosystème.

Cette structure vous permet de définir des stratégies cohérentes au niveau du groupe tout en conservant un contrôle précis sur les écosystèmes de packages individuels.

multi-ecosystem-groups

Définissez des groupes qui s’étendent sur plusieurs écosystèmes de package. Chaque groupe nécessite :

  • Identificateur de groupe: utilisé dans les noms de branche et les titres des requêtes de tirage.
  • Planification: À quelle fréquence vérifier les mises à jour. Consultez planification pour toutes les options disponibles.

multi-ecosystem-group

Affectez un écosystème de packages à un groupe multi-écosystème. Nécessite la clé patterns pour spécifier les dépendances à inclure.

Pour plus d'informations surpatterns, voir patterns et exclude-patterns.

Options de configuration supplémentaires

Toutes les options de configuration standard Dependabot peuvent être utilisées avec des groupes multi-écosystèmes. Voir package-ecosystem, directory, allow, ignore, cooldown, et registries dans Référence des options de Dependabot.

Clé de configuration

Lorsque vous utilisez des groupes multi-écosystèmes, les clés sont configurées à deux niveaux. Voici une répartition complète des clés qui peuvent être utilisées à l’endroit où :

Niveau du groupe (multi-ecosystem-groups)

Le tableau suivant montre les clés de configuration disponibles au niveau du groupe, ainsi que leurs types de comportement. Pour plus d'informations, consultez Comportement de configuration.

CléRequisComportement
scheduleNon applicable
labelsAdditive
milestoneGroupe uniquement
assigneesAdditive
target-branchGroupe uniquement
commit-messageGroupe uniquement
pull-request-branch-nameGroupe uniquement

Au niveau de l'écosystème (updates)

Le tableau suivant présente les clés de configuration disponibles au niveau de l'écosystème, ainsi que leurs types de comportement. Pour plus d'informations, consultez Comportement de configuration.

CléRequisComportement
package-ecosystemNon applicable
directory / directoriesNon applicable
patternsNon applicable
allowNon applicable
ignoreNon applicable
registriesNon applicable
vendorNon applicable
versioning-strategyNon applicable
update-typesNon applicable
cooldownNon applicable
labelsAdditive
assigneesAdditive

Comportement de configuration

Clés additives

Les clés additives fusionnent les valeurs à partir du niveau du groupe et du niveau de l’écosystème individuel au lieu d’une substitution de l’autre. Cela vous permet de définir des configurations cohérentes à l’échelle de l’équipe au niveau du groupe tout en ajoutant une expertise spécifique de l’écosystème au niveau individuel.

  • assignees - Tous les cessionnaires des niveaux groupe et écosystème sont affectés
  • labels - Toutes les étiquettes des niveaux de groupe et d’écosystème sont appliquées

Ce tableau montre comment Dependabot combine les valeurs des niveaux groupe et écosystème pour les demandes d'extraction Docker dans l'exemple ci-dessous :

OptionValeur au niveau du groupeValeur au niveau de l'écosystèmeRésultat
assignees@platform-team, @security-lead@docker-admin@platform-team, @security-lead, @docker-admin
labelsinfrastructure, dependenciesdocker, containersinfrastructure, dependencies, docker, containers
YAML
multi-ecosystem-groups:
  infrastructure:
    assignees: ["@platform-team", "@security-lead"]
    labels: ["infrastructure", "dependencies"]

updates:
  - package-ecosystem: "docker"
    assignees: ["@docker-admin"]
    labels: ["docker", "containers"]
    multi-ecosystem-group: "infrastructure"

Clés réservées au groupe

  • milestone - Nombre de jalons entiers
  • commit-message - Modèles de messages de validation
  • target-branch - Branche cible pour les demandes de tirage
  • pull-request-branch-name - Configuration du nommage de branche

Avertissement

Si vous essayez de définir des clés réservées au groupe au niveau de l'écosystème (dans les entrées updates), Dependabot générera une erreur de configuration et ne parviendra pas à traiter votre fichier dependabot.yml. Ces clés ne doivent être spécifiées que dans la section multi-ecosystem-groups .

Exemple :

Ce tableau montre comment Dependabot combine les valeurs des niveaux groupe et écosystème pour les demandes d'extraction Docker dans l'exemple ci-dessous :

OptionValeur au niveau du groupeValeur au niveau de l'écosystèmeRésultat
assignees@platform-team@docker-admin@platform-team, @docker-admin
labelsinfrastructuredocker, containersinfrastructure, docker, containers
YAML
multi-ecosystem-groups:
  infrastructure:
    assignees: ["@platform-team"]
    labels: ["infrastructure"]

updates:
  - package-ecosystem: "docker"
    assignees: ["@docker-admin"]
    labels: ["docker", "containers"]
    multi-ecosystem-group: "infrastructure"

Cas d’usage et exemples

Les mises à jour multi-écosystème sont particulièrement utiles pour les projets qui utilisent plusieurs gestionnaires de packages et souhaitent coordonner les mises à jour entre eux. Voici quelques scénarios courants :

Projets d’infrastructure

Scénario: votre code d’infrastructure utilise plusieurs technologies : conteneurs Docker, Terraform pour les ressources cloud et scripts Python pour l’automatisation. Vous souhaitez que toutes les mises à jour liées à l’infrastructure soient regroupées pour faciliter la révision et la coordination du déploiement.

Pourquoi regrouper ces: les changements d’infrastructure doivent souvent être déployés ensemble et avoir des demandes de tirage distinctes pour chaque technologie créent une surcharge de coordination.

YAML
multi-ecosystem-groups:
  infrastructure:
    schedule:
      interval: "weekly"  # Weekly updates to avoid disruption

updates:
  - package-ecosystem: "docker"
    directory: "/"
    patterns: ["nginx", "redis", "postgres"]
    multi-ecosystem-group: "infrastructure"
  - package-ecosystem: "terraform"
    directory: "/"
    patterns: ["aws", "terraform-*"]
    multi-ecosystem-group: "infrastructure"
  - package-ecosystem: "pip"
    directory: "/"
    patterns: ["boto3", "requests", "pyyaml"]
    multi-ecosystem-group: "infrastructure"

Résultat: une requête de tirage hebdomadaire contenant des mises à jour pour les images Docker, les fournisseurs Terraform et les dépendances Python utilisées dans l’automatisation de l’infrastructure.

Applications à pile complète

Scénario: vous disposez d’une application web avec un serveur frontal React et un back-end Rails. Vous souhaitez mettre à jour les dépendances front-end et back-end pour garantir la compatibilité et simplifier les tests.

Pourquoi regrouper ces: front-end et back-end dépendent souvent les uns des autres, et les mettre à jour ensemble garantit que vous pouvez tester la pile d’applications complète en une seule fois.

YAML
multi-ecosystem-groups:
  app-dependencies:
    schedule:
      interval: "daily"  # More frequent updates for application code

updates:
  - package-ecosystem: "npm"
    directory: "/frontend"
    patterns: ["react", "lodash", "@types/*"]  # Core frontend libraries and TypeScript types
    multi-ecosystem-group: "app-dependencies"
  - package-ecosystem: "bundler"
    directory: "/backend"
    patterns: ["rails", "pg", "sidekiq"]  # Core backend framework and database
    multi-ecosystem-group: "app-dependencies"

Résultat: PRs quotidiens contenant les mises à jour JavaScript/TypeScript frontales et les mises à jour de gemme Ruby back-end, ce qui vous permet de tester l’application complète ensemble.

Bibliothèques multiplateformes

scénario: vous créez une bibliothèque ou un service qui utilise les mêmes protocoles dans différents langages (comme gRPC et tampons de protocole). Vous souhaitez synchroniser les versions de la bibliothèque dans toutes les implémentations.

Pourquoi regrouper ces deux: les bibliothèques de protocole doivent rester compatibles entre différentes implémentations de langage, afin de les mettre à jour ensemble empêche les incompatibilités de version.

YAML
multi-ecosystem-groups:
  grpc-and-protobuf:
    schedule:
      interval: "daily"

updates:
  - package-ecosystem: "bundler"
    directory: "/grpc-proto-test/"
    patterns: ["grpc", "google-protobuf"]
    multi-ecosystem-group: "grpc-and-protobuf"
  - package-ecosystem: "npm"
    directory: "/grpc-proto-test/"
    patterns: ["@grpc/grpc-js", "google-protobuf"]
    multi-ecosystem-group: "grpc-and-protobuf"

Résultat: les demandes de tirage quotidiennes garantissent que Ruby et Node.js bibliothèques gRPC restent synchronisées, ce qui empêche les problèmes de compatibilité du protocole.

Exemple de configuration avancée

Cet exemple complet montre comment un projet complexe peut utiliser plusieurs groupes avec différentes stratégies de mise à jour et fusion de clés :

YAML
version: 2

multi-ecosystem-groups:
  infrastructure:
    schedule:
      interval: "weekly"
    assignees: ["@platform-team"]           # assign platform team
    labels: ["infrastructure", "dependencies"]
    milestone: 10                           # Track in milestone
    commit-message:
      prefix: "infra"
      include: "scope"
  
  # Application code updates - daily, with development team
  full-stack:
    schedule:
      interval: "daily"
    assignees: ["@full-stack-team"]         # assign to full-stack team
    labels: ["full-stack"]

updates:
  # Docker images - infrastructure group with additional docker expertise
  - package-ecosystem: "docker"
    directory: "/"
    patterns: ["nginx", "redis", "postgres"]
    assignees: ["@docker-admin"]            # adds to @platform-team (additive)
    labels: ["docker"]                      # adds to infrastructure, dependencies (additive)
    multi-ecosystem-group: "infrastructure"
  
  # Terraform - infrastructure group with terraform specialists
  - package-ecosystem: "terraform"
    directory: "/"
    patterns: ["aws", "terraform-*"]
    multi-ecosystem-group: "infrastructure"
    
  # Frontend - full-stack group with frontend focus
  - package-ecosystem: "npm"
    directory: "/frontend"
    patterns: ["react", "lodash", "@types/*"]
    labels: ["frontend"]                    # adds to full-stack (additive)
    multi-ecosystem-group: "full-stack"
    
  # Backend - full-stack group with backend specialist
  - package-ecosystem: "bundler"
    directory: "/backend"
    patterns: ["rails", "pg", "sidekiq"]
    assignees: ["@backend-dev"]             # adds to @full-stack-team (additive)
    multi-ecosystem-group: "full-stack"

Fonctionnement de cette configuration

Demandes de tirage d’infrastructure

  • schedule: weekly
OptionValeur au niveau du groupeValeur au niveau de l'écosystèmeRésultat
assignees@platform-team@docker-admin (Docker), @terraform-experts (Terraform)Toutes combinées
labelsinfrastructure, dependenciesdocker (Docker)Toutes combinées
scheduleweeklyAucun(e)Mises à jour hebdomadaires
milestone10Aucun(e)Suivi du jalon 10

Application à pile complète

  • schedule: daily
OptionValeur au niveau du groupeValeur au niveau de l'écosystèmeRésultat
assignees@full-stack-team@backend-dev (Backend)Toutes combinées
labelsfull-stackfrontend (Frontend)Toutes combinées
scheduledailyAucun(e)Mises à jour plus fréquentes

Cette approche garantit que les bonnes personnes sont impliquées pour chaque type de mise à jour tout en conservant des stratégies cohérentes entre les technologies associées.

Bonnes pratiques

  • dépendances liées au groupe: seuls les écosystèmes de groupe qui appartiennent logiquement ensemble.
  • Utiliser des identificateurs descriptifs: choisissez des noms de groupe qui indiquent clairement l’objectif du groupe.

Pour aller plus loin