diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 49c6d70..422f001 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -17,11 +17,29 @@ jobs: dotnet-version: '9.0.x' - name: Restore packages - run: nuget restore + run: dotnet restore + + - name: Restore tools + run: dotnet tool restore - name: Build run: dotnet build -c Release + - name: Capture Coverage + shell: pwsh + run: | + dotnet test --collect:"XPlat Code Coverage" + $coverageFiles = Get-ChildItem -Path . -Recurse -Filter coverage.cobertura.xml + $coveragePaths = $coverageFiles | ForEach-Object { $_.FullName } + $reportsArg = '"' + ($coveragePaths -join ";") + '"' + dotnet tool run reportgenerator -reports:$reportsArg "-targetdir:coverage-report" "-filefilters:-*.g.cs" "-reporttypes:$reportType" + + - name: Upload Coverage report + uses: actions/upload-artifact@v4 + with: + name: coverage-report + path: coverage-report + - name: Mutation testing run: | dotnet tool restore diff --git a/AtemSharp.Tests/AtemSharp.Tests.csproj b/AtemSharp.Tests/AtemSharp.Tests.csproj index 314657f..a207265 100644 --- a/AtemSharp.Tests/AtemSharp.Tests.csproj +++ b/AtemSharp.Tests/AtemSharp.Tests.csproj @@ -9,7 +9,10 @@ - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/Run-Coverage.ps1 b/Run-Coverage.ps1 new file mode 100644 index 0000000..3f2d775 --- /dev/null +++ b/Run-Coverage.ps1 @@ -0,0 +1,37 @@ +# Remove old reports +Get-ChildItem -Path . -Recurse -Filter coverage.cobertura.xml | Remove-Item + +# Stop the script immediately on any error +$ErrorActionPreference = "Stop" + +# Run tests with coverage collection +dotnet test --collect:"XPlat Code Coverage" + +# Find the latest coverage.cobertura.xml file under TestResults +$coverageFiles = Get-ChildItem -Path . -Recurse -Filter coverage.cobertura.xml + +if ($coverageFiles.Count -eq 0) { + Write-Error "No coverage report files found!" + exit 1 +} + +# Collect full paths of all coverage files +$coveragePaths = $coverageFiles | ForEach-Object { $_.FullName } + +# Join paths with semicolon (and quote the whole string for safety) +$reportsArg = '"' + ($coveragePaths -join ";") + '"' + +# Build the report output path +$targetDir = "coverage-report" +$reportType = "Html" + +# Generate combined HTML report +dotnet tool restore +dotnet tool run reportgenerator ` + -reports:$reportsArg ` + "-targetdir:$targetDir" ` + "-filefilters:-*.g.cs" ` + "-reporttypes:$reportType" + +New-Item -Path "$targetDir" -Name ".gitignore" -ItemType "File" -Value "*" -Force +Write-Host "Coverage report written to coverage-report\index.html"