Skip to main content

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

Découvrez comment configurer Dependabot pour regrouper les mises à jour entre différents écosystèmes afin de recevoir une seule pull request consolidée par groupe au lieu d'une pull request pour chaque écosystème.

Qui peut utiliser cette fonctionnalité ?

Users with write access

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

Les mises à jour multi-écosystèmes vous permettent de créer des groupes qui couvrent plusieurs écosystèmes de packages et d'obtenir une seule pull request Dependabot avec des mises à jour pour tous les écosystèmes pris en charge. Cette approche contribue à réduire le nombre de demandes d’extraction Dependabot que vous recevez et simplifie votre processus de mise à jour des dépendances.

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

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

Bien démarrer

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

1. Ajouter 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 lorsque vous utilisez multi-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 demande de tirage unique contenant les 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 demande de tirage.

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

Ajoutez assignees, labels et 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 demandes de tirage.
    
  •           **Planning** : fréquence de la recherche des mises à jour Consultez le [planning](/code-security/dependabot/working-with-dependabot/dependabot-options-reference#schedule-) pour voir 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 sur patterns, consultez 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. Consultez package-ecosystem, directory, allow, ignore, cooldown et registries dans Référence des options Dependabot.

Configuration des touches

Lorsque vous utilisez des groupes multi-écosystèmes, les clés sont configurées à deux niveaux. Voici une décomposition 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 des configurations.

CléObligatoireComportement
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 montre les clés de configuration disponibles au niveau de l'écosystème, ainsi que leurs types de comportement. Pour plus d'informations, consultez Comportement des configurations.

CléObligatoireComportement
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 responsables des niveaux du groupe et de l'écosystème sont affectés
    
  •           `labels` - Toutes les étiquettes des niveaux du groupe et de l’écosystème sont appliquées
    

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

OptionValeur au niveau du groupeValeur au niveau de l'écosystèmeRésultats
assignees
          `@platform-team`, `@security-lead`   | `@docker-admin`         | 
          `@platform-team`, `@security-lead``@docker-admin`           |

| labels | infrastructure, dependencies | docker, containers | infrastructure, 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 du groupe et de l'écosystème pour les demandes de tirage Docker dans l'exemple ci-dessous :

OptionValeur au niveau du groupeValeur au niveau de l'écosystèmeRésultats
assignees@platform-team@docker-admin
          `@platform-team`, `@docker-admin`      |

| labels | infrastructure | docker, containers | infrastructure, 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èmes 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, par exemple des conteneurs Docker, Terraform pour les ressources cloud et des 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 les regrouper** : les changements d’infrastructure doivent souvent être déployés ensemble et avoir des demandes de tirage distinctes pour chaque technologie crée 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 demande de tirage hebdomadaire contenant des mises à jour pour les images Docker, les fournisseurs Terraform et les dépendances Python est utilisée 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 du frontend et du back-end pour garantir la compatibilité et simplifier les tests.

          **Pourquoi les regrouper** : le frontend et le back-end dépendent souvent l'un de l'autre, et les mettre à jour ensemble garantit que vous pouvez tester la pile d’application 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** : vous obtenez des demandes de tirage quotidiennes contenant les mises à jour JavaScript/TypeScript frontales et les mises à jour de gemme Ruby pour le back-end, ce qui vous permet de tester l’application complète dans son 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 Protocol Buffers). Vous souhaitez synchroniser les versions de la bibliothèque dans toutes les implémentations.

          **Pourquoi les regrouper** : les bibliothèques de protocole doivent rester compatibles entre différentes implémentations de langage. 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 les bibliothèques gRPC Node.js restent synchronisés, 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

Infrastructure PRs

  • schedule: weekly
OptionValeur au niveau du groupeValeur au niveau de l'écosystèmeRésultats
assignees@platform-team
          `@docker-admin` (Docker), `@terraform-experts` (Terraform) | Toutes combinées |

| labels | infrastructure, dependencies | docker (Docker) | Toutes combinées | | schedule | weekly | None | Mises à jour hebdomadaires | | milestone | 10 | None | Suivi du jalon 10 |

Demandes de tirage à pile complète

  • schedule: daily
OptionValeur au niveau du groupeValeur au niveau de l'écosystèmeRésultats
assignees@full-stack-team@backend-dev (Back-end)Toutes combinées
labelsfull-stack
          `frontend` (Frontend) | Toutes combinées |

| schedule | daily | None | 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.

Meilleures pratiques

  •           **Dépendances liées au groupe** : uniquement des écosystèmes de groupe logiquement associés.
    
  •           **Utiliser des identificateurs descriptifs** : choisissez des noms de groupe qui indiquent clairement l’objectif du groupe.
    

Pour aller plus loin

  •           [AUTOTITLE](/code-security/dependabot/working-with-dependabot/dependabot-options-reference)