96 lines
3.3 KiB
Bash
Executable File
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
|