O que são atualizações de vários ecossistemas?
As atualizações de vários ecossistemas permitem ao Dependabot agrupar as atualizações de dependência em ecossistemas de pacotes diferentes, como npm, Docker, Python e Terraform, em uma única solicitação de pull por grupo.
Em vez de receber solicitações de pull separadas para cada ecossistema, você recebe uma solicitação de pull consolidada contendo todas as atualizações para os ecossistemas desse grupo.
Como funcionam as atualizações de vários ecossistemas
Ao configurar um grupo de vários ecossistemas:
- Você define o grupo com uma agenda na
multi-ecosystem-groupsseção dodependabot.ymlarquivo. - Você atribui ecossistemas de pacote individuais ao grupo usando a
multi-ecosystem-groupchave. - Especifique quais dependências incluir usando a
patternschave para cada ecossistema. - Dependabot verifica se há atualizações de acordo com o agendamento do grupo.
- Uma única solicitação de pull é criada contendo atualizações de todos os ecossistemas do grupo.
- A PR usa o identificador de grupo no nome do branch e no título.
Quando usar atualizações de vários ecossistemas
As atualizações de vários ecossistemas são particularmente úteis para:
-
**Projetos de infraestrutura que usam várias** tecnologias (Docker, Terraform, scripts python) -
**Aplicações de full-stack com dependências de front-end e back-end que devem ser atualizadas juntas** -
**Bibliotecas multiplataforma** que precisam de versões de protocolo sincronizadas entre idiomas -
**Monorepos com serviços** em diferentes idiomas que compartilham controle de versão
Vários ecossistemas versus grupos de ecossistema único
Dependabot suporta dois tipos de agrupamento:
**Grupos de vários ecossistemas:**
-
Abranger várias
package-ecosystementradas em seudependabot.ymlarquivo -
Exigir a
patternschave para especificar quais dependências incluir -
Ter seu próprio cronograma definido na seção
multi-ecosystem-groups -
Usar a
multi-ecosystem-groupchave para atribuir ecossistemas a um grupo**Grupos de ecossistema único:** -
Trabalhar dentro de um ecossistema de pacotes
-
Utilize a
groupschave dentro de aupdatesentrada -
Herdar o agendamento da entrada pai
updates -
Melhor para organizar dependências em um único gerenciador de pacotes
Use grupos de vários ecossistemas quando quiser combinar atualizações entre diferentes gerenciadores de pacotes. Use grupos de ecossistema único quando quiser organizar dependências em um único gerenciador de pacotes (por exemplo, agrupar todos os pacotes npm relacionados ao AWS).
Comportamento de mesclagem de configuração
Algumas opções de configuração podem ser definidas no nível do grupo e do ecossistema. Dependabot combina esses valores de forma diferente dependendo da opção:
**Opções aditivas** (valores são mesclados):
*
assignees - Todos os responsáveis de ambos os níveis são atribuídos ao pull request
*
labels - Todos os rótulos de ambos os níveis são aplicados ao pull request
Por exemplo, se você atribuir @platform-team no nível de grupo e @docker-admin no nível do ecossistema do Docker, a solicitação de pull resultante será atribuída a ambos @platform-team e @docker-admin.
**Opções somente de** grupo (só podem ser definidas no nível do grupo):
milestonecommit-messagetarget-branchpull-request-branch-name
A tentativa de definir essas opções no nível do ecossistema causará um erro de configuração.
Para obter uma referência completa de todas as opções de configuração disponíveis e seu comportamento, consulte Referência de opções do Dependabot.
Casos de uso
Projetos de infraestrutura
O código de infraestrutura geralmente usa várias tecnologias: contêineres do Docker, Terraform para recursos de nuvem e scripts python para automação. Agrupar essas atualizações simplifica a coordenação de revisão e implantação.
**Por que agrupá-los:** As alterações de infraestrutura geralmente precisam ser implantadas juntas. Ter PRs separadas para cada tecnologia cria sobrecarga de coordenação e torna mais difícil rastrear o que precisa ser implantado como uma unidade.
**Cenário de exemplo:** Você tem imagens do Docker para seus serviços, módulos terraform para recursos do AWS e scripts Python para tarefas de automação. Uma única solicitação de pull de "infraestrutura" semanal contém atualizações para os três, facilitando a revisão e a implantação de alterações de infraestrutura em conjunto.
Aplicativos de pilha completa
Aplicativos Web com componentes de front-end e back-end se beneficiam da atualização de dependências em conjunto para garantir a compatibilidade e simplificar o teste.
**Por que agrupá-los:** O front-end e o back-end geralmente dependem um do outro. Atualizá-los juntos garante que você possa testar a pilha de aplicativos completa de uma só vez, em vez de mesclar alterações de front-end e descobrir incompatibilidades de back-end mais tarde.
**Cenário de exemplo:** O front-end do React e o back-end Rails são atualizados diariamente em uma única solicitação de pull "app-dependencies", permitindo que você teste o aplicativo completo em conjunto antes de fazer o merge.
Bibliotecas multiplataforma
Bibliotecas ou serviços que usam os mesmos protocolos em diferentes idiomas (como gRPC e Buffers de Protocolo) precisam manter as versões da biblioteca sincronizadas em todas as implementações.
**Por que agrupá-los:** As bibliotecas de protocolo precisam permanecer compatíveis em diferentes implementações de idioma. Atualizá-los juntos evita incompatibilidades de versão que podem causar falhas de comunicação entre os serviços.
**Cenário de exemplo:** Seus serviços Node.js e Ruby usam gRPC. Uma única solicitação de pull atualiza ( `@grpc/grpc-js` npm) e `grpc` (bundler) juntas, garantindo a compatibilidade do protocolo.
Monorepos com vários serviços
Repositórios grandes que contêm vários serviços em diferentes idiomas se beneficiam do agrupamento de atualizações por responsabilidade da equipe ou cadência de implantação.
**Por que agrupá-los:** Equipes diferentes possuem diferentes partes do monorepo e as atualizações devem ser roteadas para os revisores apropriados. Ou os serviços são implantados juntos e precisam de atualizações coordenadas.
**Cenário de exemplo:** O monorepo tem um serviço de API do Python, um serviço de trabalho Go e um front-end Node.js. Você cria grupos separados para "serviços de back-end" (Python + Go) e "front-end" (Node.js), cada um com agendas e atribuições diferentes.
Exemplo: Configuração complexa de vários grupos
Este exemplo mostra como um projeto complexo pode usar vários grupos com estratégias de atualização diferentes:
version: 2
multi-ecosystem-groups:
# Infrastructure updates - weekly, tracked in milestone
infrastructure:
schedule:
interval: "weekly"
assignees: ["@platform-team"]
labels: ["infrastructure", "dependencies"]
milestone: 10
# Application code updates - daily, with development team
full-stack:
schedule:
interval: "daily"
assignees: ["@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
labels: ["docker"] # Adds to infrastructure, dependencies
multi-ecosystem-group: "infrastructure"
# Terraform - infrastructure group
- 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
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
multi-ecosystem-group: "full-stack"
version: 2
multi-ecosystem-groups:
# Infrastructure updates - weekly, tracked in milestone
infrastructure:
schedule:
interval: "weekly"
assignees: ["@platform-team"]
labels: ["infrastructure", "dependencies"]
milestone: 10
# Application code updates - daily, with development team
full-stack:
schedule:
interval: "daily"
assignees: ["@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
labels: ["docker"] # Adds to infrastructure, dependencies
multi-ecosystem-group: "infrastructure"
# Terraform - infrastructure group
- 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
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
multi-ecosystem-group: "full-stack"
Próximas Etapas
-
[AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-multi-ecosystem-updates)