in tools/migration/rdbms/main.go [62:111]
func main() {
if len(os.Args) < 2 {
flags.Usage()
return
}
flags.Usage = usage
err := flags.Parse(os.Args[1:])
if err != nil {
flags.Usage()
panic(err)
}
logLevel := logger.LevelInfo
if *flagDebug {
logLevel = logger.LevelDebug
}
var ctx = logrusctx.NewContext(logLevel)
ctx.Logger().OriginalLogger().(*logrus.Entry).Logger.SetOutput(os.Stdout)
if *flagDir == "" {
flags.Usage()
ctx.Logger().Fatalf("migration directory was not specified")
}
for _, m := range migrate.Migrations {
migration := m.Factory(ctx.WithField("migration", filepath.Base(m.Name)))
goose.AddNamedMigration(m.Name, migration.Up, migration.Down)
}
command := os.Args[len(os.Args)-1]
db, err := goose.OpenDBWithDriver(*flagDBDriver, *flagDBURI)
if err != nil {
ctx.Logger().Fatalf("failed to open DB: %v", err)
}
if err := db.Ping(); err != nil {
ctx.Logger().Fatalf("db not reachable: %v", err)
}
defer func() {
if err := db.Close(); err != nil {
ctx.Logger().Fatalf("failed to close DB: %v", err)
}
}()
if err := goose.Run(command, db, *flagDir, flags.Args()...); err != nil {
ctx.Logger().Fatalf("could not run command %v for migration: %v", command, err)
}
}