name: Rust
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
env:
CARGO_TERM_COLOR: always
jobs:
test:
name: Build and test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry and build
uses: Swatinem/rust-cache@v2
- name: Build (no default features)
run: cargo build --verbose
- name: Build (all features)
run: cargo build --all-features --verbose
- name: Run tests (all features)
run: cargo test --all-features --verbose
- name: Check benchmarks compile
run: cargo bench --no-run
coverage:
name: Code coverage
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry and build
uses: Swatinem/rust-cache@v2
- name: Install cargo-tarpaulin
run: cargo install cargo-tarpaulin --locked
- name: Generate code coverage report
run: >
cargo tarpaulin
--verbose
--workspace
--all-features
--timeout 300
--out Xml
--exclude-files 'src/main.rs'
- name: Upload coverage report to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false