package sql import ( "database/sql" "emperror.dev/errors" "git.sleepycat.moe/sam/mercury/internal/database/migrations" _ "github.com/jackc/pgx/v5/stdlib" "github.com/rs/zerolog/log" migrate "github.com/rubenv/sql-migrate" ) func Migrate(dsn string) error { db, err := sql.Open("pgx", dsn) if err != nil { return errors.Wrap(err, "opening database") } defer db.Close() if err := db.Ping(); err != nil { return errors.Wrap(err, "pinging database") } migrations := &migrate.EmbedFileSystemMigrationSource{ FileSystem: migrations.FS, Root: ".", } n, err := migrate.Exec(db, "postgres", migrations, migrate.Up) if err != nil { return errors.Wrap(err, "executing migrations") } log.Info().Int("count", n).Msg("Performed migrations!") return nil }