Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
162 commits
Select commit Hold shift + click to select a range
68b79ef
docs: remove all staging environment references (project has only dev…
Dec 14, 2025
0ba72ee
feat(health-checks): add business-specific health checks and UI dashb…
Dec 14, 2025
4027f8a
docs(roadmap): update Sprint 4 progress - health checks completed
Dec 14, 2025
a6f2db8
feat(health-checks): add business-specific health checks and UI dashb…
Dec 15, 2025
db02a20
docs(roadmap): update Sprint 4 progress - health checks completed
Dec 15, 2025
531feb0
feat(data-seeding): add ServiceCatalogs seed script
Dec 15, 2025
bb41691
refactor(seeding): separate essential domain data from test data
Dec 15, 2025
8555c4f
refactor(structure): reorganize seeds and automation into infrastructure
Dec 15, 2025
2b390cc
docs(roadmap): update Sprint 4 with final structure changes
Dec 15, 2025
7ef4523
docs(sprint4): add comprehensive TODO document for pending tasks
Dec 15, 2025
f88b0e5
chore: remove TODO document - implement instead of documenting
Dec 15, 2025
aece8eb
feat(health-checks): complete external services health checks and met…
Dec 15, 2025
2dd6cf5
docs(roadmap): mark Sprint 4 as COMPLETE - all health checks implemented
Dec 15, 2025
91bd063
Merge branch 'master' into feature/health-checks-seeding
Dec 15, 2025
fd9b7fa
refactor: address CodeRabbit review comments
Dec 15, 2025
0d8bda6
fix: correct NuGet package IDs and configuration keys
Dec 15, 2025
f6bac82
fix: revert to correct NuGet package ID AspNetCore.HealthChecks.Npgsql
Dec 15, 2025
9fadf0b
refactor: optimize health check package dependencies
Dec 15, 2025
6b733cf
fix: update IBGE API tests for /estados endpoint
Dec 15, 2025
6760abd
fix: regenerate package lock files for consistency
Dec 15, 2025
de99cc4
test: add missing HTTP mock for IBGE API in health check test
Dec 15, 2025
0d58baa
test: improve health check test assertions
Dec 15, 2025
54f094b
ci: add database environment variables for integration tests
Dec 15, 2025
32f47a8
refactor: apply DRY principle and fix mock isolation
Dec 15, 2025
3eea4ef
refactor: separate test execution in aspire-ci-cd workflow and improv…
Dec 15, 2025
83e5bbe
refactor: remove dynamic and reflection from health check tests
Dec 15, 2025
28a5b03
ci: fix CI issues - install Aspire workload and configure health chec…
Dec 15, 2025
6a1f662
fix: apply CodeRabbit suggestions and improve Aspire workload install…
Dec 15, 2025
1daa0b4
fix: external services health check should never return Unhealthy
Dec 15, 2025
a917b71
perf(ci): conditionally install Aspire workload only for integration …
Dec 15, 2025
a4e7442
fix: improve Aspire workload installation and health check endpoint f…
Dec 15, 2025
76b74fb
fix(tests): change HealthCheck_ShouldIncludeProvidersDatabase to vali…
Dec 15, 2025
adeaca1
ci: add detailed DCP binary verification with explicit path checks
Dec 15, 2025
ec371ad
fix(ci): copy improved Aspire workload installation to pr-validation …
Dec 15, 2025
c023061
fix: correct FluentAssertions syntax and nullability warning
Dec 15, 2025
424f6c8
refactor: remove trailing whitespace and improve health check test ro…
Dec 15, 2025
f093a44
fix(ci): remove deprecated Aspire workload installation - use NuGet p…
Dec 15, 2025
12d2573
fix(ci): correct YAML indentation and improve code quality
Dec 15, 2025
5a4e146
test: skip Aspire DCP tests and fix health check structure
Dec 15, 2025
9fd970c
refactor: apply CodeRabbit review suggestions
Dec 15, 2025
0659413
fix(e2e): disable external services health checks in E2E tests
Dec 15, 2025
31d116e
refactor: apply final CodeRabbit improvements
Dec 15, 2025
3622581
fix(e2e): accept 503 as valid response for readiness check in E2E tests
Dec 15, 2025
8d27a7a
fix: dispose HttpResponseMessage to prevent connection leaks in healt…
Dec 15, 2025
faacbc9
fix: compilation error and apply final CodeRabbit improvements
Dec 15, 2025
ebd5010
fix(ci): pin ReportGenerator to v5.3.11 for .NET 8 compatibility
Dec 15, 2025
284a329
fix(ci): use latest ReportGenerator with .NET 10 verification
Dec 15, 2025
3adfe20
fix(ci): set DOTNET_ROOT and add job timeouts to prevent hangs
Dec 16, 2025
8052cac
feat: add configurable health endpoint paths and CI improvements
Dec 16, 2025
6ce4667
fix: resolve CS1744 compilation error and apply remaining CodeRabbit …
Dec 16, 2025
7c289ea
fix: address CodeRabbit review and fix ReportGenerator DOTNET_ROOT issue
Dec 16, 2025
2c26c7b
fix: resolve DOTNET_ROOT detection and strengthen validation
Dec 16, 2025
e87dd42
fix: update lychee-action to v2.8.2 to resolve download error
Dec 16, 2025
de96402
fix: correct lychee-action version to v2.8.0 and document fixture usage
Dec 16, 2025
05e6b7f
fix: use lychee-action@v2 major version tag
Dec 16, 2025
c76c416
fix: correct ReportGenerator validation check
Dec 16, 2025
afe68ef
chore: update Aspire packages and suppress CS9113 warning
Dec 16, 2025
987cfeb
chore: apply CodeRabbit review suggestions
Dec 16, 2025
02e0d2f
feat: add Hangfire health check with tests
Dec 16, 2025
0503eaa
feat: enable STRICT_COVERAGE enforcement
Dec 16, 2025
83d5d7d
Merge branch 'master' into feature/health-checks-seeding
Dec 16, 2025
2be1482
fix: critical CI fixes and package casing corrections
Dec 16, 2025
9b3da6c
fix: remove Skip from DataSeeding tests and implement TODOs
Dec 16, 2025
999e1d3
fix: use EXECUTE...USING for parameterized DO block and fail fast in CI
Dec 16, 2025
c3fbba0
fix: address CodeRabbit review feedback on DataSeeding tests
Dec 16, 2025
8605b7a
fix: improve CI detection to use truthy value whitelist
Dec 16, 2025
dea2f28
fix: remove AspireIntegrationFixture dependency from DataSeeding tests
Dec 16, 2025
c15f7ec
fix: remove fail-fast CI logic and hardcode last schema interpolation
Dec 16, 2025
c12967d
fix: use NpgsqlConnectionStringBuilder to properly handle special cha…
Dec 16, 2025
a190dca
refactor(aspire): reorganize AppHost/ServiceDefaults structure and fi…
Dec 16, 2025
85abe72
security: remove hardcoded credentials and extract shared test helper
Dec 16, 2025
142221c
fix: enforce credential validation and snake_case naming consistency
Dec 16, 2025
629b660
fix: correct TestConnectionHelper method calls
Dec 16, 2025
be44c63
refactor(ApiService): reorganizar estrutura e melhorar organização de…
Dec 16, 2025
311d783
refactor: consolidar HostedServices e remover código de teste da prod…
Dec 16, 2025
db08289
refactor: implementar melhorias de code review
Dec 16, 2025
4d2c937
fix: corrigir teste de rate limiting para mensagem em português
Dec 16, 2025
58b45a4
fix: padronizar idiomas - logs em inglês, comentários em português
Dec 16, 2025
f5a4189
fix: corrigir compression providers e configuração Keycloak
Dec 16, 2025
f327c31
fix: atualizar teste GeographicRestrictionMiddleware para mensagem em…
Dec 16, 2025
5dfc46b
fix: corrigir problemas de integração de testes
Dec 16, 2025
3c644a6
fix: corrigir todos os problemas dos testes
Dec 16, 2025
630e066
fix: apply code review corrections and migrate integration tests to T…
Dec 17, 2025
805ed5d
refactor: improve HangfireHealthCheck verification and test quality
Dec 17, 2025
465104f
perf: optimize RateLimitingMiddleware and improve monitoring
Dec 17, 2025
6f62bc6
fix(ci): remove broken ReportGenerator version check
Dec 17, 2025
38efede
refactor(documents): reorganize module structure and improve code qua…
Dec 17, 2025
d671112
feat(Documents): Implement configurable MinimumConfidence and integra…
Dec 17, 2025
490777c
feat(Documents): Add migration control and handler documentation
Dec 17, 2025
ce7d4e9
refactor(Documents): Language standardization and IsTransientExceptio…
Dec 17, 2025
f28d7dd
refactor(Documents): Apply code review improvements
Dec 17, 2025
9a9b533
refactor(Documents): Apply additional code review improvements
Dec 17, 2025
ebdfd7d
refactor: Apply security and quality improvements from code review
Dec 17, 2025
253cf4b
refactor: Translate all Portuguese log messages to English
Dec 17, 2025
b1d40f7
refactor: Complete log message translation for remaining modules
Dec 17, 2025
f01b4da
refactor: Complete English log translation and code review improvements
Dec 17, 2025
4d127b6
refactor(locations): Implement comprehensive architectural improvements
Dec 17, 2025
1beed9e
fix: corrigir feedback do code review e traduzir comentários
Dec 17, 2025
32462c0
fix(ci): usar find case-insensitive para localizar pacote Aspire DCP
Dec 17, 2025
fcf365e
refactor(locations): criar camada API separada para consistência
Dec 17, 2025
f9ef646
fix: implementar correções completas do code review
Dec 17, 2025
17c25e4
fix(ci): usar build ao invés de restore para baixar pacotes Aspire DCP
Dec 17, 2025
2f0ef8c
fix(ci): forçar download explícito do pacote Aspire DCP via projeto t…
Dec 17, 2025
9f32366
fix(ci): remover trailing whitespace do workflow YAML
Dec 17, 2025
b596573
fix: padronizar mensagens de API para inglês e melhorar YAML lint
Dec 17, 2025
3371fbb
fix: atualizar assertions de testes para mensagens em inglês
Dec 17, 2025
cdbd77c
fix: reverter mensagens de API para português (user-facing)
Dec 17, 2025
b807b07
fix: corrigir seeding de allowed cities em testes de integracao
Dec 17, 2025
b70ce6b
refactor: padronizar estrutura do modulo Locations com outros modulos
Dec 17, 2025
27a1b86
docs: traduzir comentarios em ingles para portugues em Providers Valu…
Dec 17, 2025
bd82d17
refactor: mover Migrations para dentro de Persistence no modulo Provi…
Dec 17, 2025
855e31e
docs: remover CONFIGURATION.md redundante do modulo Providers
Dec 17, 2025
dc6d0d1
fix: corrigir testes de GeographicRestriction falhando em CI
Dec 17, 2025
5d845f7
refactor: reorganizar testes do modulo Providers
Dec 18, 2025
84858b5
refactor: eliminar duplicacoes e organizar testes de Queries vs Query…
Dec 18, 2025
8203938
fix: corrigir testes e endpoints conforme code review
Dec 18, 2025
5877834
refactor: implementar melhorias sugeridas no code review
Dec 18, 2025
ae451d1
fix: corrigir testes com mensagens de excecao em portugues
Dec 18, 2025
9a065f1
refactor: aplicar sugestoes do code review
Dec 18, 2025
af45c7c
fix: corrigir rotas e tratamento de excecoes do modulo Locations
Dec 18, 2025
3c615e8
refactor: aplicar melhorias de code review e corrigir mensagens de ex…
Dec 18, 2025
a840a8a
fix: corrigir configuracao da URL base do IBGE API no WireMock
Dec 18, 2025
40cce91
fix: adicionar diagnostico para ReportGenerator e escapar wildcards LIKE
Dec 18, 2025
5ae7e48
fix: usar GitHub Action oficial do ReportGenerator ao invés de instal…
Dec 18, 2025
e050f99
fix: migrar ci-cd.yml para GitHub Action oficial do ReportGenerator
Dec 18, 2025
fc76126
refactor: remover configuração obsoleta do DOTNET_ROOT
Dec 18, 2025
c0ab7ae
fix: corrigir issues apontados pelo code review
Dec 18, 2025
70a7a20
fix: configurar DOTNET_ROOT para ReportGenerator encontrar runtime .N…
Dec 18, 2025
ea129ac
fix: aplicar correções finais do code review
Dec 18, 2025
2d0ee0e
fix: validate-coverage deve usar relatório agregado do ReportGenerator
Dec 18, 2025
048b8a3
test: add GetCacheTags test for GetProvidersByIdsQuery
Dec 18, 2025
db96d4c
style: translate inline comment to Portuguese in GetProvidersByIdsQue…
Dec 18, 2025
f7ddc8b
test: add IsExpiredAt tests for Qualification value object
Dec 18, 2025
b55c379
test: add business logic tests and remove redundant tests
Dec 18, 2025
fd00f4a
refactor: improve test quality and add business logic tests
Dec 18, 2025
1bdd79c
test: add comprehensive business logic tests across modules
Dec 18, 2025
d01267e
refactor: improve test quality based on code review
Dec 18, 2025
16a5d8e
test: add tests for AddService and RemoveService command handlers
Dec 18, 2025
56156e7
refactor: finalize SearchProviders cleanup - translate comments and r…
Dec 18, 2025
23cac1c
feat: implement provider validation in DeleteServiceCommandHandler
Dec 18, 2025
9bc7b18
refactor: translate ServiceCatalogs Application comments to Portuguese
Dec 18, 2025
1feae97
docs: add comprehensive WithDescription to all ServiceCatalogs API en…
Dec 18, 2025
cd943fe
refactor: move Migrations folder inside Persistence
Dec 18, 2025
ee7513d
refactor: translate Infrastructure comments to Portuguese
Dec 18, 2025
e36f43c
fix: correct test IDs and translate error messages to Portuguese
Dec 18, 2025
d0f17ce
refactor: consolidate ServiceCatalogs integration tests into single file
Dec 18, 2025
f770cce
test: add ServiceCatalogsMappingExtensions tests and rename class
Dec 18, 2025
1686624
refactor(ServiceCatalogs): rename DtoMappingExtensions to ServiceCata…
Dec 18, 2025
7397c52
fix(Providers): translate user-facing error messages to Portuguese
Dec 18, 2025
8487805
refactor(Users): improve code organization and translations
Dec 18, 2025
c5c89e5
refactor(Users): remove unnecessary tests and code
Dec 18, 2025
7a50144
refactor(Users): resolve CA2000 warnings via .editorconfig
Dec 18, 2025
9c6d7d7
refactor(Users): resolve CA2000 pragmas via .editorconfig and transla…
Dec 18, 2025
6bd248b
chore: Remove orphaned .bru files and fix test assertions
Dec 18, 2025
0875c17
refactor(Authorization): Reorganize structure and improve organizatio…
Dec 18, 2025
ab58d5e
refactor(Authorization): Organize Authorization structure and fix com…
Dec 19, 2025
4815628
refactor(Shared): Massive cleanup and reorganization
Dec 19, 2025
16f0982
refactor(auth): migrate from Permission wrapper to EPermission enum
Dec 19, 2025
a861903
docs: add BusinessMetrics middleware alignment to technical debt and …
Dec 19, 2025
ca2b73a
docs: translate DapperConnection English comments to Portuguese
Dec 19, 2025
941f1fa
refactor: apply code review feedback and fix architecture test
Dec 19, 2025
413232c
docs: update health checks strategy - use Aspire native dashboard
Dec 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
13 changes: 9 additions & 4 deletions .github/actions/validate-coverage/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -134,15 +134,20 @@ runs:

COVERAGE_FILE=""
if [ -d "${{ inputs.coverage-directory }}" ]; then
# Try OpenCover format first
if OPENCOVER_FILE=$(find "${{ inputs.coverage-directory }}" -name "*.opencover.xml" -type f | head -1) && [ -n "$OPENCOVER_FILE" ]; then
# Priority 1: Try aggregated report first (generated by ReportGenerator)
if [ -f "${{ inputs.coverage-directory }}/aggregate/Cobertura.xml" ]; then
COVERAGE_FILE="${{ inputs.coverage-directory }}/aggregate/Cobertura.xml"
coverage_source="Cobertura (Aggregated)"
echo "📊 Using aggregated Cobertura report"
# Priority 2: Try OpenCover format
elif OPENCOVER_FILE=$(find "${{ inputs.coverage-directory }}" -name "*.opencover.xml" -type f | head -1) && [ -n "$OPENCOVER_FILE" ]; then
COVERAGE_FILE="$OPENCOVER_FILE"
coverage_source="OpenCover (Direct Analysis)"
# Then Cobertura format
# Priority 3: Try Cobertura format
elif COBERTURA_FILE=$(find "${{ inputs.coverage-directory }}" -name "*.cobertura.xml" -type f | head -1) && [ -n "$COBERTURA_FILE" ]; then
COVERAGE_FILE="$COBERTURA_FILE"
coverage_source="Cobertura (Direct Analysis)"
# Finally any XML file
# Priority 4: Finally any XML file
elif ANY_XML=$(find "${{ inputs.coverage-directory }}" -name "*.xml" -type f | head -1) && [ -n "$ANY_XML" ]; then
COVERAGE_FILE="$ANY_XML"
coverage_source="XML (Direct Analysis)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ nuget list EFCore.NamingConventions -PreRelease
1. Atualizar pacote via Dependabot PR
2. Executar suite completa de testes
3. Validar migrations existentes
4. Testar em staging antes de production
4. Testar localmente antes de production

## 📝 Notas Adicionais

Expand Down
2 changes: 1 addition & 1 deletion .github/issue-template/npgsql-10-stable-monitoring.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ Quando Npgsql 10.0.0 stable for lançado:
- [ ] Executar: `dotnet build`
- [ ] Executar: `dotnet test`
- [ ] Executar: `dotnet test --filter "Category=HangfireIntegration"`
- [ ] Validar em staging
- [ ] Validar localmente
- [ ] Atualizar documentação: remover TODOs sobre Npgsql
- [ ] Fechar Issue #42

Expand Down
69 changes: 59 additions & 10 deletions .github/workflows/aspire-ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,7 @@ name: MeAjudaAi CI Pipeline
paths:
- 'src/Aspire/**'
- '.github/workflows/aspire-ci-cd.yml'
pull_request:
branches: [master, develop]
paths:
- 'src/Aspire/**'
- '.github/workflows/aspire-ci-cd.yml'
# pull_request removed - pr-validation.yml handles PR validation to avoid duplication

permissions:
contents: read
Expand Down Expand Up @@ -97,7 +93,51 @@ jobs:
postgres-user: ${{ secrets.POSTGRES_USER || 'postgres' }}
postgres-password: ${{ secrets.POSTGRES_PASSWORD || 'test123' }}

- name: Run tests
- name: Run Architecture Tests
run: |
echo "🏛️ Running Architecture tests..."
dotnet test tests/MeAjudaAi.Architecture.Tests/ --no-build --configuration Release
echo "✅ Architecture tests passed"

- name: Prepare Aspire Integration Tests
run: |
echo "📦 Preparing .NET Aspire for integration tests..."
echo "ℹ️ Note: Aspire workload is deprecated in .NET 10 - using NuGet packages instead"

# Restore AppHost to download Aspire NuGet packages (includes DCP binaries)
echo "🔄 Restoring AppHost project to download Aspire packages..."
dotnet restore src/Aspire/MeAjudaAi.AppHost/MeAjudaAi.AppHost.csproj --verbosity normal

# Verify DCP binaries were downloaded (now located in NuGet package cache)
echo "🔎 Verifying DCP binaries in NuGet cache..."

# DCP binaries come from Aspire.Hosting.Orchestration NuGet package
DCP_LOCATIONS=(
"$HOME/.nuget/packages/aspire.hosting.orchestration.*/*/tools/dcp"
"$HOME/.nuget/packages/aspire.hosting.orchestration.*/*/tools/dcpctrl"
)

FOUND_DCP=false
for pattern in "${DCP_LOCATIONS[@]}"; do
if compgen -G "$pattern" > /dev/null; then
echo "✅ Found DCP binary: $(echo $pattern)"
FOUND_DCP=true
fi
done

if [ "$FOUND_DCP" = false ]; then
echo "⚠️ Warning: DCP binaries not found in expected locations"
echo "Searching NuGet cache for Aspire packages..."
find "$HOME/.nuget/packages" -type d -iname "*aspire*" -maxdepth 1 2>/dev/null || true
echo "ℹ️ Integration tests will attempt to run - DCP may be resolved at runtime"
else
echo "✅ Aspire DCP binaries verified in NuGet cache"
fi

# Set DOTNET_ROOT for SDK discovery
echo "DOTNET_ROOT=$HOME/.dotnet" >> $GITHUB_ENV

- name: Run Integration Tests
env:
ASPNETCORE_ENVIRONMENT: Testing
# Database configuration for tests that need it
Expand All @@ -112,12 +152,21 @@ jobs:
ConnectionStrings__Search: ${{ steps.db.outputs.connection-string }}
ConnectionStrings__meajudaai-db: ${{ steps.db.outputs.connection-string }}
run: |
echo "🧪 Running core test suite (excluding E2E)..."
# Run only Architecture and Integration tests - skip E2E tests for Aspire validation
dotnet test tests/MeAjudaAi.Architecture.Tests/ --no-build --configuration Release
echo "🔗 Running Integration tests..."
dotnet test tests/MeAjudaAi.Integration.Tests/ --no-build --configuration Release
echo "✅ Integration tests passed"

- name: Run Module Unit Tests
run: |
echo "📦 Running module unit tests..."
dotnet test src/Modules/Users/Tests/ --no-build --configuration Release
echo "✅ Core tests passed successfully"
echo "✅ Module tests passed"
Comment thread
frigini marked this conversation as resolved.

- name: Run Shared Unit Tests
run: |
echo "🔧 Running shared unit tests..."
dotnet test tests/MeAjudaAi.Shared.Tests/ --no-build --configuration Release
echo "✅ Shared tests passed"

# Validate Aspire configuration
aspire-validation:
Expand Down
57 changes: 45 additions & 12 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,23 @@ jobs:
- name: Build solution
run: dotnet build MeAjudaAi.slnx --configuration Release --no-restore

- name: Install Aspire workload
run: |
echo "📦 Installing .NET Aspire workload..."
dotnet workload update
# --skip-sign-check is required to install unsigned preview Aspire workloads
# in the ephemeral GitHub Actions environment. This flag bypasses signature
# verification which is acceptable for CI/CD only. Remove this flag when
# moving to signed/stable Aspire releases.
dotnet workload install aspire --skip-sign-check
echo "✅ Aspire workload installed"
echo "🔍 Verifying Aspire installation..."
dotnet workload list
# Verify DCP is available
if [ -d "$HOME/.dotnet/sdk-manifests" ]; then
find "$HOME/.dotnet" -name "dcp" -o -name "dcpctrl" 2>/dev/null || true
fi

Comment thread
frigini marked this conversation as resolved.
- name: Setup PostgreSQL connection
id: db
uses: ./.github/actions/setup-postgres-connection
Expand Down Expand Up @@ -141,6 +158,10 @@ jobs:
- name: Run integration tests
env:
ASPNETCORE_ENVIRONMENT: Testing
INTEGRATION_TESTS: true
MEAJUDAAI_DB_PASS: ${{ secrets.POSTGRES_PASSWORD || 'test123' }}
MEAJUDAAI_DB_USER: ${{ secrets.POSTGRES_USER || 'postgres' }}
MEAJUDAAI_DB: ${{ secrets.POSTGRES_DB || 'meajudaai_test' }}
ConnectionStrings__DefaultConnection: ${{ steps.db.outputs.connection-string }}
ConnectionStrings__Users: ${{ steps.db.outputs.connection-string }}
ConnectionStrings__Search: ${{ steps.db.outputs.connection-string }}
Expand Down Expand Up @@ -168,19 +189,31 @@ jobs:
dotnet test tests/MeAjudaAi.E2E.Tests/MeAjudaAi.E2E.Tests.csproj \
--configuration Release --no-build --verbosity normal

- name: Install ReportGenerator
run: dotnet tool install -g dotnet-reportgenerator-globaltool
- name: Configure DOTNET_ROOT for ReportGenerator
run: |
# ReportGenerator needs DOTNET_ROOT to find .NET runtime
if command -v dotnet >/dev/null 2>&1; then
DOTNET_PATH=$(which dotnet)
DOTNET_RESOLVED=$(readlink -f "$DOTNET_PATH")
export DOTNET_ROOT=$(dirname "$DOTNET_RESOLVED")
echo "DOTNET_ROOT=$DOTNET_ROOT" >> $GITHUB_ENV
echo "✅ Set DOTNET_ROOT: $DOTNET_ROOT"
fi

- name: Generate Code Coverage Report
run: |
reportgenerator \
-reports:"TestResults/Shared/**/coverage.cobertura.xml;TestResults/Architecture/**/coverage.cobertura.xml;TestResults/ApiService/**/coverage.cobertura.xml;TestResults/Users/**/coverage.cobertura.xml;TestResults/Documents/**/coverage.cobertura.xml;TestResults/Providers/**/coverage.cobertura.xml;TestResults/ServiceCatalogs/**/coverage.cobertura.xml;TestResults/Locations/**/coverage.cobertura.xml;TestResults/SearchProviders/**/coverage.cobertura.xml" \
-targetdir:"TestResults/Coverage" \
-reporttypes:"Html;Cobertura;JsonSummary" \
-assemblyfilters:"-*.Tests*;-*Test*;-*.Migrations.*;-*.Database;-*.Contracts" \
-classfilters:"-*.Migrations.*;-*.Database.*;-*.Contracts.*;-*.Metrics.*;-*.HealthChecks.*;-*.Jobs.Hangfire*;-*.Jobs.Configuration*;-*Program*;-*AppHost*;-*.ServiceDefaults*;-*.Keycloak.*;-*.Monitoring.*;-*NoOp*;-*RabbitMq*;-*ServiceBus*;-*Hangfire*;-*.Jobs.*;-*Options;-*BaseDesignTimeDbContextFactory*;-*SchemaPermissionsManager;-*SimpleHostEnvironment;-*CacheWarmupService;-*GeoPointConverter;-*ModuleNames;-*ModuleApiInfo;-*MessagingExtensions;-*ICacheableQuery"
# Note: Only UNIT test coverage is collected (Integration/E2E excluded for deterministic results)
# Excluded from coverage: Tests, Migrations, Database, Contracts, Metrics, Health Checks, Jobs, Program, AppHost, Keycloak, Monitoring, NoOp, RabbitMq, ServiceBus, Hangfire, Options, Design-time factories
uses: danielpalme/ReportGenerator-GitHub-Action@5
env:
DOTNET_ROOT: ${{ env.DOTNET_ROOT }}
with:
reports: 'TestResults/Shared/**/coverage.cobertura.xml;TestResults/Architecture/**/coverage.cobertura.xml;TestResults/ApiService/**/coverage.cobertura.xml;TestResults/Users/**/coverage.cobertura.xml;TestResults/Documents/**/coverage.cobertura.xml;TestResults/Providers/**/coverage.cobertura.xml;TestResults/ServiceCatalogs/**/coverage.cobertura.xml;TestResults/Locations/**/coverage.cobertura.xml;TestResults/SearchProviders/**/coverage.cobertura.xml'
targetdir: 'TestResults/Coverage'
reporttypes: 'Html;Cobertura;JsonSummary'
assemblyfilters: '-*.Tests*;-*Test*;-*.Migrations.*;-*.Database;-*.Contracts'
classfilters: '-*.Migrations.*;-*.Database.*;-*.Contracts.*;-*.Metrics.*;-*.HealthChecks.*;-*.Jobs.Hangfire*;-*.Jobs.Configuration*;-*Program*;-*AppHost*;-*.ServiceDefaults*;-*.Keycloak.*;-*.Monitoring.*;-*NoOp*;-*RabbitMq*;-*ServiceBus*;-*Hangfire*;-*.Jobs.*;-*Options;-*BaseDesignTimeDbContextFactory*;-*SchemaPermissionsManager;-*SimpleHostEnvironment;-*CacheWarmupService;-*GeoPointConverter;-*ModuleNames;-*ModuleApiInfo;-*MessagingExtensions;-*ICacheableQuery'
verbosity: 'Info'
tag: '${{ github.run_number }}_${{ github.run_id }}'
# Note: Only UNIT test coverage is collected (Integration/E2E excluded for deterministic results)
# Excluded from coverage: Tests, Migrations, Database, Contracts, Metrics, Health Checks, Jobs, Program, AppHost, Keycloak, Monitoring, NoOp, RabbitMq, ServiceBus, Hangfire, Options, Design-time factories

- name: Upload code coverage
uses: actions/upload-artifact@v6
Expand Down Expand Up @@ -212,7 +245,7 @@ jobs:
uses: actions/checkout@v6

- name: Check markdown links with lychee
uses: lycheeverse/lychee-action@v2.7.0
uses: lycheeverse/lychee-action@v2
with:
# Check all markdown files in the repository using config file
args: --config config/lychee.toml --verbose --no-progress "**/*.md"
Expand Down
Loading
Loading