scripts/test-coverage.sh
Rama main · réplica de lectura del repositorio original.
#!/bin/bash
set -euo pipefail
readonly log_file="${LOG_FILE:-/tmp/decidealot-test-coverage.log}"
readonly coverage_file="${COVERAGE_FILE:-coverage-percent.txt}"
readonly coverage_marker="not real"
readonly minimum_coverage_percent="${COVERAGE_MINIMUM:-90}"
log() {
local level="$1"
shift
jq -nc \
--arg time "$(date -u '+%Y-%m-%dT%H:%M:%S.%3NZ')" \
--arg level "$level" \
--arg file "${BASH_SOURCE[1]##*/}" \
--argjson line "${BASH_LINENO[0]}" \
--arg func "${FUNCNAME[1]:-main}" \
--arg msg "$*" \
'{time:$time,level:$level,file:$file,line:$line,func:$func,msg:$msg}' >&2
}
on_error() {
local status=$?
log ERROR "command failed exit=$status"
exit "$status"
}
trap on_error ERR
exec > >(tee -a "$log_file") 2>&1
if ! [[ "$minimum_coverage_percent" =~ ^[0-9]+$ ]]; then
log ERROR "COVERAGE_MINIMUM must be a whole percentage"
exit 2
fi
if [[ -n "${DEBUG:-}" ]]; then
log DEBUG "running coverage suite marker=$coverage_marker"
fi
python -m pytest -m "$coverage_marker" --cov --cov-report=term --cov-fail-under="$minimum_coverage_percent"
coverage_percent="$(python -m coverage report --format=total)"
printf '%s\n' "$coverage_percent" >"$coverage_file"
log INFO "coverage badge input wrote percent=$coverage_percent path=$coverage_file"