package db import ( "database/sql" "embed" "errors" "fmt" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/postgres" "github.com/golang-migrate/migrate/v4/source/iofs" ) //go:embed migrations/*.sql var migrationsFS embed.FS func Migrate(sqlDB *sql.DB) error { driver, err := postgres.WithInstance(sqlDB, &postgres.Config{}) if err != nil { return fmt.Errorf("db: creating migration driver: %w", err) } source, err := iofs.New(migrationsFS, "migrations") if err != nil { return fmt.Errorf("db: loading embedded migrations: %w", err) } m, err := migrate.NewWithInstance("iofs", source, "postgres", driver) if err != nil { return fmt.Errorf("db: initializing migrator: %w", err) } if err := m.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) { return fmt.Errorf("db: applying migrations: %w", err) } return nil }