No description
Find a file
Joakim Carlstein 61cbcbd691 fix(cli): force exiting after 10 seconds should not change the exit code
If all migrations have been run successfully we want the exit code to be 0 even though we had to force exit the process.
This is because on some platforms (e.g. Bun) all handles are not cleaned up the same as in NodeJS, so lets be forgiving.
2024-02-05 15:48:55 +01:00
.changeset fix(cli): force exiting after 10 seconds should not change the exit code 2024-02-05 15:48:55 +01:00
.github chore: enable NPM provenance 2024-02-05 15:08:47 +01:00
.husky chore: first commit 🎉 2023-11-08 11:41:05 +01:00
bin chore: first commit 🎉 2023-11-08 11:41:05 +01:00
docs chore(release): version packages 2024-02-05 14:54:05 +01:00
packages fix(cli): force exiting after 10 seconds should not change the exit code 2024-02-05 15:48:55 +01:00
.editorconfig docs: split the getting started guide into two separate pages in the "introduction" section 2023-12-18 15:32:53 +01:00
.gitignore chore: first commit 🎉 2023-11-08 11:41:05 +01:00
.npmrc chore: add some package init defaults 2023-11-09 09:00:56 +01:00
.nvmrc chore: first commit 🎉 2023-11-08 11:41:05 +01:00
.prettierignore chore: first commit 🎉 2023-11-08 11:41:05 +01:00
.prettierrc chore: first commit 🎉 2023-11-08 11:41:05 +01:00
commitlint.config.js chore: first commit 🎉 2023-11-08 11:41:05 +01:00
LICENSE chore: first commit 🎉 2023-11-08 11:41:05 +01:00
package.json chore: allow many parameters in test files 2024-01-26 16:09:49 +01:00
pnpm-lock.yaml chore(deps): bump cosmiconfig from 8.3.6 to 9.0.0 2024-01-18 14:50:14 +01:00
pnpm-workspace.yaml docs: first commit for the docs 2023-12-18 15:32:53 +01:00
README.md feat(cli): improve the "up" commands --from and --to options 2024-01-26 09:13:03 +01:00
turbo.json chore: remove dependencies from "build:watch" task as it can make the process halt/exit 2023-12-08 13:14:56 +01:00

Emigrate

The modern, modular and flexible migration tool for any database

It's effectively a successor of klei-migrate and Immigration.

📖 Read the documentation for more information!

Features

  • Database agnostic
    • Emigrate can migrate any database
  • Works at any scale
    • Supports any database as storage so multiple instances of the same app can share the same migration history
    • Supports multiple projects/apps doing migrations on the same database without interfering with each other
    • Uses smart locking to ensure only one instance migrates a certain migration at a time
    • Thanks to the smart locking it's safe to run migrations in parallel
  • Can be run inside containers
    • It's common for Docker or Kubernetes to kill containers with health checks if migrations takes too long to run
    • Emigrate makes sure the migration history does not get stuck in a locked state if that's the case
  • Supports any file type for your migration files
    • You can easily write migrations in JavaScript, TypeScript or plain SQL (or any other language)
    • JavaScript migration files written using CommonJS or ES modules (ESM) are supported out of the box
    • You can customize the template for your migration files to fit your needs (or use a plugin to do it for you)
  • Easy to debug
    • Emigrate will store any errors that occur during migration in the migration history so you can easily debug them

Installation

Install the Emigrate CLI in your project:

npm install @emigrate/cli
# or
pnpm add @emigrate/cli
# or
yarn add @emigrate/cli
# or
bun add @emigrate/cli

Usage

Usage: emigrate up [options]

Run all pending migrations

Options:

  -h, --help              Show this help message and exit

  -d, --directory <path>  The directory where the migration files are located (required)

  -i, --import <module>   Additional modules/packages to import before running the migrations (can be specified multiple times)
                          For example if you want to use Dotenv to load environment variables or when using TypeScript

  -s, --storage <name>    The storage to use for where to store the migration history (required)

  -p, --plugin <name>     The plugin(s) to use (can be specified multiple times)

  -r, --reporter <name>   The reporter to use for reporting the migration progress

  -l, --limit <count>     Limit the number of migrations to run

  -f, --from <name/path>  Start running migrations from the given migration name or relative file path to a migration file,
                          the given name or path needs to exist. The same migration and those after it lexicographically will be run

  -t, --to <name/path>    Skip migrations after the given migration name or relative file path to a migration file,
                          the given name or path needs to exist. The same migration and those before it lexicographically will be run

  --dry                   List the pending migrations that would be run without actually running them

  --color                 Force color output (this option is passed to the reporter)

  --no-color              Disable color output (this option is passed to the reporter)

  --no-execution          Mark the migrations as executed and successful without actually running them,
                          which is useful if you want to mark migrations as successful after running them manually

  --abort-respite <sec>   The number of seconds to wait before abandoning running migrations after the command has been aborted (default: 10)

Examples:

  emigrate up --directory src/migrations -s fs
  emigrate up -d ./migrations --storage @emigrate/mysql
  emigrate up -d src/migrations -s postgres -r json --dry
  emigrate up -d ./migrations -s mysql --import dotenv/config
  emigrate up --limit 1
  emigrate up --to 20231122120529381_some_migration_file.js
  emigrate up --to 20231122120529381_some_migration_file.js --no-execution

Examples

Create a new migration:

npx emigrate new -d migrations create some fancy table
# or
pnpm emigrate new -d migrations create some fancy table
# or
yarn emigrate new -d migrations create some fancy table
# or
bunx --bun emigrate new -d migrations create some fancy table

Will create a new empty JavaScript migration file with the name "YYYYMMDDHHmmssuuu_create_some_fancy_table.js" in the migrations directory.

License

Emigrate is licensed under the MIT license. See LICENSE for the full license text.