Skip to content

chore(backend): atualizar dependências para a última versão estável (xUnit v3, Aspire 13.6 com CLI bundle) - #162

Merged
evertonschuster merged 2 commits into
mainfrom
chore/backend-deps-upgrade
Oct 4, 2026
Merged

evertonschuster merged 2 commits into
mainfrom
chore/backend-deps-upgrade

Conversation

@evertonschuster

@evertonschuster evertonschuster commented Oct 4, 2026 •

Copy link
Copy Markdown
Owner

O que muda

Atualiza todas as dependências do backend para a última versão estável. Nenhuma preview, conforme a ADR 0032.

Item De Para
.NET SDK (global.json) 10.0.302 10.0.401
Pacotes .NET 10 (EF Core, ASP.NET Core, Identity, JwtBearer, OpenApi, Microsoft.Extensions.*, InMemory) e dotnet-ef 10.0.11 10.0.12
Microsoft.Extensions.Http.Resilience / ServiceDiscovery 10.9.0 10.10.0
Aspire (Aspire.Hosting.* e Aspire.AppHost.Sdk, que estava esquecido em 13.4.6) 13.5.3 13.6.0
OpenTelemetry 1.18.0 1.19.x
OpenIddict 7.6.0 7.7.1
Scalar.AspNetCore 2.17.1 2.17.13
coverlet.msbuild / Microsoft.NET.Test.Sdk 10.0.1 / 18.9.0 10.1.0 / 18.10.1
xUnit xunit 2.9.3 (fim da linha v2) xunit.v3.mtp-off 4.0.1

Também saiu do AppHost um VersionOverride que só repetia a versão central.

Não atualizados, de propósito:

  • Microsoft.OpenApi fica em 2.12.2, porque o Microsoft.AspNetCore.OpenApi 10.0.12 ainda exige [2.12.0, 3.0.0). A trava da ADR 0032 continua valendo.
  • OpenIddict 8, Npgsql 11 e .NET 11 só existem em preview/RC.

Npgsql, FluentValidation, Asp.Versioning, AwesomeAssertions, NSubstitute e o xunit.runner.visualstudio já estavam na última versão.

Mudanças que não são só trocar a versão (ADR 0050)

xUnit v3 rodando sobre VSTest. O pacote padrão do v3 traz o Microsoft.Testing.Platform v2, que não roda com o dotnet test em modo VSTest. O gate de cobertura (coverlet.msbuild) e o --logger trx do CI dependem desse modo. Por isso usei a variante oficial xunit.v3.mtp-off. No Directory.Build.props, os projetos *Tests passaram a ser executáveis (OutputType=Exe), como o v3 exige. Migrar para o MTP fica para um PR próprio.

Analisador xUnit1051 ativo. As 92 chamadas de teste que aceitam CancellationToken agora passam TestContext.Current.CancellationToken. É por isso que aparecem 15 arquivos de teste no diff, todos com mudança de uma linha.

CLI bundle do Aspire (AspireUseCliBundle=true). O Aspire 13.6 avisa (ASPIRE010) que os pacotes NuGet de dashboard e DCP serão descontinuados. Em vez de suprimir o aviso, o AppHost adota o bundle:

  • Build: busca a CLI, o dashboard e o DCP via dotnet dnx em ~/.aspire. São cerca de 360 MB na primeira vez, e precisa de internet. Ninguém precisa instalar nada.
  • dotnet run --project backend/AppHost --launch-profile http: continua sendo o comando, mas agora delega para aspire run.
  • F5 do Visual Studio: continua executando o AppHost.exe direto, com os caminhos do bundle gravados no build.

api-contract-check passa a compilar e rodar em Debug. O aspire run não aceita configuração e sempre executa o build Debug. Com -c Release --no-build, o job falhava procurando bin/Debug/net10.0/AppHost.exe; reproduzi isso localmente antes de corrigir.

No final não sobra nenhum NoWarn no backend.

Como foi verificado

  • Build e testes: dotnet build backend/AdminBackend.slnx -c Release sem avisos. dotnet test passou nos 480 testes, com a mesma cobertura de antes (Identity 90,09%, Services 95,2%, SharedKernel 86,43%). Confirmei que o gate ainda reprova abaixo do limite (-p:Threshold=99) e que o TRX é gerado.

  • Migrações: dotnet ef migrations has-pending-model-changes não encontrou mudança pendente nos dois serviços, então não há migração neste PR.

  • Serviços isolados: identity e services rodaram sobre um Postgres descartável na porta 5433. generate:api-types:check deu tipos idênticos, smoke_oidc_contract.py passou e o Playwright passou em 4/4.

  • AppHost com o bundle: testei três caminhos, cada um com seus checks:

    • pelo README: tipos idênticos, smoke OIDC ok, Playwright 4/4;
    • com os comandos novos do CI: os mesmos três checks;
    • executando o AppHost.exe direto, como o F5 do Visual Studio faz: smoke OIDC ok.

    Os três usaram um volume Postgres temporário, sem tocar no agenza-postgres-data. Depois restaurei o AppHost.cs e removi o volume.

Para o revisor

  • Não verificado em Linux: o download do bundle via dnx no CI. Todo job que compila a solução (backend-ci, codeql, sonar) agora baixa o bundle no lugar dos pacotes NuGet de dashboard/DCP. O CI deste PR é a prova.
  • Debug obrigatório: não dá mais para rodar o AppHost a partir de um build Release pelo dotnet run.
  • Histórico: o branch tem dois commits. O primeiro (asd) é a rodada inicial, que usava NoWarn; o segundo remove as supressões. Vale fazer squash no merge.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Chores

    • Updated the development and CI setup to use the current .NET SDK and Aspire launch workflow.
  • Tests

    • Updated automated tests for the current testing framework and improved cancellation handling during asynchronous test operations.
  • Documentation

    • Clarified local setup requirements and added guidance on the updated development workflow.

evertonschuster and others added 2 commits October 4, 2026 16:24
Remove as duas supressões que a atualização de pacotes tinha introduzido
e resolve as causas.

- xUnit1051 volta a valer: as 92 chamadas de teste que aceitam
  CancellationToken passam TestContext.Current.CancellationToken
  (DeserializeAsync com argumento nomeado, o token é o 3º parâmetro).
- ASPIRE010: o AppHost adota AspireUseCliBundle=true. O build obtém CLI,
  dashboard e DCP via `dotnet dnx` em ~/.aspire; `dotnet run` delega para
  `aspire run`; o F5 do Visual Studio segue executando o AppHost.exe com os
  caminhos do bundle gravados no build.
- A CLI sempre executa o build Debug (`aspire run` não aceita
  configuração), então o api-contract-check passa a compilar e rodar em
  Debug — com -c Release ele falhava procurando bin/Debug/AppHost.exe.
- ADR 0050 reescrita (renomeada para ...-aspire-cli-bundle) e nota no
  MONOREPO.md sobre o download na primeira execução.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 4, 2026

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 2f416a7f-7885-4cdb-a045-505e11a8a414
📥 Commits

Reviewing files that changed from the base of the PR and between 8ef07ac and 68e6d27.

📒 Files selected for processing (29)
  • .github/workflows/frontend-ci.yml
  • apps/admin-frontend/specs/001-oidc-shell-scaffold/quickstart.md
  • backend/.config/dotnet-tools.json
  • backend/AppHost/AppHost.csproj
  • backend/Directory.Build.props
  • backend/Directory.Packages.props
  • backend/global.json
  • backend/services/identity-service/IdentityService.Tests/IdentityService.Tests.csproj
  • backend/services/services-service/ServicesService.PersistenceTests/AuditableEntitySaveChangesInterceptorTests.cs
  • backend/services/services-service/ServicesService.PersistenceTests/ClientPersistenceTests.cs
  • backend/services/services-service/ServicesService.PersistenceTests/ServicesDataContextTenantScopingTests.cs
  • backend/services/services-service/ServicesService.PersistenceTests/ServicesService.PersistenceTests.csproj
  • backend/services/services-service/ServicesService.Tests/Categories/CreateCategory/CreateCategoryCommandValidatorTests.cs
  • backend/services/services-service/ServicesService.Tests/Categories/DeleteCategory/DeleteCategoryCommandValidatorTests.cs
  • backend/services/services-service/ServicesService.Tests/Categories/UpdateCategory/UpdateCategoryCommandValidatorTests.cs
  • backend/services/services-service/ServicesService.Tests/Clients/CreateClient/CreateClientCommandValidatorTests.cs
  • backend/services/services-service/ServicesService.Tests/Services/CreateService/CreateServiceCommandValidatorTests.cs
  • backend/services/services-service/ServicesService.Tests/Services/DeleteService/DeleteServiceCommandValidatorTests.cs
  • backend/services/services-service/ServicesService.Tests/Services/UpdateService/UpdateServiceCommandValidatorTests.cs
  • backend/services/services-service/ServicesService.Tests/ServicesService.Tests.csproj
  • backend/services/services-service/ServicesService.Tests/Tags/CreateTag/CreateTagCommandValidatorTests.cs
  • backend/services/services-service/ServicesService.Tests/Tags/DeleteTag/DeleteTagCommandValidatorTests.cs
  • backend/services/services-service/ServicesService.Tests/Tags/UpdateTag/UpdateTagCommandValidatorTests.cs
  • backend/shared/Admin.SharedKernel.Tests/Admin.SharedKernel.Tests.csproj
  • backend/shared/Admin.SharedKernel.Tests/DispatcherTests.cs
  • backend/shared/Admin.SharedKernel.Tests/GenericExceptionHandlerTests.cs
  • docs/MONOREPO.md
  • docs/adr/0050-xunit-v3-on-vstest-and-aspire-cli-bundle.md
  • docs/adr/README.md
 ________________________________________________
< Press W-A-S-D to move me around your codebase. >
 ------------------------------------------------
  \
   \   \
        \ /\
        ( )
      .( o ).
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@evertonschuster
evertonschuster merged commit 0e3b9e3 into main Oct 4, 2026
16 of 17 checks passed
@evertonschuster
evertonschuster deleted the chore/backend-deps-upgrade branch October 4, 2026 20:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant