run-tests-batch.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. # shellcheck disable=SC2143
  39. if [ $BATCH_COUNT -eq $BATCH_SIZE ] || [ "$(echo "$TEST_FILES" | grep -c "$TEST_FILE")" -eq $TOTAL_TESTS ]; then
  40. echo -e "${YELLOW}📦 Running Batch $BATCH_NUM (${#CURRENT_BATCH[@]} tests)${NC}"
  41. echo "----------------------------------------"
  42. # Build pattern for this batch
  43. PATTERNS=""
  44. for FILE in "${CURRENT_BATCH[@]}"; do
  45. # Extract relative path from test directory
  46. # shellcheck disable=SC2001
  47. REL_PATH=$(echo "$FILE" | sed "s|$TEST_DIR/||")
  48. echo " - $REL_PATH"
  49. # Add to pattern (run each test individually to avoid conflicts)
  50. if [ -z "$PATTERNS" ]; then
  51. PATTERNS="$REL_PATH"
  52. else
  53. PATTERNS="$PATTERNS|$REL_PATH"
  54. fi
  55. done
  56. echo ""
  57. # Run tests in this batch
  58. for FILE in "${CURRENT_BATCH[@]}"; do
  59. # shellcheck disable=SC2001
  60. REL_PATH=$(echo "$FILE" | sed "s|$TEST_DIR/||")
  61. echo -e "${GREEN}▶ Running: $REL_PATH${NC}"
  62. npm run eval:sdk -- --agent="$AGENT" --pattern="$REL_PATH" 2>&1 | grep -E "(PASSED|FAILED|Duration|Violations)" || true
  63. echo ""
  64. done
  65. # Reset batch
  66. CURRENT_BATCH=()
  67. BATCH_COUNT=0
  68. BATCH_NUM=$((BATCH_NUM + 1))
  69. # Delay between batches (except for last batch)
  70. if [ $BATCH_NUM -le $((TOTAL_TESTS / BATCH_SIZE + 1)) ]; then
  71. echo -e "${YELLOW}⏳ Waiting ${DELAY_BETWEEN_BATCHES}s before next batch...${NC}"
  72. echo ""
  73. sleep $DELAY_BETWEEN_BATCHES
  74. fi
  75. fi
  76. done
  77. echo -e "${GREEN}✅ All batches completed!${NC}"
  78. echo ""
  79. echo "View results:"
  80. echo " cd ../results && ./serve.sh"