diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 00000000..f9c9ccf5 --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,49 @@ +name: Code Coverage +# This job runs unit tests and generates a code coverage report. +# The report is stored as artifact, and uploaded to Codecov. + +on: + # workflow_dispatch: {} # temporarily enable the workflow for manual runs + pull_request: + branches: + - main + push: + branches: + - main + +jobs: + coverage: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch all history for all tags and branches + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 8.0.x + - name: Restore dependencies --verbosity quiet + run: dotnet restore + - name: Add AltCover package to test project + run: dotnet add ./Ical.Net.Tests/Ical.Net.Tests.csproj package AltCover + + - name: Build + run: dotnet build --no-restore --configuration Release -p:nowarn=1591 + - name: Test + run: dotnet test --no-build --configuration Release --verbosity quiet /p:AltCover=true /p:AltCoverXmlReport="coverage.xml" /p:AltCoverStrongNameKey="../IcalNetStrongnameKey.snk" /p:AltCoverAssemblyExcludeFilter="Ical.Net.Tests|NUnit3.TestAdapter|AltCover" /p:AltCoverAttributeFilter="ExcludeFromCodeCoverage" /p:AltCoverLineCover="false" + + - name: Store coverage report as artifact + uses: actions/upload-artifact@v4 + with: + name: coverage-report + path: ./Ical.Net.Tests/coverage.*.xml # store all coverage reports + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + with: + # files: automatically finds all in ./Ical.Net.Tests/ + name: coverage + token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: false diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 00000000..48de2da7 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,17 @@ +coverage: + precision: 0 # no decimals + round: nearest # round up/down + range: "80...100" + + status: + project: # show status on project level + default: + target: 80 # Set the target coverage percentage + patch: # show status on patch level + default: + target: 80 # minimum coverage for successful commit + +comment: + layout: "reach, diff, flags, files" + behavior: default + require_changes: true # Only comment if there are changes in coverage