Skip to content

Commit

Permalink
chore: add code coverage report
Browse files Browse the repository at this point in the history
Generate a code coverage report and add it as artifact as well as
uploading it to CodeCov.

The coverage instrumentation needs at least Rust 1.60, hence the
rust-toolchain was updated to that version.
  • Loading branch information
vmx committed Apr 26, 2022
1 parent 221f682 commit 24dc71f
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 1 deletion.
61 changes: 61 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,64 @@ jobs:
BUILD_FIL_NETWORK: ${{ matrix.network }}
run: |
cargo run -- -o output/builtin-actors.car
coverage:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CARGO_INCREMENTAL: 0
CACHE_SKIP_SAVE: ${{ matrix.push == '' || matrix.push == 'false' }}
steps:
- name: Checking out
uses: actions/checkout@v2
- name: Install Rust toolchain
uses: ./.github/actions/rust-cargo-run
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
command: version
components: llvm-tools-preview
- name: Put LLVM tools into the PATH
run: echo "${HOME}/.rustup/toolchains/$(cat rust-toolchain)-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin" >> $GITHUB_PATH
- name: Install demangler
run: cargo install rustfilt
- name: Create coverage report
env:
# Incremental build is not supported when profiling.
CARGO_INCREMENTAL: 0
# Make sure that each run of an executable creates a new profile file,
# with the default name they would override each other.
LLVM_PROFILE_FILE: "%m.profraw"
# -Cinstrument-coverage: enable llvm coverage instrumentation
# -Ccodegen-units=1: building in parallel is not supported when profiling
# -Copt-level=0: disable optimizations for more accurate coverage
# -Coverflow-checks=off: checking for overflow is not needed for coverage reporting
# -Cinline-threshold=0: do not inline
# For code coverage the `-Clink-dead-code` flag should be set, as dead
# code should be considered as not covered code. Though this would make
# the build fail, hence it is not set.
RUSTFLAGS: -Cinstrument-coverage -Ccodegen-units=1 -Copt-level=0 -Coverflow-checks=off -Cinline-threshold=0
run: cargo test --workspace --exclude fil_builtin_actors_bundle
- name: Merge profiling data
# Do *not* use sparse output. It leads to more lines that are not taken
# into account at all
run: llvm-profdata merge --output=default.profdata $(find . -name '*.profraw')
- name: Create HTML coverage report
# The compiled files contain the coverage information. From running the
# tests we don't know what those files are called, hence use all files
# from the `./target/debug/deps` directory which don't have an extension.
run: |
OBJECT_OPTIONS=($(find ./target/debug/deps/* -name '*' -not -name '*\.*' -printf ' --object %p'))
# Create HTML report of this project, we don't care about coverage of
# dependencies
llvm-cov show --Xdemangler=rustfilt --show-expansions --show-line-counts-or-regions --ignore-filename-regex=".cargo|.rustup|/rustc|./tests/" --format=html --output-dir=./llvm-show --instr-profile=default.profdata ${OBJECT_OPTIONS[@]}
# Create file to be uploaded to codecov
llvm-cov export --ignore-filename-regex=".cargo|.rustup|/rustc|./tests" --format=lcov --instr-profile=default.profdata ${OBJECT_OPTIONS[@]} > lcov.info
- name: Archive code coverage results
uses: actions/upload-artifact@v3
with:
name: code-coverage-report
path: llvm-show/*
- name: Upload coverage to Codecov
uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
with:
files: lcov.info
2 changes: 1 addition & 1 deletion rust-toolchain
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.59.0
1.60.0

0 comments on commit 24dc71f

Please sign in to comment.