func main()

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)
	}
}