migrate/cli
Matthias Kadenbach eb02bc77fb
allow to force NilVersion
2017-02-19 16:06:11 -08:00
..
README.md bring back dirty state from v2 2017-02-19 15:15:00 -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_postgres.go initial version 3.0.0 preview 2017-02-07 22:01:29 -08:00
commands.go allow to force NilVersion 2017-02-19 16:06:11 -08:00
log.go initial version 3.0.0 preview 2017-02-07 22:01:29 -08:00
main.go allow to force NilVersion 2017-02-19 16:06:11 -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 (with deb package)

# TODO: add key and repo
$ apt-get update
$ apt-get install 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"]')"
```