Skip to content

chore(infra): adicionar Dependabot para auto-update NuGet + GitHub Actions#369

Merged
marmota-alpina merged 1 commit into
mainfrom
chore/366-dependabot
May 10, 2026
Merged

chore(infra): adicionar Dependabot para auto-update NuGet + GitHub Actions#369
marmota-alpina merged 1 commit into
mainfrom
chore/366-dependabot

Conversation

@marmota-alpina
Copy link
Copy Markdown
Contributor

Resumo

Resolve a issue #366 (criada como follow-up do PR #365 quando introduzimos o primeiro prerelease no Directory.Packages.props central). Adiciona configuração Dependabot completa para auto-update de pacotes NuGet e GitHub Actions, com grouping inteligente para reduzir ruído e major bumps sempre manuais.

Decisão: Dependabot vs Renovate

  • Dependabot ✅ — nativo do GitHub, zero setup de App na org, suporte completo a Directory.Packages.props central + packages.lock.json em 17 projetos
  • Renovate ❌ — mais flexível mas requer instalação da App na org unifesspa-edu-br (decisão de plataforma fora do escopo desta issue)

Mudanças

.github/dependabot.yml (novo)

2 ecosystems: nuget (root) + github-actions (root)

Schedule: semanal, segunda 06:00 BRT (timezone: America/Belem) — antes do daily

Grouping inteligente para reduzir ruído (1 PR consolidado por trem):

Grupo Patterns
opentelemetry OpenTelemetry.* + Serilog.Sinks.OpenTelemetry (trem único)
wolverine WolverineFx*
ef-core Microsoft.EntityFrameworkCore* + Npgsql*
serilog Serilog* exceto o sink OTel (já no group opentelemetry)
kafka Confluent.* + Apache.Avro
testing xunit + AwesomeAssertions + NSubstitute + Testcontainers + ArchUnitNET + coverlet
github-actions-all catch-all em 1 PR

Major bumps SEMPRE manuais (ignore: update-types: [\"version-update:semver-major\"]) — Wolverine 5→6, EF Core 10→11, .NET 10→11 exigem revisão arquitetural (release notes, breaking changes, ADR se necessário)

Limites: open-pull-requests-limit: 5 (NuGet) + 2 (Actions) — evita inundação

Labels e commits: chore + deps (NuGet) ou chore + ci (Actions); commit prefix chore(deps): / chore(ci): (Conventional Commits-friendly conforme docs/guia-commits-e-integracao.md)

CONTRIBUTING.md

Nova seção "Auto-update de dependências (Dependabot)" entre Dependências proibidas e Checklist antes de pedir merge. Explica:

  • Como funciona (schedule, grouping, major bumps)
  • Tratamento dos PRs do bot (CI verde primeiro, auto-merge condicional para patches sem CVE, validação local opcional para deps sensíveis)
  • Como adicionar um novo grupo

Validação

```bash
python3 -c "import yaml; yaml.safe_load(open('.github/dependabot.yml'))" # OK
```

GitHub valida o schema do dependabot.yml automaticamente após o merge — se houver erro de sintaxe, aparece em Insights → Dependency graph → Dependabot.

Próximos passos pós-merge

  1. Esperar primeira execução automática (próxima segunda 06:00 BRT após merge) — Dependabot abre os PRs agrupados
  2. Calibrar se algum grupo gerar muito ruído ou ficar isolado por engano
  3. Considerar setup análogo em uniplus-web e uniplus-developers (issues separadas se aplicável)

Closes #366

…tions

Resolve #366 — gap pré-existente que se tornou explícito ao introduzir o
primeiro prerelease (-beta.1) no Directory.Packages.props central durante
a entrega da Story #30 (PR #365).

Decisão Dependabot vs Renovate
- Dependabot: nativo do GitHub, zero setup de App na org, suporte completo a
  Directory.Packages.props central + packages.lock.json em 17 projetos
- Renovate: mais flexível mas requer instalação da App na org unifesspa-edu-br
  (decisão de plataforma fora do escopo desta issue)

Configuração (.github/dependabot.yml)
- 2 ecosystems: nuget (root) + github-actions (root)
- Schedule semanal: segunda 06:00 BRT (timezone America/Belem) — antes do daily
- Grouping inteligente para reduzir ruído:
  - opentelemetry (OpenTelemetry.* + Serilog.Sinks.OpenTelemetry — trem único)
  - wolverine (WolverineFx*)
  - ef-core (Microsoft.EntityFrameworkCore* + Npgsql*)
  - serilog (Serilog* exceto sink OTel)
  - kafka (Confluent.* + Apache.Avro)
  - testing (xunit + AwesomeAssertions + NSubstitute + Testcontainers + ArchUnit + coverlet)
  - github-actions-all (catch-all em 1 PR)
- Major bumps SEMPRE manuais (ignored via update-types semver-major) —
  Wolverine 5→6, EF Core 10→11, .NET 10→11 exigem revisão arquitetural
- open-pull-requests-limit: 5 (NuGet) + 2 (Actions) — evita inundação
- Labels: chore + deps (NuGet) ou chore + ci (Actions); commit prefix
  chore(deps): / chore(ci):

Documentação
- Nova seção em CONTRIBUTING.md "Auto-update de dependências (Dependabot)"
  explicando schedule, grouping, tratamento dos PRs do bot e como adicionar
  novo grupo

YAML validado via python yaml.safe_load.

Closes #366
Copy link
Copy Markdown
Contributor

@jf2s jf2s left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aprovado.

PR mecânico (YAML config + doc) que resolve gap pré-existente do repo. CI 5/5 verde. Codex skipou (esperado em PRs YAML/Markdown sem código produtivo).

Pontos validados:

  • YAML schema parseado por python yaml.safe_load antes do push
  • exclude-patterns em group é feature documentada do Dependabot (group serilog exclui o sink OTel para evitar ambiguidade com group opentelemetry)
  • update-types: [\"version-update:semver-major\"] no ignore bloqueia majors do auto-update mas NÃO bloqueia security advisories — esses vêm como Dependabot security updates separados que respeitam o ignore só para version updates, não para vulnerabilidades
  • timezone America/Belem (Pará — UTC-3 sem DST) está consistente com a Unifesspa; America/Sao_Paulo daria offset diferente em períodos hipotéticos de DST mas hoje ambos retornam UTC-3
  • Documentação encaixada na ordem certa do CONTRIBUTING.md (entre Dependências proibidas e Checklist), explicando schedule + grouping + tratamento dos PRs do bot

Pontos positivos:

  • Commit message detalhado com decisão Dependabot vs Renovate ancorada e justificada
  • Grouping pensado por trem técnico — reduz drasticamente ruído (1 PR opentelemetry em vez de 5+ PRs separados)
  • Major bumps explícitos como manual — alinha com a prática estabelecida do repo de revisar Wolverine/EF Core/.NET com cuidado arquitetural
  • open-pull-requests-limit separados por ecosystem (5 NuGet + 2 Actions) — evita inundação sem subutilizar Actions

Sem findings. Pode mergear para fechar #366.

@marmota-alpina marmota-alpina merged commit 7b69a2d into main May 10, 2026
5 checks passed
@marmota-alpina marmota-alpina deleted the chore/366-dependabot branch May 10, 2026 20:08
@marmota-alpina marmota-alpina self-assigned this May 10, 2026
marmota-alpina added a commit that referenced this pull request May 10, 2026
…369)

PR #370 (Dependabot github-actions-all) abriu com 7 majors simultâneas
(checkout v5→v6, setup-node v4→v6, upload-artifact v5→v7, docker/* v3→v4
e v5→v7) e foi fechado pelo bot ao detectar conflito com a refatoração
do ci.yml no PR #372.

Causa: o ignore semver-major existia só no ecosystem nuget; faltava no
github-actions. Esta correção fecha o gap simetricamente.

Majors de Actions ficam para PR manual — exigem revisão de release
notes (Node.js runtime, inputs deprecados, sintaxe nova) que não cabe
em bump em massa automatizado.
marmota-alpina added a commit that referenced this pull request May 10, 2026
…369)

PR #370 (Dependabot github-actions-all) abriu com 7 majors simultâneas
(checkout v5→v6, setup-node v4→v6, upload-artifact v5→v7, docker/* v3→v4
e v5→v7) e foi fechado pelo bot ao detectar conflito com a refatoração
do ci.yml no PR #372.

Causa: o ignore semver-major existia só no ecosystem nuget; faltava no
github-actions. Esta correção fecha o gap simetricamente.

Majors de Actions ficam para PR manual — exigem revisão de release
notes (Node.js runtime, inputs deprecados, sintaxe nova) que não cabe
em bump em massa automatizado.
marmota-alpina added a commit that referenced this pull request May 10, 2026
Substitui os 6 PRs Dependabot abertos automaticamente após o merge da
config #369 — todos fechados sem merge por dois bloqueios estruturais:
gate org-member para bot (resolvido em #379) e lockfile drift transitivo
NU1004 com --locked-mode. Em vez de esperar nova rodada semanal, batch
manual regenera todos os 17 packages.lock.json via dotnet restore
--force-evaluate.

Directory.Packages.props
- WolverineFx + companion EFC/Postgresql/Kafka: 5.32.1 → 5.39.0 (7 minors)
- Microsoft.EntityFrameworkCore + companion InMemory/Relational/Design:
  10.0.5 → 10.0.7 (2 patches)
- Npgsql: 9.0.4 → 10.0.2 (major — validado via suite Outbox/Cascading
  completa: 71 testes integration Selecao + 10 Infra.Core, todos verdes)
- OpenTelemetry.Extensions.Hosting: 1.15.2 → 1.15.3 (alinha com Exporter
  já em 1.15.3 entregue na Story #30)
- Microsoft.NET.Test.Sdk: 18.3.0 → 18.5.1 (minor)
- Microsoft.AspNetCore.Mvc.Testing: 10.0.0 → 10.0.7 (patches)

.config/dotnet-tools.json
- dotnet-reportgenerator-globaltool: 5.5.4 → 5.5.10 (6 patches)

Validação
- dotnet restore --force-evaluate: 20 projetos restaurados sem NU1004
- dotnet build UniPlus.slnx: 0 warning, 0 error (TreatWarningsAsErrors)
- dotnet test UniPlus.slnx: 629 testes verdes, 0 falhas
  - 540 unit + arch
  - 8 Ingresso.IntegrationTests
  - 10 Infrastructure.Core.IntegrationTests (inclui OTel wiring E2E)
  - 71 Selecao.IntegrationTests (Outbox/Cascading com Wolverine 5.39 +
    EF Core 10.0.7 + Npgsql 10.0.2 reais via Testcontainers)

Closes #380
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

chore(infra): configurar auto-update de dependências NuGet (Renovate ou Dependabot)

2 participants