#!/bin/bash
set -e
# Deploy political ads ingestion Cloud Run job
# This job runs weekly to refresh Meta Ad Library data
PROJECT_ID="canada-gpt-ca"
REGION="us-central1"
JOB_NAME="political-ads-ingestion"
IMAGE_NAME="us-central1-docker.pkg.dev/${PROJECT_ID}/canadagpt/${JOB_NAME}"
echo "================================================================================"
echo "DEPLOYING POLITICAL ADS INGESTION JOB"
echo "================================================================================"
# Check if meta-ad-library-token secret exists
echo "Checking for Meta Ad Library token secret..."
if ! gcloud secrets describe meta-ad-library-token --project="${PROJECT_ID}" &>/dev/null; then
echo ""
echo "ERROR: meta-ad-library-token secret not found!"
echo ""
echo "To set up the Meta Ad Library integration:"
echo " 1. Complete identity verification at https://business.facebook.com/"
echo " 2. Request Ad Library API access (takes 1-2 business days)"
echo " 3. Generate an access token"
echo " 4. Create the secret:"
echo " echo -n 'your-token-here' | gcloud secrets create meta-ad-library-token --data-file=- --project=${PROJECT_ID}"
echo ""
exit 1
fi
# Get Neo4j password from Secret Manager
echo "Fetching Neo4j password from Secret Manager..."
NEO4J_PASSWORD=$(gcloud secrets versions access latest --secret="neo4j-password" --project="${PROJECT_ID}")
# Build and push Docker image using Cloud Build
echo "Building Docker image with Cloud Build..."
gcloud builds submit \
--config=packages/data-pipeline/cloudbuild-political-ads-ingestion.yaml \
--project=${PROJECT_ID} \
.
# Check if job exists
if gcloud run jobs describe ${JOB_NAME} --region=${REGION} --project=${PROJECT_ID} &>/dev/null; then
echo "Updating existing Cloud Run job..."
gcloud run jobs update ${JOB_NAME} \
--region=${REGION} \
--image=${IMAGE_NAME}:latest \
--set-env-vars="NEO4J_URI=bolt://10.128.0.3:7687,NEO4J_USERNAME=neo4j" \
--set-secrets="NEO4J_PASSWORD=neo4j-password:latest,META_AD_LIBRARY_TOKEN=meta-ad-library-token:latest" \
--vpc-connector=canadagpt-connector \
--vpc-egress=private-ranges-only \
--max-retries=1 \
--task-timeout=30m \
--memory=2Gi \
--cpu=1 \
--project=${PROJECT_ID}
else
echo "Creating new Cloud Run job..."
gcloud run jobs create ${JOB_NAME} \
--region=${REGION} \
--image=${IMAGE_NAME}:latest \
--set-env-vars="NEO4J_URI=bolt://10.128.0.3:7687,NEO4J_USERNAME=neo4j" \
--set-secrets="NEO4J_PASSWORD=neo4j-password:latest,META_AD_LIBRARY_TOKEN=meta-ad-library-token:latest" \
--vpc-connector=canadagpt-connector \
--vpc-egress=private-ranges-only \
--max-retries=1 \
--task-timeout=30m \
--memory=2Gi \
--cpu=1 \
--project=${PROJECT_ID}
fi
echo "✓ Cloud Run job deployed successfully"
# Create or update Cloud Scheduler job to run weekly on Mondays at 4am UTC
SCHEDULER_JOB_NAME="political-ads-ingestion-trigger"
echo "Setting up Cloud Scheduler..."
# Check if scheduler job exists
if gcloud scheduler jobs describe ${SCHEDULER_JOB_NAME} --location=${REGION} --project=${PROJECT_ID} &>/dev/null; then
echo "Updating existing scheduler job..."
gcloud scheduler jobs update http ${SCHEDULER_JOB_NAME} \
--location=${REGION} \
--schedule="0 4 * * 1" \
--time-zone="UTC" \
--uri="https://${REGION}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${PROJECT_ID}/jobs/${JOB_NAME}:run" \
--http-method=POST \
--oauth-service-account-email="${PROJECT_ID}@appspot.gserviceaccount.com" \
--project=${PROJECT_ID}
else
echo "Creating new scheduler job..."
gcloud scheduler jobs create http ${SCHEDULER_JOB_NAME} \
--location=${REGION} \
--schedule="0 4 * * 1" \
--time-zone="UTC" \
--uri="https://${REGION}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${PROJECT_ID}/jobs/${JOB_NAME}:run" \
--http-method=POST \
--oauth-service-account-email="${PROJECT_ID}@appspot.gserviceaccount.com" \
--project=${PROJECT_ID}
fi
echo "✓ Cloud Scheduler configured to run weekly on Mondays at 4:00 AM UTC"
echo "================================================================================"
echo "✅ DEPLOYMENT COMPLETE"
echo "================================================================================"
echo ""
echo "Job Name: ${JOB_NAME}"
echo "Image: ${IMAGE_NAME}:latest"
echo "Schedule: Weekly on Mondays at 4:00 AM UTC"
echo ""
echo "To manually trigger the job:"
echo " gcloud run jobs execute ${JOB_NAME} --region=${REGION}"
echo ""
echo "To view logs:"
echo " gcloud logging read \"resource.type=cloud_run_job AND resource.labels.job_name=${JOB_NAME}\" --limit=50 --format=json"
echo ""