#!/usr/bin/env bash # # deploy-mcp.sh # # Build and deploy the OSVx MCP service (opax-mcp) to staging or prod. # # Usage: # ./deploy-mcp.sh staging # ./deploy-mcp.sh prod # # Requirements: # - gcloud configured with correct project/region # - Docker available locally (or use Cloud Build only mode if adapted) # - Artifact Registry repo created (e.g. osvx-images) # # Environment (can be overridden via env vars): # PROJECT_ID - GCP project ID (default: 357036551735) # REGION - GCP region (default: us-central1) # REPOSITORY - Artifact Registry repo name (default: osvx-images) # MCP_SECRET_NAME - Secret Manager secret name for MCP bearer token (default: MCP_SECRET) set -euo pipefail PROJECT_ID="${PROJECT_ID:-357036551735}" REGION="${REGION:-us-central1}" REPOSITORY="${REPOSITORY:-osvx-images}" MCP_SECRET_NAME="${MCP_SECRET_NAME:-MCP_SECRET}" if [ "${1:-}" = "" ]; then echo "Usage: $0 " exit 1 fi ENV="$1" if [ "$ENV" != "staging" ] && [ "$ENV" != "prod" ]; then echo "Error: ENV must be 'staging' or 'prod', got: $ENV" exit 1 fi # Service names (aligned with PLATFORM_MAP.md) if [ "$ENV" = "prod" ]; then SERVICE="osvx-mcp-prod" else SERVICE="osvx-mcp-staging" fi cd "$(git rev-parse --show-toplevel)" SHORT_SHA="$(git rev-parse --short HEAD)" IMAGE_TAG="${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/opax-mcp:${SHORT_SHA}" echo "=== Building opax-mcp for ${ENV} (${SERVICE}) ===" echo "Project: ${PROJECT_ID}" echo "Region: ${REGION}" echo "Repo: ${REPOSITORY}" echo "Commit: ${SHORT_SHA}" echo "Image: ${IMAGE_TAG}" echo "Service: ${SERVICE}" echo # 1. Build the image echo "[1/3] Building Docker image..." docker build --build-arg COMMIT_SHA="${SHORT_SHA}" -t "${IMAGE_TAG}" -f opax-mcp/Dockerfile opax-mcp # 2. Push the image echo "[2/3] Pushing Docker image..." docker push "${IMAGE_TAG}" # 3. Deploy to Cloud Run echo "[3/3] Deploying to Cloud Run (${SERVICE})..." gcloud run deploy "${SERVICE}" --project="${PROJECT_ID}" --region="${REGION}" --image="${IMAGE_TAG}" --platform=managed --allow-unauthenticated=false --set-env-vars="MCP_SECRET=${MCP_SECRET_NAME}" --set-labels="gcb-commit-sha=${SHORT_SHA},env=${ENV}" echo echo "=== Deployment complete ===" echo "Service: ${SERVICE}" echo "Env: ${ENV}" echo "Image: ${IMAGE_TAG}" echo "Commit: ${SHORT_SHA}" echo echo "Check status:" echo " gcloud run services describe ${SERVICE} --project=${PROJECT_ID} --region=${REGION}"