#!/bin/bash set -e # Default values PROJECT_ID=${PROJECT_ID:-""} REGION=${REGION:-"us-central1"} SERVICE_CONFIG=${SERVICE_CONFIG:-"deployment/cloud-run/service.yaml"} IMAGE_NAME=${IMAGE_NAME:-"sereact-api"} IMAGE_TAG=${IMAGE_TAG:-"latest"} REGISTRY=${REGISTRY:-"gcr.io"} # Validate required parameters if [ -z "$PROJECT_ID" ]; then echo "Error: PROJECT_ID environment variable is required" echo "Usage: PROJECT_ID=your-project-id ./scripts/deploy-to-cloud-run.sh" exit 1 fi # Full image reference FULL_IMAGE_NAME="${REGISTRY}/${PROJECT_ID}/${IMAGE_NAME}:${IMAGE_TAG}" # Check if service config exists if [ ! -f "$SERVICE_CONFIG" ]; then echo "Error: Service configuration file not found at $SERVICE_CONFIG" exit 1 fi # Build the image if BUILD=true if [ "${BUILD:-false}" = "true" ]; then echo "Building Docker image: ${FULL_IMAGE_NAME}" docker build -t "${FULL_IMAGE_NAME}" -f Dockerfile . echo "Build completed successfully" fi # Push the image if PUSH=true if [ "${PUSH:-false}" = "true" ]; then echo "Pushing image to registry: ${FULL_IMAGE_NAME}" docker push "${FULL_IMAGE_NAME}" echo "Image pushed successfully" fi # Update the image in the service configuration echo "Updating image reference in service configuration..." TMP_CONFIG=$(mktemp) sed "s|image: .*|image: ${FULL_IMAGE_NAME}|g" "$SERVICE_CONFIG" > "$TMP_CONFIG" echo "Deploying to Cloud Run using configuration..." gcloud run services replace "$TMP_CONFIG" \ --project="$PROJECT_ID" \ --region="$REGION" \ --platform=managed rm "$TMP_CONFIG" echo "Deployment completed successfully" echo "Service URL: $(gcloud run services describe sereact --region=${REGION} --project=${PROJECT_ID} --format='value(status.url)')" echo "To view logs: gcloud logging read 'resource.type=cloud_run_revision AND resource.labels.service_name=sereact' --project=$PROJECT_ID --limit=10"