#!/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"