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_percentage')
echo "percentage=$COVERAGE" >> $GITHUB_OUTPUT
echo "Coverage: $COVERAGE%"
- name: Build coverage-badge
run: cargo build --release
- name: Generate badge
run: ./target/release/coverage-badge -c ${{ steps.coverage.outputs.percentage }} -o assets/coverage.svg
- name: Commit badge
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add assets/coverage.svg
git diff --staged --quiet || git commit -m "Update coverage badge"
git push