run.sh (1956B)
1 #!/bin/bash 2 set -e 3 4 echo "=== Jaypore CI: Docker Compose API Tests ===" 5 echo "Commit: $JCI_COMMIT" 6 echo "Repo root: $JCI_REPO_ROOT" 7 echo "Output dir: $JCI_OUTPUT_DIR" 8 9 PROJECT_DIR="$JCI_REPO_ROOT/02-docker-compose-api-tests" 10 cd "$PROJECT_DIR" 11 12 COMPOSE_PROJECT="jci-api-tests-$$" 13 14 cleanup() { 15 echo "=== Cleaning up ===" 16 docker compose -p "$COMPOSE_PROJECT" down -v --remove-orphans 2>/dev/null || true 17 } 18 trap cleanup EXIT 19 20 # ---- Start services ---- 21 echo "=== Starting services ===" 22 docker compose -p "$COMPOSE_PROJECT" up -d --build 2>&1 | tee "$JCI_OUTPUT_DIR/compose-up.log" 23 24 # ---- Wait for web service to respond ---- 25 echo "=== Waiting for web service ===" 26 MAX_WAIT=90 27 ELAPSED=0 28 29 # Find the mapped port for web:8000 30 while [ $ELAPSED -lt $MAX_WAIT ]; do 31 WEB_PORT=$(docker compose -p "$COMPOSE_PROJECT" port web 8000 2>/dev/null | cut -d: -f2 || true) 32 if [ -n "$WEB_PORT" ]; then 33 # Check if web responds 34 if curl -sf "http://localhost:$WEB_PORT/health/" >/dev/null 2>&1; then 35 echo " Web service healthy on port $WEB_PORT!" 36 break 37 fi 38 fi 39 echo " [$ELAPSED s] waiting..." 40 sleep 5 41 ELAPSED=$((ELAPSED + 5)) 42 done 43 44 if [ $ELAPSED -ge $MAX_WAIT ]; then 45 echo "ERROR: Services did not become healthy within ${MAX_WAIT}s" 46 docker compose -p "$COMPOSE_PROJECT" ps 2>&1 | tee "$JCI_OUTPUT_DIR/compose-ps.log" 47 docker compose -p "$COMPOSE_PROJECT" logs 2>&1 | tee "$JCI_OUTPUT_DIR/compose-logs.log" 48 exit 1 49 fi 50 51 BASE_URL="http://localhost:${WEB_PORT}" 52 echo "=== Web service at $BASE_URL ===" 53 54 # ---- Run API tests ---- 55 echo "=== Running API tests ===" 56 bash "$PROJECT_DIR/test_api.sh" "$BASE_URL" "$JCI_OUTPUT_DIR" 2>&1 \ 57 | tee "$JCI_OUTPUT_DIR/test-output.log" 58 TEST_EXIT=${PIPESTATUS[0]} 59 60 # ---- Capture logs for artifacts ---- 61 docker compose -p "$COMPOSE_PROJECT" logs 2>&1 > "$JCI_OUTPUT_DIR/compose-logs.log" 62 63 echo "=== CI Complete (exit $TEST_EXIT) ===" 64 exit $TEST_EXIT