#!/bin/bash
set -e
# Deploy Email Digest Cloud Run jobs (daily and weekly)
# These jobs send digest emails to opted-in users
PROJECT_ID="canada-gpt-ca"
REGION="us-central1"
IMAGE_NAME="gcr.io/${PROJECT_ID}/email-digest-job"
echo "================================================================================"
echo "DEPLOYING EMAIL DIGEST JOBS"
echo "================================================================================"
# Get secrets from Secret Manager
echo "Fetching secrets from Secret Manager..."
SUPABASE_SERVICE_ROLE_KEY=$(gcloud secrets versions access latest --secret="supabase-service-role-key" --project="${PROJECT_ID}")
RESEND_API_KEY=$(gcloud secrets versions access latest --secret="resend-api-key" --project="${PROJECT_ID}")
# Build and push Docker image
echo "Building Docker image..."
docker build \
--platform linux/amd64 \
-f Dockerfile.email-digest \
-t ${IMAGE_NAME}:latest \
.
echo "Pushing image to Container Registry..."
docker push ${IMAGE_NAME}:latest
# ============================================================================
# DAILY DIGEST JOB
# ============================================================================
DAILY_JOB_NAME="email-digest-daily"
echo ""
echo "Setting up DAILY digest job..."
if gcloud run jobs describe ${DAILY_JOB_NAME} --region=${REGION} --project=${PROJECT_ID} &>/dev/null; then
echo "Updating existing daily job..."
gcloud run jobs update ${DAILY_JOB_NAME} \
--region=${REGION} \
--image=${IMAGE_NAME}:latest \
--set-env-vars="SUPABASE_URL=https://pbxyhcdzdovsdlsyixsk.supabase.co,RESEND_FROM_EMAIL=digests@canadagpt.ca,RESEND_FROM_NAME=CanadaGPT" \
--set-secrets="SUPABASE_SERVICE_ROLE_KEY=supabase-service-role-key:latest,RESEND_API_KEY=resend-api-key:latest" \
--args="daily" \
--max-retries=1 \
--task-timeout=15m \
--memory=2Gi \
--cpu=1 \
--project=${PROJECT_ID}
else
echo "Creating new daily job..."
gcloud run jobs create ${DAILY_JOB_NAME} \
--region=${REGION} \
--image=${IMAGE_NAME}:latest \
--set-env-vars="SUPABASE_URL=https://pbxyhcdzdovsdlsyixsk.supabase.co,RESEND_FROM_EMAIL=digests@canadagpt.ca,RESEND_FROM_NAME=CanadaGPT" \
--set-secrets="SUPABASE_SERVICE_ROLE_KEY=supabase-service-role-key:latest,RESEND_API_KEY=resend-api-key:latest" \
--args="daily" \
--max-retries=1 \
--task-timeout=15m \
--memory=2Gi \
--cpu=1 \
--project=${PROJECT_ID}
fi
echo "✓ Daily digest job deployed successfully"
# Create or update Cloud Scheduler for DAILY digests (7:00 AM ET = 12:00 PM UTC)
DAILY_SCHEDULER_JOB="email-digest-daily-trigger"
echo "Setting up daily scheduler..."
if gcloud scheduler jobs describe ${DAILY_SCHEDULER_JOB} --location=${REGION} --project=${PROJECT_ID} &>/dev/null; then
echo "Updating existing daily scheduler..."
gcloud scheduler jobs update http ${DAILY_SCHEDULER_JOB} \
--location=${REGION} \
--schedule="0 12 * * *" \
--time-zone="UTC" \
--uri="https://${REGION}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${PROJECT_ID}/jobs/${DAILY_JOB_NAME}:run" \
--http-method=POST \
--oauth-service-account-email="${PROJECT_ID}@appspot.gserviceaccount.com" \
--project=${PROJECT_ID}
else
echo "Creating new daily scheduler..."
gcloud scheduler jobs create http ${DAILY_SCHEDULER_JOB} \
--location=${REGION} \
--schedule="0 12 * * *" \
--time-zone="UTC" \
--uri="https://${REGION}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${PROJECT_ID}/jobs/${DAILY_JOB_NAME}:run" \
--http-method=POST \
--oauth-service-account-email="${PROJECT_ID}@appspot.gserviceaccount.com" \
--project=${PROJECT_ID}
fi
echo "✓ Daily scheduler configured (7:00 AM ET / 12:00 PM UTC)"
# ============================================================================
# WEEKLY DIGEST JOB
# ============================================================================
WEEKLY_JOB_NAME="email-digest-weekly"
echo ""
echo "Setting up WEEKLY digest job..."
if gcloud run jobs describe ${WEEKLY_JOB_NAME} --region=${REGION} --project=${PROJECT_ID} &>/dev/null; then
echo "Updating existing weekly job..."
gcloud run jobs update ${WEEKLY_JOB_NAME} \
--region=${REGION} \
--image=${IMAGE_NAME}:latest \
--set-env-vars="SUPABASE_URL=https://pbxyhcdzdovsdlsyixsk.supabase.co,RESEND_FROM_EMAIL=digests@canadagpt.ca,RESEND_FROM_NAME=CanadaGPT" \
--set-secrets="SUPABASE_SERVICE_ROLE_KEY=supabase-service-role-key:latest,RESEND_API_KEY=resend-api-key:latest" \
--args="weekly" \
--max-retries=1 \
--task-timeout=20m \
--memory=2Gi \
--cpu=1 \
--project=${PROJECT_ID}
else
echo "Creating new weekly job..."
gcloud run jobs create ${WEEKLY_JOB_NAME} \
--region=${REGION} \
--image=${IMAGE_NAME}:latest \
--set-env-vars="SUPABASE_URL=https://pbxyhcdzdovsdlsyixsk.supabase.co,RESEND_FROM_EMAIL=digests@canadagpt.ca,RESEND_FROM_NAME=CanadaGPT" \
--set-secrets="SUPABASE_SERVICE_ROLE_KEY=supabase-service-role-key:latest,RESEND_API_KEY=resend-api-key:latest" \
--args="weekly" \
--max-retries=1 \
--task-timeout=20m \
--memory=2Gi \
--cpu=1 \
--project=${PROJECT_ID}
fi
echo "✓ Weekly digest job deployed successfully"
# Create or update Cloud Scheduler for WEEKLY digests (Every Monday 7:00 AM ET = 12:00 PM UTC)
WEEKLY_SCHEDULER_JOB="email-digest-weekly-trigger"
echo "Setting up weekly scheduler..."
if gcloud scheduler jobs describe ${WEEKLY_SCHEDULER_JOB} --location=${REGION} --project=${PROJECT_ID} &>/dev/null; then
echo "Updating existing weekly scheduler..."
gcloud scheduler jobs update http ${WEEKLY_SCHEDULER_JOB} \
--location=${REGION} \
--schedule="0 12 * * 1" \
--time-zone="UTC" \
--uri="https://${REGION}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${PROJECT_ID}/jobs/${WEEKLY_JOB_NAME}:run" \
--http-method=POST \
--oauth-service-account-email="${PROJECT_ID}@appspot.gserviceaccount.com" \
--project=${PROJECT_ID}
else
echo "Creating new weekly scheduler..."
gcloud scheduler jobs create http ${WEEKLY_SCHEDULER_JOB} \
--location=${REGION} \
--schedule="0 12 * * 1" \
--time-zone="UTC" \
--uri="https://${REGION}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${PROJECT_ID}/jobs/${WEEKLY_JOB_NAME}:run" \
--http-method=POST \
--oauth-service-account-email="${PROJECT_ID}@appspot.gserviceaccount.com" \
--project=${PROJECT_ID}
fi
echo "✓ Weekly scheduler configured (Monday 7:00 AM ET / 12:00 PM UTC)"
echo ""
echo "================================================================================"
echo "✅ DEPLOYMENT COMPLETE"
echo "================================================================================"
echo ""
echo "Daily Digest Job:"
echo " Name: ${DAILY_JOB_NAME}"
echo " Schedule: Every day at 7:00 AM ET (12:00 PM UTC)"
echo " Manual trigger: gcloud run jobs execute ${DAILY_JOB_NAME} --region=${REGION}"
echo ""
echo "Weekly Digest Job:"
echo " Name: ${WEEKLY_JOB_NAME}"
echo " Schedule: Every Monday at 7:00 AM ET (12:00 PM UTC)"
echo " Manual trigger: gcloud run jobs execute ${WEEKLY_JOB_NAME} --region=${REGION}"
echo ""
echo "View logs:"
echo " gcloud logging read \"resource.type=cloud_run_job AND resource.labels.job_name=${DAILY_JOB_NAME}\" --limit=50"
echo " gcloud logging read \"resource.type=cloud_run_job AND resource.labels.job_name=${WEEKLY_JOB_NAME}\" --limit=50"
echo ""