on:
pull_request:
push:
branches:
- main
name: Test with Source Code Coverage
jobs:
test:
name: Test
env:
PROJECT_NAME_UNDERSCORE: feophant
CARGO_INCREMENTAL: 0
RUSTFLAGS: -Zinstrument-coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: nightly
override: true
- name: Cache dependencies
uses: actions/cache@v2
env:
cache-name: cache-dependencies
with:
path: |
~/.cargo/.crates.toml
~/.cargo/.crates2.json
~/.cargo/bin
~/.cargo/registry/index
~/.cargo/registry/cache
target
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('Cargo.lock') }}
- name: Generate test result and coverage report
run: |
rustup component add llvm-tools-preview
cargo install cargo2junit grcov;
cargo build --verbose
LLVM_PROFILE_FILE="your_name-%p-%m.profraw" cargo test -- -Z unstable-options --format json | cargo2junit > results.xml;
grcov . --binary-path ./target/debug/ -s . -t lcov --branch --ignore-not-existing --ignore "/*" -o lcov.info
- name: Upload test results
uses: EnricoMi/publish-unit-test-result-action@v1
with:
check_name: Test Results
github_token: ${{ secrets.GITHUB_TOKEN }}
files: results.xml
- name: Upload to CodeCov
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./lcov.info
fail_ci_if_error: true