Files
gochat/backend/scripts/ci_quality_gate.sh
T
Rogeeandrogee 61376a57fd HH-446: restore auditable quality gates from current main (#102)
* HH-446: restore auditable quality gates

* test(HH-446): restore help center smoke contract

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-22 15:45:58 +08:00

59 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
QUALITY_DIR="${GOCHAT_QUALITY_DIR:-$ROOT/.tmp/quality}"
mkdir -p "$QUALITY_DIR"
RACE="${GOCHAT_RACE:-true}"
COLD_CACHE="${GOCHAT_COLD_CACHE:-true}"
MIN_COVERAGE="${GOCHAT_MIN_COVERAGE:-65}"
MAX_DURATION="${GOCHAT_MAX_DURATION_SECONDS:-300}"
COVERAGE_FILE="${GOCHAT_COVERAGE_FILE:-$QUALITY_DIR/coverage.out}"
TEST_JSON="${GOCHAT_TEST_JSON:-$QUALITY_DIR/test.jsonl}"
DURATION_FILE="${GOCHAT_DURATION_FILE:-$QUALITY_DIR/duration.seconds}"
REPORT_FILE="${GOCHAT_QUALITY_REPORT:-$QUALITY_DIR/quality-gate.json}"
packages=(./internal/... ./pkg/... ./cmd/...)
if [[ -n "${GOCHAT_TEST_PACKAGES:-}" ]]; then
read -r -a packages <<< "$GOCHAT_TEST_PACKAGES"
fi
if [[ "$COLD_CACHE" == "true" ]]; then
go clean -testcache
fi
race_args=()
if [[ "$RACE" == "true" ]]; then
race_args=(-race)
fi
start="$(date +%s.%N)"
set +e
go test -json -count=1 "${race_args[@]}" -covermode=atomic \
-coverprofile="$COVERAGE_FILE" -timeout "${GOCHAT_TEST_TIMEOUT:-300s}" \
"${packages[@]}" | tee "$TEST_JSON" >/dev/null
test_status=${PIPESTATUS[0]}
set -e
end="$(date +%s.%N)"
awk -v start="$start" -v end="$end" 'BEGIN { printf "%.3f\n", end-start }' > "$DURATION_FILE"
set +e
python3 "$ROOT/scripts/ci_quality_gate.py" \
--coverage "$COVERAGE_FILE" \
--test-json "$TEST_JSON" \
--duration "$DURATION_FILE" \
--report "$REPORT_FILE" \
--min-coverage "$MIN_COVERAGE" \
--max-duration "$MAX_DURATION" \
--test-exit-code "$test_status" \
--critical-package github.com/gochat/gochat/internal/ws \
--critical-package github.com/gochat/gochat/internal/handler/ws \
--critical-package github.com/gochat/gochat/internal/worker \
--critical-package github.com/gochat/gochat/internal/channel/...
gate_status=$?
set -e
[[ "$test_status" -eq 0 ]] || exit "$test_status"
exit "$gate_status"