Dicas para manter dependências atualizadas automaticamente com Renovate
1. Introdução ao Renovate e seus benefícios
O Renovate é uma ferramenta open-source de automação de atualização de dependências que se destaca por sua flexibilidade e capacidade de configuração avançada. Diferentemente do Dependabot (nativo do GitHub) ou do Snyk (focado em segurança), o Renovate oferece suporte a mais de 50 ecossistemas de pacotes, incluindo npm, Docker, Maven, PyPI, NuGet e muito mais.
As principais vantagens de automatizar a atualização de dependências com Renovate incluem:
- Redução de débito técnico: dependências desatualizadas acumulam correções de segurança e melhorias de performance
- Consistência em larga escala: ideal para monorepos com centenas de pacotes ou organizações com dezenas de repositórios
- Configuração compartilhável: permite definir regras globais que se aplicam a todos os projetos da equipe
Casos de uso ideais incluem equipes que mantêm múltiplos projetos simultaneamente, ambientes com requisitos rigorosos de segurança e projetos que utilizam gerenciadores de pacotes com lockfiles complexos.
2. Configuração inicial do Renovate
A instalação mais simples é através do GitHub App. Basta acessar o GitHub Marketplace, instalar o aplicativo e selecionar os repositórios desejados. Para GitLab, utilize o GitLab Bot oficial. Ambientes self-hosted exigem Docker ou Node.js.
Após a instalação, crie o arquivo renovate.json na raiz do repositório:
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base"
],
"labels": ["dependencies", "renovate"],
"schedule": ["after 10pm every weekday", "before 5am every weekday"],
"timezone": "America/Sao_Paulo"
}
Este arquivo básico já ativa o Renovate, define labels personalizadas e agenda a execução para horários noturnos durante a semana. O extend config:base já inclui boas práticas recomendadas pela comunidade.
3. Estratégias de versionamento e agrupamento de PRs
Para evitar um dilúvio de Pull Requests, configure agrupamentos inteligentes. Dependências relacionadas, como pacotes do ecossistema React ou AWS SDK, devem ser atualizadas juntas:
{
"packageRules": [
{
"matchPackagePrefixes": ["react", "react-dom", "@types/react"],
"groupName": "React Core",
"groupSlug": "react-core"
},
{
"matchPackagePrefixes": ["@aws-sdk/"],
"groupName": "AWS SDK",
"groupSlug": "aws-sdk"
},
{
"matchUpdateTypes": ["minor", "patch"],
"matchCurrentVersion": ">=1.0.0",
"automerge": true,
"automergeType": "pr"
}
]
}
No exemplo acima, todas as atualizações minor e patch de pacotes estáveis (>1.0.0) serão automaticamente mergeadas após aprovação dos testes. Pacotes do React e AWS SDK são agrupados em PRs únicos.
4. Automação com schedules e rate limiting
O controle de quando e quantos PRs o Renovate abre é crucial para não sobrecarregar a equipe:
{
"schedule": ["after 10pm", "before 5am"],
"timezone": "America/Sao_Paulo",
"prConcurrentLimit": 5,
"prHourlyLimit": 2,
"branchConcurrentLimit": 10,
"automergeSchedule": ["after 1am", "before 6am"]
}
prConcurrentLimit: máximo de 5 PRs abertos simultaneamenteprHourlyLimit: no máximo 2 PRs por horaautomergeSchedule: merge automático apenas durante a madrugada
Para dependências de baixo risco (testes passam, sem breaking changes), configure auto-merge condicional:
{
"packageRules": [
{
"matchUpdateTypes": ["patch"],
"automerge": true,
"automergeType": "pr",
"platformAutomerge": true
}
]
}
5. Integração com pipelines de CI/CD
A integração com CI/CD garante que cada atualização seja validada automaticamente. Exemplo com GitHub Actions:
name: CI
on:
pull_request:
types: [opened, synchronize]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm test
- run: npm run build
Adicione labels e assignees automáticos para revisão em equipe:
{
"labels": ["dependencies", "automated"],
"assignees": ["@time-devops"],
"reviewers": ["@senior-dev"],
"assignAutomerge": true
}
6. Tratamento de dependências problemáticas e lockfiles
Para lidar com breaking changes, configure prefixos e limites:
{
"commitMessagePrefix": "chore(deps): ",
"commitMessageAction": "Update",
"prConcurrentLimit": 3,
"major": {
"commitMessagePrefix": "BREAKING CHANGE: ",
"labels": ["breaking-change"]
}
}
Para lockfiles, o Renovate gerencia automaticamente package-lock.json, yarn.lock e poetry.lock. Configure para evitar conflitos:
{
"lockFileMaintenance": {
"enabled": true,
"schedule": ["before 5am on monday"]
}
}
Para dependências pinned (versão fixa), use rangeStrategy:
{
"rangeStrategy": "bump",
"packageRules": [
{
"matchPackageNames": ["lodash"],
"rangeStrategy": "pin"
}
]
}
7. Monitoramento e boas práticas avançadas
Configure alertas para vulnerabilidades conhecidas (CVE):
{
"vulnerabilityAlerts": {
"enabled": true,
"labels": ["security", "urgent"]
},
"prPriority": {
"vulnerability": 10,
"security": 5
}
}
Para autenticação em registries privados (NPM privado, Docker Hub, Maven):
{
"hostRules": [
{
"hostType": "npm",
"matchHost": "registry.npmjs.org",
"encrypted": {
"token": "seu-token-criptografado"
}
},
{
"hostType": "docker",
"matchHost": "ghcr.io",
"username": "seu-usuario",
"password": "seu-token"
}
]
}
Revisão periódica do arquivo de configuração e logs:
{
"onboarding": true,
"onboardingConfig": {
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:base"]
},
"logLevel": "debug"
}
Para monitoramento, utilize o dashboard do Renovate ou integre com ferramentas de observabilidade como Datadog ou Grafana.
Referências
- Documentação Oficial do Renovate — Guia completo de configuração, exemplos e referência de todas as opções disponíveis
- Renovate vs Dependabot: Comparação Detalhada — Artigo técnico comparando as duas principais ferramentas de automação de dependências
- Configuração Avançada de Package Rules — Documentação oficial sobre como criar regras personalizadas para agrupamento e versionamento
- Automação de CI/CD com Renovate e GitHub Actions — Action oficial do Renovate para integração com GitHub Actions
- Gerenciamento de Lockfiles no Renovate — Documentação específica sobre como o Renovate gerencia lockfiles em diferentes ecossistemas
- Segurança com Vulnerability Alerts — Configuração de alertas automáticos para CVEs e vulnerabilidades conhecidas
- Autenticação em Registries Privados — Guia oficial para configurar acesso a repositórios privados de pacotes