diff --git a/.github/workflows/qc.yaml b/.github/workflows/qc.yaml index 39e71b7..605f0aa 100644 --- a/.github/workflows/qc.yaml +++ b/.github/workflows/qc.yaml @@ -194,19 +194,17 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - run: rustup default nightly - run: rustup component add llvm-tools-preview - run: | cargo install cargo-llvm-cov || true - cargo llvm-cov \ - --workspace\ - --all-features \ - --lcov \ - --output-path coverage.lcov + cargo install grcov || true + ./coverage_report.sh # If using tarapulin #- run: cargo install cargo-tarpaulin #- run: cargo tarpaulin --out Xml - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v5 with: - files: ./coverage.lcov + files: ./target/grcov/lcov verbose: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ace0a5a..f7b539c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,5 +23,5 @@ RUST_MIN_STACK=8388608 cargo test --workspace --all-features Keep in mind that many of Rosenpass' tests are doctests, so to get an accurate read on our code coverage, you have to include doctests: ```bash -cargo llvm-cov --all-features --workspace --doctests --html --open +./coverage_report.sh ``` diff --git a/coverage_report.sh b/coverage_report.sh new file mode 100755 index 0000000..b819c8b --- /dev/null +++ b/coverage_report.sh @@ -0,0 +1,44 @@ +#! /usr/bin/env bash + +set -e -o pipefail + +OUTPUT_DIR="target/grcov" + +log() { + echo >&2 "$@" +} + +exc() { + echo '$' "$@" + "$@" +} + +main() { + exc cd "$(dirname "$0")" + + local open="0" + if [[ "$1" == "--open" ]]; then + open="1" + fi + + exc cargo llvm-cov --all-features --workspace --doctests + + exc rm -rf "${OUTPUT_DIR}" + exc mkdir -p "${OUTPUT_DIR}" + exc grcov target/llvm-cov-target/ --llvm -s . --branch \ + --binary-path ./target/llvm-cov-target/debug/deps \ + --ignore-not-existing --ignore '../*' --ignore "/*" \ + --excl-line '^\s*#\[(derive|repr)\(' \ + -t lcov,html,markdown -o "${OUTPUT_DIR}" + + if (( "${open}" == 1 )); then + xdg-open "${PWD}/${OUTPUT_DIR}/html/index.html" + fi + + log "" + log "Generated reports in \"${PWD}/${OUTPUT_DIR}\"." + log "Open \"${PWD}/${OUTPUT_DIR}/html/index.html\" to view HTML report." + log "" +} + +main "$@" diff --git a/flake.nix b/flake.nix index 6fbbee7..c11d007 100644 --- a/flake.nix +++ b/flake.nix @@ -121,6 +121,7 @@ proverif-patched inputs.fenix.packages.${system}.complete.toolchain pkgs.cargo-llvm-cov + pkgs.grcov ]; }; devShells.coverage = pkgs.mkShell { @@ -128,6 +129,7 @@ nativeBuildInputs = [ inputs.fenix.packages.${system}.complete.toolchain pkgs.cargo-llvm-cov + pkgs.grcov ]; };