From 32fea20476c77ed1b10132825bd5937ff4aae6c3 Mon Sep 17 00:00:00 2001 From: Tigor Hutasuhut Date: Thu, 23 May 2024 22:31:09 +0700 Subject: [PATCH] serve: run migrations on startup --- cli/serve.go | 5 +++++ db/db.go | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/cli/serve.go b/cli/serve.go index 58546b3..2d0ad91 100644 --- a/cli/serve.go +++ b/cli/serve.go @@ -28,6 +28,11 @@ var serveCmd = &cobra.Command{ } defer tele.Close() + if err := db.RunMigrations(cfg); err != nil { + log.New(cmd.Context()).Err(err).Error("failed to run migrations") + os.Exit(1) + } + database, err := db.NewComfy(cfg) if err != nil { log.New(cmd.Context()).Err(err).Error("failed to open database") diff --git a/db/db.go b/db/db.go index 9fc4822..ba4a72b 100644 --- a/db/db.go +++ b/db/db.go @@ -69,3 +69,26 @@ func ApplyLogger(cfg *config.Config, db *sql.DB) *sql.DB { sqldblogger.WithSQLQueryAsMessage(true), ) } + +func RunMigrations(cfg *config.Config) error { + if cfg.Bool("db.automigrate") { + driver := cfg.String("db.driver") + dsn := cfg.String("db.string") + db, err := sql.Open(driver, dsn) + if err != nil { + return errs.Wrapw(err, "migration: failed to open database", "driver", driver, "db.string", dsn) + } + defer db.Close() + goose.SetLogger(goose.NopLogger()) + goose.SetBaseFS(Migrations) + + if err := goose.SetDialect(driver); err != nil { + return errs.Wrapw(err, "failed to set goose dialect", "dialect", driver, "dsn", dsn) + } + + if err := goose.Up(db, "db/migrations"); err != nil { + return errs.Wrapw(err, "failed to migrate database", "dialect", driver, "dsn", dsn) + } + } + return nil +}