chore(shared): declarar pacotes NuGet OpenTelemetry para wiring#365
Conversation
Adiciona 5 PackageVersion centralizados em Directory.Packages.props + respectivos PackageReference em Infrastructure.Core.csproj. Lockfiles atualizados pelo restore. Pacotes adicionados: - OpenTelemetry.Exporter.OpenTelemetryProtocol 1.15.3 — gRPC OTLP para o Collector. 1.15.3 obrigatório: 1.15.2 carrega GHSA-4625-4j76-fww9 + GHSA-mr8r-92fq-pj8p (NU1902 como erro). - OpenTelemetry.Instrumentation.EntityFrameworkCore 1.15.1-beta.1 — única opção publicada (lib OTel ainda não estabilizou); prática estabelecida no ecossistema OTel .NET. - OpenTelemetry.Instrumentation.Http 1.15.1. - OpenTelemetry.Instrumentation.Runtime 1.15.1. - Serilog.Sinks.OpenTelemetry 4.2.0 — logs via OTLP até Loki, desbloqueia o sink que fecha a Story #105. Sem mudança de comportamento neste PR: pacotes apenas declarados, ainda não consumidos. Expansão de AdicionarObservabilidade + sink Serilog seguem no PR 2 da entrega da Story #30; wiring nos Program.cs + integration test seguem no PR 3. Refs #30, #105
jf2s
left a comment
There was a problem hiding this comment.
Revisão: PR #365 — chore(shared): declarar pacotes NuGet OpenTelemetry para wiring
Tipo de PR: mecânico (declaração de pacotes, sem mudança de comportamento)
Arquivos essenciais: Directory.Packages.props (+7 linhas) + Infrastructure.Core.csproj (+5 linhas)
Arquivos transitivos: 15 packages.lock.json atualizados pelo dotnet restore
Resumo
Primeiro PR da entrega da Story #30, alinhado com o plano de 3 PRs incrementais declarado no body da issue. Declara os pacotes NuGet que serão consumidos no PR 2 (expansão da extension) e PR 3 (wiring + integration test). Versões pinadas explicitamente, justificadas com comentários inline. CI verde nos 5 checks (build/test em 3m39s, sem warning).
Findings
Bloqueantes (0)
Nenhum. PR não altera comportamento — só declara dependências.
Importantes (0)
Nenhum. Build verde com TreatWarningsAsErrors, restore sem NU1902, CI 5/5.
Sugestões (2)
[S1] Renovate/Dependabot ausente — gap pré-existente que este PR amplifica
Confirmado via git ls-tree em main que o repo não tem .github/renovate.json nem .github/dependabot.yml. Este PR introduz o primeiro prerelease (-beta.1) declarado no Directory.Packages.props central — verificado com git grep que não havia precedente. Quando OpenTelemetry.Instrumentation.EntityFrameworkCore atingir GA (1.x.0 stable), não há mecanismo automático para alguém perceber e atualizar.
Não bloqueia este PR — é gap pré-existente da infra do repo. Recomendação: abrir issue follow-up para decidir Renovate vs Dependabot e a periodicidade. Ideal antes de o Serilog.Sinks.OpenTelemetry (que tem ciclo dev/release ativo) começar a atrasar.
[S2] Ordem dos PackageVersion no bloco "Logging & Observability" — cosmético
<PackageVersion Include=\"Serilog.AspNetCore\" Version=\"10.0.0\" />
<PackageVersion Include=\"Serilog.Sinks.OpenTelemetry\" Version=\"4.2.0\" />
<PackageVersion Include=\"OpenTelemetry.Extensions.Hosting\" Version=\"1.15.2\" />
…
<PackageVersion Include=\"OpenTelemetry.Instrumentation.EntityFrameworkCore\" Version=\"1.15.1-beta.1\" />Para ordem alfabética estrita, Serilog.Sinks.OpenTelemetry ficaria mais natural ao final do grupo Serilog (após Serilog.AspNetCore), mantendo todos os OpenTelemetry.* agrupados consecutivamente. Não justifica rework — apontamento puramente estilístico.
Pontos positivos
- Comentários inline contextuais e acionáveis — "1.15.3 obrigatório por GHSA-..." diz exatamente por que a versão diverge do trem; "EF instrumentation só publica como beta" justifica o prerelease sem reabrir debate em revisões futuras.
- Versões pinadas explicitamente — sem floating range; reproduzibilidade garantida.
- PR description completa com tabela de pacotes + justificativa por linha + decisões de fundo (ADR-0011 + ADR-0018 + por que Npgsql instrumentation foi excluído).
- Plano de 3 PRs declarado upfront — facilita review por escopo isolado e reduz risco de scope creep.
- Validação local rodada antes do push —
dotnet restore(passa sem NU1902) +dotnet build(0 warnings, 0 errors em 6.75s). - Resolução proativa de vulnerabilidade — descobriu o
NU1902na primeira tentativa (1.15.2), consultough api graphqlpara confirmar 1.15.3 como fix, atualizou e re-validou. Documentado no commit + PR.
Veredicto
APROVADO COM RESSALVAS
Sugestão [S1] é gap pré-existente que este PR não introduz mas amplifica — vira issue follow-up sem bloquear merge. Sugestão [S2] é puramente estilística. Nenhuma das duas justifica reabrir o PR.
PR está pronto para merge — aguardando apenas confirmação humana de que a issue follow-up de Renovate fica registrada antes do PR 2 começar a se acumular.
…trita Move OpenTelemetry.Exporter.OpenTelemetryProtocol antes de Extensions.Hosting (alfabeticamente E.E < E.H), e organiza as instrumentações EntityFrameworkCore/Http/Runtime em ordem alfabética dentro do trem 1.15.x. Comentários sobre 1.15.3 (NU1902) e beta da EF instrumentation seguem inline, agora ancorados no símbolo de fato relevante. Mesma reordenação aplicada em Infrastructure.Core.csproj. Sem mudança funcional — restore + build verdes (0 warning, 0 error). Refs #30
…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
Resumo
Primeiro PR da entrega da Story #30 (wiring OpenTelemetry nos
Program.cs). Declara emDirectory.Packages.propsos 5 pacotes NuGet que serão consumidos pelos PRs subsequentes — sem mudança de comportamento neste PR.Esta entrega segue o plano de 3 PRs incrementais descrito no body da própria #30:
chore(shared): declarar pacotes NuGet OpenTelemetry← este PR. Refs story(observability): wiring de OpenTelemetry nos Program.cs #30, story(observability): Serilog sink para Loki + service.name enrichment por ambiente #105feat(observability): expandir AdicionarObservabilidade + Serilog OTLP sink + correlation_id span— refs story(observability): wiring de OpenTelemetry nos Program.cs #30, story(observability): Serilog sink para Loki + service.name enrichment por ambiente #105, story(observability): propagar correlation_id como Activity span attribute #110feat(observability): wire nos 3 Program.cs + integration test— closes story(observability): wiring de OpenTelemetry nos Program.cs #30, story(observability): Serilog sink para Loki + service.name enrichment por ambiente #105, story(observability): propagar correlation_id como Activity span attribute #110Pacotes adicionados
OpenTelemetry.Exporter.OpenTelemetryProtocolGHSA-4625-4j76-fww9+GHSA-mr8r-92fq-pj8p(vulnerabilidades moderadas) e o repo trataNU1902como erroOpenTelemetry.Instrumentation.EntityFrameworkCoreOpenTelemetry.Instrumentation.HttpOpenTelemetry.Instrumentation.RuntimeSerilog.Sinks.OpenTelemetrydocker logsVersões alinhadas
Hosting + AspNetCore continuam em
1.15.2(last stable do trem core). Exporter foi para1.15.3por imposição doNU1902. As 2 instrumentações Http/Runtime ficam em1.15.1(não há1.15.2para essas duas). EF instrumentation segue o trem1.15.x-beta.1.Validação local
```bash
dotnet restore UniPlus.slnx # passa sem NU1902
dotnet build UniPlus.slnx # 0 warning / 0 error (TreatWarningsAsErrors)
```
Mudanças
Directory.Packages.props— 6 novas entradas (5 PackageVersion + 1 comentário sobre EF beta + 1 comentário sobre 1.15.3 obrigatório)src/shared/Unifesspa.UniPlus.Infrastructure.Core/Unifesspa.UniPlus.Infrastructure.Core.csproj— 5 novos PackageReferencepackages.lock.jsonatualizados pelodotnet restore(transitivo deInfrastructure.Coreem todos os projetos consumidores)Decisões de fundo
docs/adrs/0018-opentelemetry-para-instrumentacao-do-backend.mdPiiMaskingEnrichercontinua aplicado antes do sink OTLP no PR 2 (enrichers Serilog executam antes dos sinks por construção)OpenTelemetry.Instrumentation.Npgsql— EF Core instrumentation já cobre spans Postgres por baixo viaDbCommandeventsAspNetCoreainda não tem1.15.3publicadoRefs #30, #105