#!/bin/bash # Sequential test runner for low-memory environments (Termux) # Runs each test file in isolation, freeing memory between them. # Usage: ./scripts/test-sequential.sh [pattern] set -e cd "$(dirname "$0")/.." PATTERN="${1:-tests/core/*.test.ts tests/api/*.test.ts}" PASS=0 FAIL=0 FAILED_FILES=() # expand glob pattern shopt -s nullglob FILES=() for pat in $PATTERN; do for file in $pat; do [ -f "$file" ] && FILES+=("$file") done done TOTAL=${#FILES[@]} echo "Running $TOTAL test files sequentially..." echo "" for i in "${!FILES[@]}"; do FILE="${FILES[$i]}" IDX=$((i + 1)) printf "[%d/%d] %s ... " "$IDX" "$TOTAL" "$FILE" if NODE_OPTIONS='--import ./scripts/termux-shim.js --max-old-space-size=384' \ npx vitest run "$FILE" --reporter=dot --no-coverage > /tmp/vitest-out.log 2>&1; then echo "PASS" PASS=$((PASS + 1)) else echo "FAIL" FAIL=$((FAIL + 1)) FAILED_FILES+=("$FILE") tail -20 /tmp/vitest-out.log fi # let the OS reclaim memory between runs sleep 1 done echo "" echo "==========================================" echo "Total: $TOTAL | Passed: $PASS | Failed: $FAIL" echo "==========================================" if [ ${#FAILED_FILES[@]} -gt 0 ]; then echo "" echo "Failed files:" printf ' %s\n' "${FAILED_FILES[@]}" exit 1 fi