migrate/cli
Matthias Kadenbach c03b03c909
return status 0 for ErrNoChange #182
2017-03-12 12:33:13 -07:00
..
examples add example dockerfile 2017-02-23 13:13:02 -08:00
README.md Update README.md 2017-02-23 13:36:34 -08:00
build_github.go initial version 3.0.0 preview 2017-02-07 22:01:29 -08:00
build_go-bindata.go initial version 3.0.0 preview 2017-02-07 22:01:29 -08:00
build_mysql.go add mysql driver, add ENV to docker containers 2017-02-28 15:10:56 -08:00
build_postgres.go initial version 3.0.0 preview 2017-02-07 22:01:29 -08:00
commands.go return status 0 for ErrNoChange #182 2017-03-12 12:33:13 -07:00
log.go initial version 3.0.0 preview 2017-02-07 22:01:29 -08:00
main.go remove cleanpath, fix mysql ensureVersionTable 2017-03-01 11:48:38 -08:00
version.go initial version 3.0.0 preview 2017-02-07 22:01:29 -08:00

README.md

migrate CLI

Installation

With Go toolchain

$ go get -u -tags 'postgres' -o migrate github.com/mattes/migrate/cli

MacOS

(todo #156)

$ brew install migrate --with-postgres

Linux (*.deb package)

$ curl -L https://packagecloud.io/mattes/migrate/gpgkey | apt-key add -
$ echo "deb https://packagecloud.io/mattes/migrate/ubuntu/ xenial main" > /etc/apt/sources.list.d/migrate.list
$ apt-get update
$ apt-get install -y migrate

Download pre-build binary (Windows, MacOS, or Linux)

Release Downloads

$ curl -L https://github.com/mattes/migrate/releases/download/$version/migrate.$platform-amd64.tar.gz | tar xvz

Usage

$ migrate -help
Usage: migrate OPTIONS COMMAND [arg...]
       migrate [ -version | -help ]

Options:
  -source          Location of the migrations (driver://url)
  -path            Shorthand for -source=file://path 
  -database        Run migrations against this database (driver://url)
  -prefetch N      Number of migrations to load in advance before executing (default 10)
  -lock-timeout N  Allow N seconds to acquire database lock (default 15)
  -verbose         Print verbose logging
  -version         Print version
  -help            Print usage

Commands:
  goto V       Migrate to version V
  up [N]       Apply all or N up migrations
  down [N]     Apply all or N down migrations
  drop         Drop everyting inside database
  force V      Set version V but don't run migration (ignores dirty state)
  version      Print current migration version

So let's say you want to run the first two migrations

$ migrate -database postgres://localhost:5432/database up 2

If your migrations are hosted on github

$ migrate -source github://mattes:personal-access-token@mattes/migrate_test \
    -database postgres://localhost:5432/database down 2

The CLI will gracefully stop at a safe point when SIGINT (ctrl+c) is received. Send SIGKILL for immediate halt.

Reading CLI arguments from somewhere else

ENV variables
$ migrate -database "$MY_MIGRATE_DATABASE"
JSON files

Check out https://stedolan.github.io/jq/

$ migrate -database "$(cat config.json | jq '.database')"
YAML files
$ migrate -database "$(cat config/database.yml | ruby -ryaml -e "print YAML.load(STDIN.read)['database']")"
$ migrate -database "$(cat config/database.yml | python -c 'import yaml,sys;print yaml.safe_load(sys.stdin)["database"]')"
```