learning_ai_common_plat/scripts/test-all.sh

96 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# ═══════════════════════════════════════════════════════════════════════
# test-all.sh — Run Vitest across all ByteLyst repos
# ═══════════════════════════════════════════════════════════════════════
set -euo pipefail
RED='\033[0;31m'; GREEN='\033[0;32m'; CYAN='\033[0;36m'
BOLD='\033[1m'; DIM='\033[2m'; NC='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORKSPACE_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
PASS=0
FAIL=0
SKIP=0
FAILURES=()
REPOS=(
learning_ai_common_plat
learning_voice_ai_agent
learning_multimodal_memory_agents
learning_ai_clock
learning_ai_jarvis_jr
learning_ai_fastgap
learning_ai_peakpulse
learning_ai_flowmonk
learning_ai_notes
learning_ai_trails
learning_ai_local_memory_gpt
)
SUBS=(backend web user-dashboard-web mindlyst-native/web)
echo ""
echo -e "${BOLD}╔═══════════════════════════════════════════════════════════╗${NC}"
echo -e "${BOLD}║ ByteLyst Cross-Repo Test Runner ║${NC}"
echo -e "${BOLD}╚═══════════════════════════════════════════════════════════╝${NC}"
echo ""
for repo in "${REPOS[@]}"; do
repo_dir="${WORKSPACE_ROOT}/${repo}"
[ -d "$repo_dir" ] || continue
for sub in "${SUBS[@]}"; do
pkg="${repo_dir}/${sub}/package.json"
[ -f "$pkg" ] || continue
has_test=$(jq -r '.scripts.test // empty' "$pkg" 2>/dev/null)
[ -n "$has_test" ] || continue
# Check if there are actually test files
test_count=$(find "${repo_dir}/${sub}/src" -name '*.test.ts' -o -name '*.test.tsx' 2>/dev/null | head -1)
if [ -z "$test_count" ]; then
SKIP=$((SKIP + 1))
continue
fi
label="${repo}/${sub}"
echo -ne " ${CYAN}${NC} ${label}..."
if (cd "${repo_dir}/${sub}" && pnpm run test --run 2>&1) > /tmp/test-output-$$.txt 2>&1; then
# Extract test count from vitest output
summary=$(grep -E 'Tests\s+[0-9]' /tmp/test-output-$$.txt 2>/dev/null | tail -1 || echo "")
echo -e "\r ${GREEN}${NC} ${label} ${DIM}${summary}${NC}"
PASS=$((PASS + 1))
else
echo -e "\r ${RED}${NC} ${label}"
grep -E 'FAIL|Error|failed' /tmp/test-output-$$.txt 2>/dev/null | tail -5 | while IFS= read -r line; do echo " ${line}"; done
FAIL=$((FAIL + 1))
FAILURES+=("$label")
fi
rm -f /tmp/test-output-$$.txt
done
done
echo ""
echo -e "${BOLD}═══ Summary ═══${NC}"
echo -e " ${GREEN}Passed:${NC} ${PASS}"
echo -e " ${RED}Failed:${NC} ${FAIL}"
if [ $SKIP -gt 0 ]; then
echo -e " ${DIM}Skipped: ${SKIP} (no test files)${NC}"
fi
if [ $FAIL -gt 0 ]; then
echo ""
echo -e "${RED}${BOLD}FAILED${NC}${FAIL} test suite(s) failed:"
for f in "${FAILURES[@]}"; do
echo -e " ${RED}${NC} ${f}"
done
exit 1
else
echo ""
echo -e "${GREEN}${BOLD}ALL PASSED${NC}${PASS} suite(s) green."
exit 0
fi