#!/usr/bin/env bash set -euo pipefail RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m' TARGET="${1:-.}" errors=0 echo "=== Test Suite ===" # Probe for test files. Prune known noise dirs so we don't trip on # third-party test files installed under .venv, and use -print -quit so # the probe doesn't SIGPIPE under `set -o pipefail` on dense trees # (which exits the script silently with status 141 before any stage # output is printed). has_python=$(find "$TARGET" \ \( -path '*/__pycache__' -o -path '*/.venv' -o -path '*/venv' \ -o -path '*/.git' -o -path '*/node_modules' \) -prune \ -o \( -name 'test_*.py' -o -name '*_test.py' \) -print -quit) has_go=$(find "$TARGET" \ \( -path '*/.git' -o -path '*/vendor' -o -path '*/node_modules' \) -prune \ -o -name '*_test.go' -print -quit) if [ -z "$has_python" ] && [ -z "$has_go" ]; then printf "${YELLOW}!${NC} No test files found — skipping\n" exit 0 fi if [ -n "$has_python" ]; then if ! command -v pytest &>/dev/null; then printf "${RED}✗${NC} pytest not installed\n" exit 2 fi has_uvlock=$(find "$TARGET" -maxdepth 2 -name "uv.lock" | head -1) echo "-- Python (pytest --cov) --" if [ -n "$has_uvlock" ]; then printf " mode: uv project\n" uv_dir=$(dirname "$has_uvlock") test_cmd="uv run --directory $uv_dir pytest --cov --cov-report=term-missing -q" else printf " mode: global pytest\n" test_cmd="pytest $TARGET --cov --cov-report=term-missing -q" fi if $test_cmd 2>/dev/null; then printf "${GREEN}✓${NC} Python tests passed\n" else printf "${RED}✗${NC} Python tests failed\n" errors=$((errors + 1)) fi fi if [ -n "$has_go" ]; then if ! command -v go &>/dev/null; then printf "${RED}✗${NC} go not installed\n" exit 2 fi echo "-- Go (go test -cover) --" if go test -cover ./... 2>/dev/null; then printf "${GREEN}✓${NC} Go tests passed\n" else printf "${RED}✗${NC} Go tests failed\n" errors=$((errors + 1)) fi fi if [ "$errors" -gt 0 ]; then exit 1 else exit 0 fi