refquiem 0.3.0

A cargo requiem for the refs your Rust code left behind
Documentation
---
name: Coverage

"on":
  pull_request:
  push:
    branches:
      - main

permissions:
  contents: read

concurrency:
  group: coverage-${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always

jobs:
  coverage:
    name: Test coverage
    runs-on: ubuntu-26.04
    timeout-minutes: 45
    # Fork and Dependabot runs cannot read CODECOV_TOKEN.
    if: >-
      github.event_name == 'push' ||
      (github.event.pull_request.head.repo.full_name == github.repository &&
      github.event.pull_request.user.login != 'dependabot[bot]')
    steps:
      - uses: actions/checkout@v7

      - name: Cache cargo downloads
        uses: actions/cache@v6
        with:
          path: |
            ~/.cargo/registry/index
            ~/.cargo/registry/cache
            ~/.cargo/git/db
          key: dl-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            dl-${{ runner.os }}-

      - name: Install nightly with LLVM coverage
        run: |
          rustup toolchain install nightly \
            --profile minimal \
            --component llvm-tools-preview

      - name: Install cargo-llvm-cov
        run: cargo install cargo-llvm-cov --locked

      # xtask is a maintainer tool the vocab job checks by regenerating data/, no test runs it.
      - name: Test coverage
        run: cargo +nightly llvm-cov --workspace --exclude xtask --lcov --output-path lcov.info

      - name: Upload to Codecov
        uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: lcov.info
          fail_ci_if_error: true