diff --git a/.github/workflows/BuildAndTestOnPullRequests.yml b/.github/workflows/BuildAndTestOnPullRequests.yml
index b995b1dc..a089c652 100644
--- a/.github/workflows/BuildAndTestOnPullRequests.yml
+++ b/.github/workflows/BuildAndTestOnPullRequests.yml
@@ -15,12 +15,44 @@ jobs:
- name: Install dependencies
run: dotnet restore
- - name: Build Stateless solution
+ - name: Build Stateless solution (signed for distribution)
run: dotnet build Stateless.sln --configuration Release --no-restore
- - name: Test Stateless
- run: dotnet test --no-restore --no-build --configuration Release
+ - name: Build for coverage analysis (public signed, single target)
+ run: dotnet build src\Stateless\Stateless.csproj --configuration Release --no-restore -p:PublicSign=true -p:TargetFramework=net8.0 -o src\Stateless\bin\Coverage
+ - name: Build test project for coverage (public signed)
+ run: dotnet build test\Stateless.Tests\Stateless.Tests.csproj --configuration Release --no-restore -p:PublicSign=true -p:TargetFramework=net8.0 -o test\Stateless.Tests\bin\Coverage
+
+ - name: Test with coverage (xUnit, Cobertura)
+ run: dotnet test test\Stateless.Tests\bin\Coverage\net8.0\Stateless.Tests.dll --configuration Release --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=Cobertura
+
+ - name: Install ReportGenerator
+ run: dotnet tool install -g dotnet-reportgenerator-globaltool
+
+ - name: Generate coverage report
+ run: |
+ reportgenerator -reports:"**/coverage.cobertura.xml" -targetdir:"coveragereport" -reporttypes:"MarkdownSummaryGithub;Html;Badges"
+
+ - name: Append coverage to job summary
+ if: always()
+ run: |
+ $SUMMARY_FILE = "${{ github.workspace }}/coveragereport/SummaryGithub.md"
+ if (Test-Path $SUMMARY_FILE) {
+ Get-Content $SUMMARY_FILE | Add-Content $env:GITHUB_STEP_SUMMARY
+ } else {
+ "Coverage summary not found at $SUMMARY_FILE" | Add-Content $env:GITHUB_STEP_SUMMARY
+ }
+
+ - name: Upload coverage artifact
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: coverage-report
+ path: coveragereport
+ if-no-files-found: warn
+ retention-days: 7
+
- name: Pack alpha version
if: github.ref == 'refs/heads/dev' && github.event_name == 'push' && github.repository == 'dotnet-state-machine/stateless'
run: dotnet pack src\Stateless\Stateless.csproj --version-suffix dev-${{github.run_id}} --configuration Release
diff --git a/test/Stateless.Tests/Stateless.Tests.csproj b/test/Stateless.Tests/Stateless.Tests.csproj
index 2eed06a8..2665f5f1 100644
--- a/test/Stateless.Tests/Stateless.Tests.csproj
+++ b/test/Stateless.Tests/Stateless.Tests.csproj
@@ -24,6 +24,7 @@
+