video-accessibility/infra/cloud-run/cloudbuild.yaml
michael 54638d1065 feat: switch Whisper model from large-v3 to medium
Medium model is faster and uses less memory (~1.5GB vs ~3GB)
while still providing good multilingual transcription quality.

Updated in:
- config.py
- docker-compose.yml
- whisper-worker-service.yaml
- cloudbuild.yaml
- Dockerfile (pre-download)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 22:35:47 -06:00

121 lines
No EOL
4.8 KiB
YAML

steps:
# Build the Docker images
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-f', 'backend/Dockerfile', '--target', 'api', '-t', 'gcr.io/$PROJECT_ID/accessible-video-api:$COMMIT_SHA', 'backend/']
id: 'build-api'
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-f', 'backend/Dockerfile', '--target', 'worker', '-t', 'gcr.io/$PROJECT_ID/accessible-video-worker:$COMMIT_SHA', 'backend/']
id: 'build-worker'
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-f', 'backend/Dockerfile', '--target', 'whisper-worker', '-t', 'gcr.io/$PROJECT_ID/accessible-video-whisper-worker:$COMMIT_SHA', 'backend/']
id: 'build-whisper-worker'
# Push the images to Container Registry
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/accessible-video-api:$COMMIT_SHA']
id: 'push-api'
waitFor: ['build-api']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/accessible-video-worker:$COMMIT_SHA']
id: 'push-worker'
waitFor: ['build-worker']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/accessible-video-whisper-worker:$COMMIT_SHA']
id: 'push-whisper-worker'
waitFor: ['build-whisper-worker']
# Deploy API service to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'gcloud'
args:
- 'run'
- 'deploy'
- 'accessible-video-api'
- '--image=gcr.io/$PROJECT_ID/accessible-video-api:$COMMIT_SHA'
- '--region=$_REGION'
- '--platform=managed'
- '--allow-unauthenticated'
- '--port=8000'
- '--memory=2Gi'
- '--cpu=2'
- '--min-instances=1'
- '--max-instances=10'
- '--concurrency=100'
- '--timeout=3600'
- '--set-env-vars=APP_ENV=prod,PYTHONPATH=/app'
- '--set-secrets=MONGODB_URL=projects/$PROJECT_ID/secrets/mongodb-url:latest'
- '--set-secrets=REDIS_URL=projects/$PROJECT_ID/secrets/redis-url:latest'
- '--set-secrets=JWT_SECRET_KEY=projects/$PROJECT_ID/secrets/jwt-secret:latest'
- '--set-secrets=GEMINI_API_KEY=projects/$PROJECT_ID/secrets/gemini-api-key:latest'
- '--set-secrets=SENDGRID_API_KEY=projects/$PROJECT_ID/secrets/sendgrid-api-key:latest'
- '--set-secrets=ELEVENLABS_API_KEY=projects/$PROJECT_ID/secrets/elevenlabs-api-key:latest'
- '--service-account=accessible-video-api@$PROJECT_ID.iam.gserviceaccount.com'
id: 'deploy-api'
waitFor: ['push-api']
# Deploy Worker service to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'gcloud'
args:
- 'run'
- 'deploy'
- 'accessible-video-worker'
- '--image=gcr.io/$PROJECT_ID/accessible-video-worker:$COMMIT_SHA'
- '--region=$_REGION'
- '--platform=managed'
- '--no-allow-unauthenticated'
- '--memory=4Gi'
- '--cpu=4'
- '--min-instances=0'
- '--max-instances=5'
- '--concurrency=1'
- '--timeout=3600'
- '--set-env-vars=APP_ENV=prod,PYTHONPATH=/app,C_FORCE_ROOT=1'
- '--set-secrets=MONGODB_URL=projects/$PROJECT_ID/secrets/mongodb-url:latest'
- '--set-secrets=REDIS_URL=projects/$PROJECT_ID/secrets/redis-url:latest'
- '--set-secrets=GEMINI_API_KEY=projects/$PROJECT_ID/secrets/gemini-api-key:latest'
- '--set-secrets=ELEVENLABS_API_KEY=projects/$PROJECT_ID/secrets/elevenlabs-api-key:latest'
- '--service-account=accessible-video-worker@$PROJECT_ID.iam.gserviceaccount.com'
id: 'deploy-worker'
waitFor: ['push-worker']
# Deploy Whisper Worker service to Cloud Run
# Dedicated worker for Whisper transcription with concurrency=1
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'gcloud'
args:
- 'run'
- 'deploy'
- 'accessible-video-whisper-worker'
- '--image=gcr.io/$PROJECT_ID/accessible-video-whisper-worker:$COMMIT_SHA'
- '--region=$_REGION'
- '--platform=managed'
- '--no-allow-unauthenticated'
- '--memory=8Gi'
- '--cpu=4'
- '--min-instances=0'
- '--max-instances=3'
- '--concurrency=1'
- '--timeout=3600'
- '--set-env-vars=APP_ENV=prod,PYTHONPATH=/app,C_FORCE_ROOT=1,WHISPER_MODEL=medium'
- '--set-secrets=MONGODB_URL=projects/$PROJECT_ID/secrets/mongodb-url:latest'
- '--set-secrets=REDIS_URL=projects/$PROJECT_ID/secrets/redis-url:latest'
- '--set-secrets=GEMINI_API_KEY=projects/$PROJECT_ID/secrets/gemini-api-key:latest'
- '--set-secrets=ELEVENLABS_API_KEY=projects/$PROJECT_ID/secrets/elevenlabs-api-key:latest'
- '--service-account=accessible-video-worker@$PROJECT_ID.iam.gserviceaccount.com'
id: 'deploy-whisper-worker'
waitFor: ['push-whisper-worker']
substitutions:
_REGION: 'us-central1'
options:
machineType: 'E2_HIGHCPU_8'
diskSizeGb: '100'
dynamic_substitutions: true
timeout: '1800s'