run-tests-batch.sh 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
  15. FRAMEWORK_ROOT=$(cd "$SCRIPT_DIR/../.." && pwd)
  16. echo -e "${GREEN}🚀 Batch Test Runner${NC}"
  17. echo "Agent: $AGENT"
  18. echo "Batch size: $BATCH_SIZE tests"
  19. echo "Delay between batches: ${DELAY_BETWEEN_BATCHES}s"
  20. echo ""
  21. # Get all test files
  22. TEST_DIR="$FRAMEWORK_ROOT/../agents/$AGENT/tests"
  23. if [ ! -d "$TEST_DIR" ]; then
  24. echo -e "${RED}❌ Test directory not found: $TEST_DIR${NC}"
  25. exit 1
  26. fi
  27. # Find all test files
  28. TEST_FILES=$(find "$TEST_DIR" -name "*.yaml" -type f | sort)
  29. TOTAL_TESTS=$(echo "$TEST_FILES" | wc -l | tr -d ' ')
  30. echo -e "${GREEN}Found $TOTAL_TESTS test files${NC}"
  31. echo ""
  32. # Split into batches
  33. BATCH_NUM=1
  34. CURRENT_BATCH=()
  35. BATCH_COUNT=0
  36. for TEST_FILE in $TEST_FILES; do
  37. CURRENT_BATCH+=("$TEST_FILE")
  38. BATCH_COUNT=$((BATCH_COUNT + 1))
  39. # Run batch when it reaches BATCH_SIZE or is the last file
  40. # shellcheck disable=SC2143
  41. if [ $BATCH_COUNT -eq $BATCH_SIZE ] || [ "$(echo "$TEST_FILES" | grep -c "$TEST_FILE")" -eq $TOTAL_TESTS ]; then
  42. echo -e "${YELLOW}📦 Running Batch $BATCH_NUM (${#CURRENT_BATCH[@]} tests)${NC}"
  43. echo "----------------------------------------"
  44. # Build pattern for this batch
  45. PATTERNS=""
  46. for FILE in "${CURRENT_BATCH[@]}"; do
  47. # Extract relative path from test directory
  48. # shellcheck disable=SC2001
  49. REL_PATH=$(echo "$FILE" | sed "s|$TEST_DIR/||")
  50. echo " - $REL_PATH"
  51. # Add to pattern (run each test individually to avoid conflicts)
  52. if [ -z "$PATTERNS" ]; then
  53. PATTERNS="$REL_PATH"
  54. else
  55. PATTERNS="$PATTERNS|$REL_PATH"
  56. fi
  57. done
  58. echo ""
  59. # Run tests in this batch
  60. for FILE in "${CURRENT_BATCH[@]}"; do
  61. # shellcheck disable=SC2001
  62. REL_PATH=$(echo "$FILE" | sed "s|$TEST_DIR/||")
  63. echo -e "${GREEN}▶ Running: $REL_PATH${NC}"
  64. pnpm --dir "$FRAMEWORK_ROOT" run eval:sdk -- --agent="$AGENT" --pattern="$REL_PATH" 2>&1 | grep -E "(PASSED|FAILED|Duration|Violations)" || true
  65. echo ""
  66. done
  67. # Reset batch
  68. CURRENT_BATCH=()
  69. BATCH_COUNT=0
  70. BATCH_NUM=$((BATCH_NUM + 1))
  71. # Delay between batches (except for last batch)
  72. if [ $BATCH_NUM -le $((TOTAL_TESTS / BATCH_SIZE + 1)) ]; then
  73. echo -e "${YELLOW}⏳ Waiting ${DELAY_BETWEEN_BATCHES}s before next batch...${NC}"
  74. echo ""
  75. sleep $DELAY_BETWEEN_BATCHES
  76. fi
  77. fi
  78. done
  79. echo -e "${GREEN}✅ All batches completed!${NC}"
  80. echo ""
  81. echo "View results:"
  82. echo " cd ../results && ./serve.sh"