name: Coverage
on:
push:
branches: [main]
permissions:
contents: write
jobs:
coverage:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install cargo-tarpaulin
run: cargo install cargo-tarpaulin
- name: Run tests with coverage
run: cargo tarpaulin --out json --output-dir target/coverage
- name: Extract coverage percentage
id: coverage
run: |
COVERAGE=$(cat target/coverage/tarpaulin-report.json | jq '.coverage')
echo "percentage=$COVERAGE" >> $GITHUB_OUTPUT
echo "Coverage: $COVERAGE%"
- name: Generate coverage badge
uses: ozankasikci/rust-test-coverage-badge@v1
with:
coverage: ${{ steps.coverage.outputs.percentage }}
output: assets/coverage.svg
commit: true