ducky-dash/cmd/migrate/main.go

67 lines
1.5 KiB
Go

package main
import (
"database/sql"
"fmt"
"log"
// "log/slog"
"os"
"git.duckylabs.xyz/duckbox/ducky-dash/db"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/file"
"github.com/joho/godotenv"
)
func createDB() (*sql.DB, error) {
if err := godotenv.Load(); err != nil {
return nil, err
}
var (
host = os.Getenv("DB_HOST")
user = os.Getenv("DB_USER")
pass = os.Getenv("DB_PASSWORD")
dbname = os.Getenv("DB_NAME")
)
return db.CreateDatabase(dbname, user, pass, host)
}
func main() {
db, err := createDB()
if err != nil {
log.Fatal(err)
}
// Create migration instance
driver, err := postgres.WithInstance(db, &postgres.Config{})
if err != nil {
log.Fatal(err)
}
// Point to your migration files. Here we're using local files, but it could be other sources.
m, err := migrate.NewWithDatabaseInstance(
"file://cmd/migrate/migrations", // source URL
"postgres", // database name
driver, // database instance
)
if err != nil {
log.Fatal(err)
}
cmd := os.Args[len(os.Args)-1]
if cmd == "up" {
if err := m.Up(); err != nil && err != migrate.ErrNoChange {
fmt.Println("error running migrate up", "err", err)
log.Fatal(err)
}
}
if cmd == "down" {
if err := m.Down(); err != nil && err != migrate.ErrNoChange {
fmt.Println("error running migrate down", "err", err)
log.Fatal(err)
}
}
}