Files
hfb_sys/scripts/check-backend-coverage.sh
T

50 lines
1.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
BACKEND_DIR="${ROOT_DIR}/backend"
PROFILE="$(mktemp -t hfb-backend-cover.XXXXXX)"
OUTPUT="$(mktemp -t hfb-backend-cover-output.XXXXXX)"
trap 'rm -f "${PROFILE}" "${OUTPUT}"' EXIT
cd "${BACKEND_DIR}"
go test -p 1 -count=1 -coverprofile="${PROFILE}" ./... | tee "${OUTPUT}"
coverage_for_package() {
local package="$1"
awk -v package="${package}" '
$1 == "ok" && $2 == package {
for (i = 1; i <= NF; i++) {
if ($i == "coverage:") {
value = $(i + 1)
gsub(/%/, "", value)
print value
exit
}
}
}
' "${OUTPUT}"
}
require_at_least() {
local label="$1"
local actual="$2"
local minimum="$3"
if [[ -z "${actual}" ]]; then
printf '[coverage] 无法读取 %s 覆盖率\n' "${label}" >&2
return 1
fi
if ! awk -v actual="${actual}" -v minimum="${minimum}" 'BEGIN { exit !(actual + 0 >= minimum + 0) }'; then
printf '[coverage] %s 覆盖率 %s%%,低于门禁 %s%%\n' "${label}" "${actual}" "${minimum}" >&2
return 1
fi
printf '[coverage] %s %s%%(门禁 %s%%)\n' "${label}" "${actual}" "${minimum}"
}
total="$(go tool cover -func="${PROFILE}" | awk '/^total:/ { gsub(/%/, "", $3); print $3 }')"
require_at_least "后端总语句" "${total}" "30.0"
require_at_least "order" "$(coverage_for_package hfb_sys/backend/internal/modules/order)" "40.0"
require_at_least "payment" "$(coverage_for_package hfb_sys/backend/internal/modules/payment)" "20.0"
require_at_least "wallet" "$(coverage_for_package hfb_sys/backend/internal/modules/wallet)" "34.0"
require_at_least "withdrawal" "$(coverage_for_package hfb_sys/backend/internal/modules/withdrawal)" "30.0"