Jaypore CI

> Jaypore CI: Minimal, Offline, Local CI system.
Log | Files | Refs | README | LICENSE

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