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

51 lines
1.8 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 -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_jysh/backend/internal/modules/order)" "40.0"
require_at_least "payment" "$(coverage_for_package hfb_jysh/backend/internal/modules/payment)" "20.0"
require_at_least "wallet" "$(coverage_for_package hfb_jysh/backend/internal/modules/wallet)" "34.0"
require_at_least "withdrawal" "$(coverage_for_package hfb_jysh/backend/internal/modules/withdrawal)" "30.0"