run-tests-batch.sh 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/bin/bash
  2. # Batch Test Runner for OpenCode Agents
  3. # Runs tests in smaller batches to avoid API timeouts and rate limits
  4. set -e
  5. # Colors for output
  6. GREEN='\033[0;32m'
  7. YELLOW='\033[1;33m'
  8. RED='\033[0;31m'
  9. NC='\033[0m' # No Color
  10. # Configuration
  11. AGENT="${1:-openagent}"
  12. BATCH_SIZE="${2:-3}"
  13. DELAY_BETWEEN_BATCHES="${3:-10}"
  14. echo -e "${GREEN}🚀 Batch Test Runner${NC}"
  15. echo "Agent: $AGENT"
  16. echo "Batch size: $BATCH_SIZE tests"
  17. echo "Delay between batches: ${DELAY_BETWEEN_BATCHES}s"
  18. echo ""
  19. # Get all test files
  20. TEST_DIR="../agents/$AGENT/tests"
  21. if [ ! -d "$TEST_DIR" ]; then
  22. echo -e "${RED}❌ Test directory not found: $TEST_DIR${NC}"
  23. exit 1
  24. fi
  25. # Find all test files
  26. TEST_FILES=$(find "$TEST_DIR" -name "*.yaml" -type f | sort)
  27. TOTAL_TESTS=$(echo "$TEST_FILES" | wc -l | tr -d ' ')
  28. echo -e "${GREEN}Found $TOTAL_TESTS test files${NC}"
  29. echo ""
  30. # Split into batches
  31. BATCH_NUM=1
  32. CURRENT_BATCH=()
  33. BATCH_COUNT=0
  34. for TEST_FILE in $TEST_FILES; do
  35. CURRENT_BATCH+=("$TEST_FILE")
  36. BATCH_COUNT=$((BATCH_COUNT + 1))
  37. # Run batch when it reaches BATCH_SIZE or is the last file
  38. if [ $BATCH_COUNT -eq $BATCH_SIZE ] || [ "$(echo "$TEST_FILES" | grep -c "$TEST_FILE")" -eq $TOTAL_TESTS ]; then
  39. echo -e "${YELLOW}📦 Running Batch $BATCH_NUM (${#CURRENT_BATCH[@]} tests)${NC}"
  40. echo "----------------------------------------"
  41. # Build pattern for this batch
  42. PATTERNS=""
  43. for FILE in "${CURRENT_BATCH[@]}"; do
  44. # Extract relative path from test directory
  45. REL_PATH=$(echo "$FILE" | sed "s|$TEST_DIR/||")
  46. echo " - $REL_PATH"
  47. # Add to pattern (run each test individually to avoid conflicts)
  48. if [ -z "$PATTERNS" ]; then
  49. PATTERNS="$REL_PATH"
  50. else
  51. PATTERNS="$PATTERNS|$REL_PATH"
  52. fi
  53. done
  54. echo ""
  55. # Run tests in this batch
  56. for FILE in "${CURRENT_BATCH[@]}"; do
  57. REL_PATH=$(echo "$FILE" | sed "s|$TEST_DIR/||")
  58. echo -e "${GREEN}▶ Running: $REL_PATH${NC}"
  59. npm run eval:sdk -- --agent="$AGENT" --pattern="$REL_PATH" 2>&1 | grep -E "(PASSED|FAILED|Duration|Violations)" || true
  60. echo ""
  61. done
  62. # Reset batch
  63. CURRENT_BATCH=()
  64. BATCH_COUNT=0
  65. BATCH_NUM=$((BATCH_NUM + 1))
  66. # Delay between batches (except for last batch)
  67. if [ $BATCH_NUM -le $((TOTAL_TESTS / BATCH_SIZE + 1)) ]; then
  68. echo -e "${YELLOW}⏳ Waiting ${DELAY_BETWEEN_BATCHES}s before next batch...${NC}"
  69. echo ""
  70. sleep $DELAY_BETWEEN_BATCHES
  71. fi
  72. fi
  73. done
  74. echo -e "${GREEN}✅ All batches completed!${NC}"
  75. echo ""
  76. echo "View results:"
  77. echo " cd ../results && ./serve.sh"