package main import ( "database/sql" "embed" "fmt" "log/slog" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/sqlite3" "github.com/golang-migrate/migrate/v4/source/iofs" ) //go:embed migrations/*.sql var migrations embed.FS func runMigrations(db *sql.DB) error { source, err := iofs.New(migrations, "migrations") if err != nil { return fmt.Errorf("creating migration source: %w", err) } driver, err := sqlite3.WithInstance(db, &sqlite3.Config{}) if err != nil { return fmt.Errorf("creating migration driver: %w", err) } m, err := migrate.NewWithInstance("iofs", source, "sqlite3", driver) if err != nil { return fmt.Errorf("creating migration instance: %w", err) } if err := m.Up(); err != nil && err != migrate.ErrNoChange { return fmt.Errorf("running migrations: %w", err) } slog.Info("Migrations completed") return nil }