#!/usr/bin/env bash

set -e

html="$1"

outdir="out/coverage/rust"
LLVMCOVPATH="out/bin"

mkdir -p $outdir $LLVMCOVPATH

export CARGO_TARGET_DIR="${CARGO_TARGET_DIR:-out/rust}"

if [[ "${CI:-}" == "true" ]]; then
    # prebuilt binary shouldve been installed
    cargo_cmd="cargo"
    profile=ci
else
    cargo_cmd="$LLVMCOVPATH/cargo-llvm-cov"
    test -x "$cargo_cmd" || cargo install cargo-llvm-cov --version 0.8.4 --locked --root out
    test -x "$LLVMCOVPATH/cargo-nextest" || cargo install cargo-nextest \
        --version 0.9.99 --locked --no-default-features --features default-no-update --root out
    profile=dev
fi

export PATH="$LLVMCOVPATH:$PATH"

ANKI_TEST_MODE=1 "$cargo_cmd" llvm-cov nextest --workspace --locked \
    --cargo-profile "$profile" \
    --json --summary-only \
    --output-path $outdir/coverage-summary.json --fail-under-lines 64

if [ "$html" = "--html" ]; then
    ANKI_TEST_MODE=1 "$cargo_cmd" llvm-cov report --profile "$profile" \
        --html --output-dir $outdir
    echo "Rust coverage report: $outdir/html/index.html"
fi
