Skip to content

Database migration with a dry run

Writes the migration, dry-runs it in an ephemeral container, and puts the output in front of a person. The pull request opens only if they approve what it would do.

Template db-migration-dry-run
Works on A git repository, cloned into an isolated Docker sandbox
Where a person acts Approve migration plan before opening PR — a person approves or rejects, waiting up to 24h
Container step Runs a command in an ephemeral container

Drawn from the template spec at build time. Bookkeeping nodes that only record status are left out; amber nodes are where a person acts.

flowchart TD
  n_validate["Validate"]
  n_implement["Implement"]
  n_dryRunMigration["Dry run migration<br/><small>sandboxed container</small>"]
  n_reviewMigrationPlan>"Approve migration plan before opening PR<br/><small>person: approval</small>"]
  n_openPR["Open PR"]
  n_terminateRejected(["Failed<br/><small>rejected</small>"])
  n_terminateTimedOut(["Timed out"])
  n_done(["Done"])
  n_validate --> n_implement
  n_implement --> n_dryRunMigration
  n_dryRunMigration --> n_reviewMigrationPlan
  n_reviewMigrationPlan -->|"approved"| n_openPR
  n_reviewMigrationPlan -->|"rejected"| n_terminateRejected
  n_reviewMigrationPlan -->|"timed out"| n_terminateTimedOut
  n_openPR --> n_done
  class n_reviewMigrationPlan gate

Ships as a built-in template and reuses the engineering steps the flagship flow runs. This particular arrangement of them is not separately exercised end to end against a real repository. See product overview §8.

Every built-in template is seeded into the workflow library and can be cloned, edited on the visual canvas, and versioned — see architecture for the node types. The spec lives in packages/shared/src/workflow/templates/dbMigrationDryRun.ts.

© 2026 Jorge Barnaby

Source-available under FSL-1.1-MIT

Source on GitHub

Built with Astro and Starlight