| 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 |