Documentation & Help

Supported database pairs, known limitations, and migration guides

Run migrations from CI

Every action in the app is also an API call. Create a key under API Keys, store it as a repo secret, and trigger migrations from any pipeline. The Idempotency-Key header makes retried workflow runs safe — the same key replays the original response instead of starting a duplicate job.

GitHub Actions — nightly staging refresh

name: Nightly staging refresh
on:
  schedule:
    - cron: "0 3 * * *"   # 03:00 UTC daily
  workflow_dispatch: {}    # manual runs too

jobs:
  migrate:
    runs-on: ubuntu-latest
    steps:
      - name: Trigger migration
        run: |
          curl -sf -X POST "$DBSHIFT_URL/api/v1/projects/$PROJECT_ID/migrate" \
            -H "Authorization: Bearer $DBSHIFT_API_KEY" \
            -H "Idempotency-Key: gh-${{ github.run_id }}"
        env:
          DBSHIFT_URL: ${{ vars.DBSHIFT_URL }}
          PROJECT_ID: ${{ vars.DBSHIFT_PROJECT_ID }}
          DBSHIFT_API_KEY: ${{ secrets.DBSHIFT_API_KEY }}

      - name: Wait for completion
        run: |
          for i in $(seq 1 240); do
            STATUS=$(curl -sf "$DBSHIFT_URL/api/v1/projects/$PROJECT_ID" \
              -H "Authorization: Bearer $DBSHIFT_API_KEY" | jq -r .status)
            echo "status: $STATUS"
            case "$STATUS" in
              completed) exit 0 ;;
              completed_with_errors|failed|cancelled) exit 1 ;;
            esac
            sleep 30
          done
          echo "timed out"; exit 1
        env:
          DBSHIFT_URL: ${{ vars.DBSHIFT_URL }}
          PROJECT_ID: ${{ vars.DBSHIFT_PROJECT_ID }}
          DBSHIFT_API_KEY: ${{ secrets.DBSHIFT_API_KEY }}

This file also ships in the repo at examples/github-actions/dbshift-migrate.yml. Prefer in-app scheduling? The Schedules page supports recurring cron runs natively — CI is for gating deploys on a fresh migration.

Raw API calls

# Create an API key once (Dashboard → API Keys), then:

# Trigger analyze / migrate / validate
curl -X POST https://your-host/api/v1/projects/<id>/analyze \
  -H "Authorization: Bearer dbshift_..."

# Poll project status (created → analyzing → analyzed → migrating → completed)
curl https://your-host/api/v1/projects/<id> \
  -H "Authorization: Bearer dbshift_..."

# Fetch validation results after a run
curl https://your-host/api/v1/projects/<id> \
  -H "Authorization: Bearer dbshift_..." | jq .validationResult.status

Full interactive reference at /api/docs (Swagger) on your API host.

Need more help? Use the migration guides or the error reference, or contact your workspace administrator for support.