This GitHub Action collects and aggregates code coverage data with the grcov tool.
on: [push]
name: Code Coverage
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- uses: actions-rs/cargo@v1
with:
command: test
args: --all-features --no-fail-fast
env:
CARGO_INCREMENTAL: '0'
RUSTFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests'
RUSTDOCFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests'
- uses: alekitto/[email protected]
-
As
grcov
works with coverage data generated by the unstable-Z profile
feature, you need to installnightly
toolchain, for example, with theactions-rs/toolchain
Action:- uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true
-
It is strongly recommended to call
cargo clean
command if any ofcargo check
,cargo build
,cargo test
or other similar commands were executed already in this workspace.- uses: actions-rs/cargo@v1 with: command: clean
-
Create a configuration file for
grcov
, see config section for details. -
Execute the
cargo test
command. It is required to addCARGO_INCREMENTAL
,RUSTFLAGS
andRUSTDOCFLAGS
environment variables for this command, see grcov page for details.- uses: actions-rs/cargo@v1 with: command: test args: --all-features --no-fail-fast # Customize args for your own needs env: CARGO_INCREMENTAL: '0' RUSTFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests' RUSTDOCFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests'
Note that
-Clink-dead-code
flag might be broken for macOS environments, see #63047 -
Add the
actions-rs@grcov
Action to the workflow.- id: coverage uses: alekitto/[email protected]
-
After the successful execution,
actions-rs@grcov
will set an Action output calledreport
with an absolute path to the coverage report file.This file can be uploaded to any code coverage service, ex. with codecov or coveralls Actions help:
- name: Coveralls upload uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} path-to-lcov: ${{ steps.coverage.outputs.report }}
config
: Configuration file path (relative to repository root, default to.github/actions-rs/grcov.yml
)
report
: Absolute path to the report file
grcov
execution can be tuned with the configuration file.
By default this Action tries to load it from the .github/actions-rs/grcov.yml
path
(relative to the repository root directory); you can change file location with the config
input, ex.
- uses: alekitto/[email protected]
with:
config: configs/grcov.yml
If configuration file is missing, default values will be used by the grcov
.
All possible keys in the config are optional and directly mapped
to the grcov flags and options.
Note that not all parameters can be changed via this file, see example below
for config file format and available options.
branch: true
ignore-not-existing: true
llvm: true
filter: covered
output-type: lcov
output-path: ./lcov.info
prefix-dir: /home/user/build/
ignore:
- "/*"
- "C:/*"
- "../*"
path-mapping:
- "/path1"
- "/path2"
-
Coveralls Action is expecting
LCOV
format, do not use thecoveralls
orcoveralls+
output type for thegrcov
.
Instead, set theoutput-type
config value tolcov
. -
Generated report file is stored in the temporary directory by default, which might not be accessible by the Docker-based Actions, such as codecov.
Consider either mount it as a Docker volume or use theoutput-path
option in the config to store report in the path accessible by container.