62 lines
1.5 KiB
Bash
Executable file
62 lines
1.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
cd "$repo_root"
|
|
|
|
if ! command -v rustup >/dev/null 2>&1; then
|
|
echo "rustup is required to manage Rust toolchain components." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v cargo >/dev/null 2>&1; then
|
|
echo "cargo is required to run coverage." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! rustup component list --installed | grep -Eq '^llvm-tools(-preview)?($|-)'; then
|
|
echo "Missing rustup component: llvm-tools (aka llvm-tools-preview)." >&2
|
|
echo "Install with: rustup component add llvm-tools-preview" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! cargo llvm-cov --version >/dev/null 2>&1; then
|
|
echo "Missing cargo subcommand: cargo-llvm-cov" >&2
|
|
echo "Install with: cargo install --locked cargo-llvm-cov" >&2
|
|
exit 1
|
|
fi
|
|
|
|
coverage_dir="target/llvm-cov"
|
|
lcov_path="${coverage_dir}/lcov.info"
|
|
html_dir="${coverage_dir}/html"
|
|
|
|
mkdir -p "$coverage_dir"
|
|
|
|
cargo llvm-cov \
|
|
--workspace \
|
|
--exclude gitcomet-ui \
|
|
--exclude gitcomet-ui-gpui \
|
|
--no-default-features \
|
|
--features gix \
|
|
--lcov \
|
|
--output-path "$lcov_path" \
|
|
"$@"
|
|
|
|
cargo llvm-cov \
|
|
--workspace \
|
|
--exclude gitcomet-ui \
|
|
--exclude gitcomet-ui-gpui \
|
|
--no-default-features \
|
|
--features gix \
|
|
--html \
|
|
--output-dir "$html_dir" \
|
|
--no-run \
|
|
"$@"
|
|
|
|
if [[ -f "$lcov_path" && -f "${html_dir}/index.html" ]]; then
|
|
echo "Coverage summary generated."
|
|
echo "LCOV report: ${repo_root}/${lcov_path}"
|
|
echo "HTML report: ${repo_root}/${html_dir}/index.html"
|
|
else
|
|
echo "cargo llvm-cov completed."
|
|
fi
|