À 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 :
version: 2 multi-ecosystem-groups: infrastructure: schedule: interval: "weekly" updates: # Your existing package ecosystems will go here
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
- Ajoutez la clé
multi-ecosystem-group
. - Ajoutez
patterns
aux configurations de votre écosystème de packages.
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"
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
, labels
et d’autres paramètres à vos groupes :
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"
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é | Requis | Comportement |
---|---|---|
schedule | Non applicable | |
labels | Additive | |
milestone | Groupe uniquement | |
assignees | Additive | |
target-branch | Groupe uniquement | |
commit-message | Groupe uniquement | |
pull-request-branch-name | Groupe 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é | Requis | Comportement |
---|---|---|
package-ecosystem | Non applicable | |
directory / directories | Non applicable | |
patterns | Non applicable | |
allow | Non applicable | |
ignore | Non applicable | |
registries | Non applicable | |
vendor | Non applicable | |
versioning-strategy | Non applicable | |
update-types | Non applicable | |
cooldown | Non applicable | |
labels | Additive | |
assignees | Additive |
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éslabels
- 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 :
Option | Valeur au niveau du groupe | Valeur au niveau de l'écosystème | Résultat |
---|---|---|---|
assignees | @platform-team , @security-lead | @docker-admin | @platform-team , @security-lead , @docker-admin |
labels | infrastructure , dependencies | docker , containers | infrastructure , dependencies , docker , containers |
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"
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 entierscommit-message
- Modèles de messages de validationtarget-branch
- Branche cible pour les demandes de tiragepull-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 :
Option | Valeur au niveau du groupe | Valeur au niveau de l'écosystème | Résultat |
---|---|---|---|
assignees | @platform-team | @docker-admin | @platform-team , @docker-admin |
labels | infrastructure | docker , containers | infrastructure , docker , containers |
multi-ecosystem-groups: infrastructure: assignees: ["@platform-team"] labels: ["infrastructure"] updates: - package-ecosystem: "docker" assignees: ["@docker-admin"] labels: ["docker", "containers"] multi-ecosystem-group: "infrastructure"
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.
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"
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.
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"
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.
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"
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 :
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"
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
Option | Valeur au niveau du groupe | Valeur au niveau de l'écosystème | Résultat |
---|---|---|---|
assignees | @platform-team | @docker-admin (Docker), @terraform-experts (Terraform) | Toutes combinées |
labels | infrastructure , dependencies | docker (Docker) | Toutes combinées |
schedule | weekly | Aucun(e) | Mises à jour hebdomadaires |
milestone | 10 | Aucun(e) | Suivi du jalon 10 |
Application à pile complète
schedule: daily
Option | Valeur au niveau du groupe | Valeur au niveau de l'écosystème | Résultat |
---|---|---|---|
assignees | @full-stack-team | @backend-dev (Backend) | Toutes combinées |
labels | full-stack | frontend (Frontend) | Toutes combinées |
schedule | daily | Aucun(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.