package db import ( "database/sql" "embed" "fmt" "sort" ) //go:embed migrations/*.sql var migrationFiles embed.FS func Migrate(db *sql.DB) error { entries, err := migrationFiles.ReadDir("migrations") if err != nil { return fmt.Errorf("read migrations: %w", err) } sort.Slice(entries, func(i, j int) bool { return entries[i].Name() < entries[j].Name() }) for _, entry := range entries { content, err := migrationFiles.ReadFile("migrations/" + entry.Name()) if err != nil { return fmt.Errorf("read migration %s: %w", entry.Name(), err) } if _, err := db.Exec(string(content)); err != nil { return fmt.Errorf("execute migration %s: %w", entry.Name(), err) } } return nil }