#!/usr/bin/env bash # ============================================================================== # OpenProject MCP Companion - Seed Script # Waits for OpenProject to be healthy, runs test data seeder, and saves API key. # ============================================================================== set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" BASE_URL="${OPENPROJECT_BASE_URL:-http://localhost:8080}" MAX_WAIT_SECONDS=180 INTERVAL=5 echo "[seed.sh] Waiting for OpenProject to be healthy at ${BASE_URL}..." elapsed=0 until curl -s -f "${BASE_URL}/health_checks/default" >/dev/null 2>&1; do if [ "$elapsed" -ge "$MAX_WAIT_SECONDS" ]; then echo "[seed.sh] ERROR: Timed out waiting for OpenProject after ${MAX_WAIT_SECONDS} seconds." echo "[seed.sh] Check container logs with: docker compose logs web" exit 1 fi echo "[seed.sh] OpenProject not ready yet. Retrying in ${INTERVAL}s (${elapsed}s / ${MAX_WAIT_SECONDS}s)..." sleep "$INTERVAL" elapsed=$((elapsed + INTERVAL)) done echo "[seed.sh] OpenProject is up and healthy!" echo "[seed.sh] Running seed script inside container..." SEED_OUTPUT=$(docker compose -f "${ROOT_DIR}/docker-compose.yml" exec -T web bundle exec rails runner /scripts/seed-test-data.rb) echo "${SEED_OUTPUT}" JSON_PAYLOAD=$(echo "${SEED_OUTPUT}" | sed -n '/---SEED_RESULT_START---/,/---SEED_RESULT_END---/p' | grep -v -- '---SEED_RESULT_') if [ -z "${JSON_PAYLOAD}" ]; then echo "[seed.sh] ERROR: Could not extract seed payload from output." exit 1 fi API_KEY=$(python3 -c "import json, sys; print(json.loads(sys.stdin.read())['apiKey'])" <<< "${JSON_PAYLOAD}") PROJECT_IDENTIFIER=$(python3 -c "import json, sys; print(json.loads(sys.stdin.read())['projectIdentifier'])" <<< "${JSON_PAYLOAD}") # Update .env.test cat < "${ROOT_DIR}/.env.test" # Auto-generated by scripts/seed.sh on $(date -u +"%Y-%m-%dT%H:%M:%SZ") OPENPROJECT_BASE_URL=${BASE_URL} OPENPROJECT_API_KEY=${API_KEY} OPENPROJECT_TEST_PROJECT=${PROJECT_IDENTIFIER} EOF # Also update .env.local cp "${ROOT_DIR}/.env.test" "${ROOT_DIR}/.env.local" echo "" echo "[seed.sh] Success! Test environment configured." echo "[seed.sh] API credentials written to .env.test and .env.local" echo "[seed.sh] Base URL: ${BASE_URL}" echo "[seed.sh] API Key: ${API_KEY}" echo "[seed.sh] Test Project: ${PROJECT_IDENTIFIER}"