Bash · 1552 bytes Raw Blame History
1 #!/usr/bin/env bash
2 # Generate code coverage report for armfortas.
3 #
4 # Prerequisites (install one):
5 # cargo install cargo-llvm-cov # recommended — uses LLVM instrumentation
6 # cargo install cargo-tarpaulin # alternative — uses ptrace (Linux only)
7 #
8 # Usage:
9 # ./scripts/coverage.sh # HTML report → target/llvm-cov/html/
10 # ./scripts/coverage.sh --summary # terminal summary only
11 # ./scripts/coverage.sh --lcov # LCOV format → target/llvm-cov/lcov.info
12
13 set -euo pipefail
14 cd "$(git rev-parse --show-toplevel)"
15
16 # Ensure cargo bin dir is in PATH
17 export PATH="$HOME/.cargo/bin:$PATH"
18
19 MODE="${1:-}"
20
21 if command -v cargo-llvm-cov &>/dev/null; then
22 echo "Using cargo-llvm-cov"
23
24 case "$MODE" in
25 --summary)
26 cargo llvm-cov --workspace --lib
27 ;;
28 --lcov)
29 cargo llvm-cov --workspace --lib --lcov --output-path target/llvm-cov/lcov.info
30 echo "LCOV report: target/llvm-cov/lcov.info"
31 ;;
32 *)
33 cargo llvm-cov --workspace --lib --html
34 echo "HTML report: target/llvm-cov/html/index.html"
35 ;;
36 esac
37
38 elif command -v cargo-tarpaulin &>/dev/null; then
39 echo "Using cargo-tarpaulin"
40 cargo tarpaulin --workspace --lib --out Html --output-dir target/tarpaulin
41 echo "HTML report: target/tarpaulin/tarpaulin-report.html"
42
43 else
44 echo "Error: no coverage tool found."
45 echo "Install one of:"
46 echo " cargo install cargo-llvm-cov"
47 echo " cargo install cargo-tarpaulin"
48 exit 1
49 fi