64 lines
2.4 KiB
Bash
Executable File
64 lines
2.4 KiB
Bash
Executable File
#!/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 <<EOF > "${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}"
|