name: Coverage
on:
push:
branches: [ main, devel ]
paths-ignore:
- "**.md"
- "docs/**"
pull_request:
branches: [ main, devel ]
paths-ignore:
- "**.md"
- "docs/**"
workflow_dispatch:
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
coverage:
name: Coverage
runs-on: [self-hosted, linux]
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Install clang and build tools
run: |
sudo apt-get update
sudo apt-get install -y clang libclang-dev pkg-config
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: wasm32-unknown-unknown
- name: Setup cache
uses: Swatinem/rust-cache@v2
- name: Install wasm32 target
run: |
rustup target add wasm32-unknown-unknown
rustup +nightly-2025-09-20 target add wasm32-unknown-unknown
- name: Run cargo check
run: cargo check
- name: Generate code coverage
run: |
cargo install cargo-llvm-cov grcov
make coverage
- name: Import Codecov CLI verification key
env:
CODECOV_PGP_FINGERPRINT: "27034E7FDB850E0BBC2C62FF806BB28AED779869"
run: |
curl -fsSL https://keybase.io/codecovsecops/pgp_keys.asc -o codecov.asc
fingerprint="$(gpg --show-keys --with-colons codecov.asc | awk -F: '/^fpr:/ { print $10; exit }')"
test "$fingerprint" = "$CODECOV_PGP_FINGERPRINT"
gpg --import codecov.asc
- name: Upload to codecov.io
uses: codecov/codecov-action@v7.0.0
with:
files: ./lcov.info
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
- name: Archive code coverage results
uses: actions/upload-artifact@v7
with:
name: code-coverage-report
path: cobertura.xml