83 lines
2.5 KiB
Bash
83 lines
2.5 KiB
Bash
#!/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 <staging|prod>"
|
|
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}"
|