CI/CD Pipelines

Cloud Build handles all CI/CD. Triggers fire on push to master with includedFiles path filtering — only the affected target rebuilds. YAML configs live in cloudbuild/.

Triggers

Trigger Watches Deploys Timeout
deploy-blog frontend/, content/, shared/, tools/build/, package.json Hosting (blog) 1200s
deploy-functions functions/, shared/ Cloud Functions
deploy-firestore Firestore rules files Firestore rules
deploy-sludge-report sludge-report/ Hosting (sludge-report) 300s
deploy-remote-config Remote Config template Remote Config
deploy-docs-site docs-site/, docs/, spec/, .claude/agents/ Hosting (docs) 600s

All triggers use the cloud-build-deployer-sa service account.

Blog Deploy Pipeline

The blog deploy (cloudbuild/deploy-blog.yaml) is the most complex pipeline:

  1. restore-cache — npm cache from gs://{PROJECT_ID}-build-cache/
  2. buildnpm ci + npm run build
  3. save-cache — Cache node_modules (keyed on package-lock.json hash)
  4. deploy-hostingfirebase deploy --only hosting:blog
  5. stage-content — Extract published posts manifest
  6. sync-contentgsutil rsync to Ernest AI content bucket
  7. linkedin-scan — Trigger LinkedIn autoposter scan

Scheduled Operations

Schedule Frequency Purpose
scheduled-blog-rebuild Mon & Thu at 07:00 UTC Publish scheduled posts
Security scan Weekly OWASP ZAP baseline against production