From fc7fc5ea855ccd013c5e229ff7a68f909525b728 Mon Sep 17 00:00:00 2001 From: Kelly Date: Thu, 11 Dec 2025 15:16:12 -0700 Subject: [PATCH] ci: Run migrations via kubectl exec instead of separate step MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes the migrate step that required db_* secrets (which CI can't access since postgres is cluster-internal). Instead, run migrations via kubectl exec on the deployed scraper pod, which already has DB access via its env vars. Deploy order: 1. Deploy scraper image 2. Wait for rollout 3. Run migrations via kubectl exec 4. Deploy remaining services 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .woodpecker.yml | 36 ++++++++---------------------------- .woodpecker/ci.yml | 36 ++++++++---------------------------- 2 files changed, 16 insertions(+), 56 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 1038f3b2..9056003f 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -160,32 +160,7 @@ steps: event: push # =========================================== - # STAGE 3: Run Database Migrations (before deploy) - # =========================================== - migrate: - image: code.cannabrands.app/creationshop/dispensary-scraper:${CI_COMMIT_SHA:0:8} - environment: - CANNAIQ_DB_HOST: - from_secret: db_host - CANNAIQ_DB_PORT: - from_secret: db_port - CANNAIQ_DB_NAME: - from_secret: db_name - CANNAIQ_DB_USER: - from_secret: db_user - CANNAIQ_DB_PASS: - from_secret: db_pass - commands: - - cd /app - - node dist/db/migrate.js - depends_on: - - docker-backend - when: - branch: master - event: push - - # =========================================== - # STAGE 4: Deploy (after migrations) + # STAGE 3: Deploy and Run Migrations # =========================================== deploy: image: bitnami/kubectl:latest @@ -196,15 +171,20 @@ steps: - mkdir -p ~/.kube - echo "$KUBECONFIG_CONTENT" | tr -d '[:space:]' | base64 -d > ~/.kube/config - chmod 600 ~/.kube/config + # Deploy backend first - kubectl set image deployment/scraper scraper=code.cannabrands.app/creationshop/dispensary-scraper:${CI_COMMIT_SHA:0:8} -n dispensary-scraper + - kubectl rollout status deployment/scraper -n dispensary-scraper --timeout=300s + # Run migrations via kubectl exec (uses pod's existing DB connection) + - echo "Running database migrations..." + - kubectl exec deployment/scraper -n dispensary-scraper -- node dist/db/migrate.js + # Deploy remaining services - kubectl set image deployment/scraper-worker worker=code.cannabrands.app/creationshop/dispensary-scraper:${CI_COMMIT_SHA:0:8} -n dispensary-scraper - kubectl set image deployment/cannaiq-frontend cannaiq-frontend=code.cannabrands.app/creationshop/cannaiq-frontend:${CI_COMMIT_SHA:0:8} -n dispensary-scraper - kubectl set image deployment/findadispo-frontend findadispo-frontend=code.cannabrands.app/creationshop/findadispo-frontend:${CI_COMMIT_SHA:0:8} -n dispensary-scraper - kubectl set image deployment/findagram-frontend findagram-frontend=code.cannabrands.app/creationshop/findagram-frontend:${CI_COMMIT_SHA:0:8} -n dispensary-scraper - - kubectl rollout status deployment/scraper -n dispensary-scraper --timeout=300s - kubectl rollout status deployment/cannaiq-frontend -n dispensary-scraper --timeout=120s depends_on: - - migrate + - docker-backend - docker-cannaiq - docker-findadispo - docker-findagram diff --git a/.woodpecker/ci.yml b/.woodpecker/ci.yml index 1038f3b2..9056003f 100644 --- a/.woodpecker/ci.yml +++ b/.woodpecker/ci.yml @@ -160,32 +160,7 @@ steps: event: push # =========================================== - # STAGE 3: Run Database Migrations (before deploy) - # =========================================== - migrate: - image: code.cannabrands.app/creationshop/dispensary-scraper:${CI_COMMIT_SHA:0:8} - environment: - CANNAIQ_DB_HOST: - from_secret: db_host - CANNAIQ_DB_PORT: - from_secret: db_port - CANNAIQ_DB_NAME: - from_secret: db_name - CANNAIQ_DB_USER: - from_secret: db_user - CANNAIQ_DB_PASS: - from_secret: db_pass - commands: - - cd /app - - node dist/db/migrate.js - depends_on: - - docker-backend - when: - branch: master - event: push - - # =========================================== - # STAGE 4: Deploy (after migrations) + # STAGE 3: Deploy and Run Migrations # =========================================== deploy: image: bitnami/kubectl:latest @@ -196,15 +171,20 @@ steps: - mkdir -p ~/.kube - echo "$KUBECONFIG_CONTENT" | tr -d '[:space:]' | base64 -d > ~/.kube/config - chmod 600 ~/.kube/config + # Deploy backend first - kubectl set image deployment/scraper scraper=code.cannabrands.app/creationshop/dispensary-scraper:${CI_COMMIT_SHA:0:8} -n dispensary-scraper + - kubectl rollout status deployment/scraper -n dispensary-scraper --timeout=300s + # Run migrations via kubectl exec (uses pod's existing DB connection) + - echo "Running database migrations..." + - kubectl exec deployment/scraper -n dispensary-scraper -- node dist/db/migrate.js + # Deploy remaining services - kubectl set image deployment/scraper-worker worker=code.cannabrands.app/creationshop/dispensary-scraper:${CI_COMMIT_SHA:0:8} -n dispensary-scraper - kubectl set image deployment/cannaiq-frontend cannaiq-frontend=code.cannabrands.app/creationshop/cannaiq-frontend:${CI_COMMIT_SHA:0:8} -n dispensary-scraper - kubectl set image deployment/findadispo-frontend findadispo-frontend=code.cannabrands.app/creationshop/findadispo-frontend:${CI_COMMIT_SHA:0:8} -n dispensary-scraper - kubectl set image deployment/findagram-frontend findagram-frontend=code.cannabrands.app/creationshop/findagram-frontend:${CI_COMMIT_SHA:0:8} -n dispensary-scraper - - kubectl rollout status deployment/scraper -n dispensary-scraper --timeout=300s - kubectl rollout status deployment/cannaiq-frontend -n dispensary-scraper --timeout=120s depends_on: - - migrate + - docker-backend - docker-cannaiq - docker-findadispo - docker-findagram