OSVauco/scripts/deploy-mcp.sh

116 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${ROOT_DIR}"
PROJECT_ID="propane-will-491900-m5"
REGION="us-central1"
REPOSITORY="us-central1-docker.pkg.dev/${PROJECT_ID}/osvauco-repo"
MCP_SERVICE="opax-mcp"
MCP_IMAGE="${REPOSITORY}/opax-mcp"
# Emma runtime requires Direct VPC egress to the internal Ollama host.
# Keep this explicit: a prior manual deployment lost these settings.
MCP_NETWORK="default"
MCP_SUBNET="default"
MCP_VPC_EGRESS="private-ranges-only"
MCP_OLLAMA_BASE_URL="http://10.128.0.15:11434"
echo "==> Submitting MCP Cloud Build"
BUILD_ID="$(
gcloud builds submit \
--async \
--project="${PROJECT_ID}" \
--region="${REGION}" \
--config="cloudbuild.build-only.yaml" \
--format="value(id)" \
.
)"
if [[ -z "${BUILD_ID}" ]]; then
echo "ERROR: Cloud Build did not return a build ID." >&2
exit 1
fi
echo "==> Cloud Build ID: ${BUILD_ID}"
echo "==> Streaming Cloud Build logs"
set +e
gcloud builds log "${BUILD_ID}" \
--project="${PROJECT_ID}" \
--region="${REGION}" \
--stream
BUILD_LOG_EXIT_CODE=$?
set -e
BUILD_STATUS="$(
gcloud builds describe "${BUILD_ID}" \
--project="${PROJECT_ID}" \
--region="${REGION}" \
--format="value(status)"
)"
IMAGE_REF="$(
gcloud builds describe "${BUILD_ID}" \
--project="${PROJECT_ID}" \
--region="${REGION}" \
--format="value(results.images[0].name)"
)"
if [[ -z "${IMAGE_REF}" ]]; then
IMAGE_REF="${MCP_IMAGE}:${BUILD_ID}"
fi
if [[ "${IMAGE_REF}" == *@sha256:* ]]; then
DEPLOY_IMAGE="${IMAGE_REF}"
else
IMAGE_DIGEST="$(
gcloud artifacts docker images describe "${IMAGE_REF}" \
--project="${PROJECT_ID}" \
--format="value(image_summary.digest)"
)"
if [[ -z "${IMAGE_DIGEST}" ]]; then
echo "ERROR: No pushed MCP image digest was found." >&2
echo "Cloud Build status: ${BUILD_STATUS}" >&2
echo "Cloud Build log exit code: ${BUILD_LOG_EXIT_CODE}" >&2
exit 1
fi
DEPLOY_IMAGE="${MCP_IMAGE}@${IMAGE_DIGEST}"
fi
echo "==> Cloud Build status: ${BUILD_STATUS}"
echo "==> Deploying immutable MCP image:"
echo "${DEPLOY_IMAGE}"
gcloud run deploy "${MCP_SERVICE}" \
--project="${PROJECT_ID}" \
--region="${REGION}" \
--image="${DEPLOY_IMAGE}" \
--network="${MCP_NETWORK}" \
--subnet="${MCP_SUBNET}" \
--vpc-egress="${MCP_VPC_EGRESS}" \
--update-env-vars="OLLAMA_BASE_URL=${MCP_OLLAMA_BASE_URL}" \
--quiet
echo
echo "==> Active MCP deployment"
gcloud run services describe "${MCP_SERVICE}" \
--project="${PROJECT_ID}" \
--region="${REGION}" \
--format="table(
metadata.name,
status.url,
status.latestReadyRevisionName,
status.traffic[0].revisionName,
spec.template.spec.containers[0].image
)"
echo
echo "MCP deployment complete."
echo "Cloud Build log exit code: ${BUILD_LOG_EXIT_CODE}"