migrations.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package migrations
  2. import (
  3. "database/sql"
  4. "embed"
  5. "github.com/lopezator/migrator"
  6. log "maunium.net/go/maulogger/v2"
  7. )
  8. //go:embed *.sql
  9. var migrations embed.FS
  10. func migrationFromFile(filename string) *migrator.Migration {
  11. return &migrator.Migration{
  12. Name: filename,
  13. Func: func(tx *sql.Tx) error {
  14. data, err := migrations.ReadFile(filename)
  15. if err != nil {
  16. return err
  17. }
  18. if _, err := tx.Exec(string(data)); err != nil {
  19. return err
  20. }
  21. return nil
  22. },
  23. }
  24. }
  25. func Run(db *sql.DB, baseLog log.Logger) error {
  26. subLogger := baseLog.Sub("Migrations")
  27. logger := migrator.LoggerFunc(func(msg string, args ...interface{}) {
  28. subLogger.Infof(msg, args...)
  29. })
  30. m, err := migrator.New(
  31. migrator.TableName("version"),
  32. migrator.WithLogger(logger),
  33. migrator.Migrations(
  34. migrationFromFile("01-initial.sql"),
  35. migrationFromFile("02-attachments.sql"),
  36. migrationFromFile("03-emoji.sql"),
  37. migrationFromFile("04-custom-puppet.sql"),
  38. ),
  39. )
  40. if err != nil {
  41. return err
  42. }
  43. if err := m.Migrate(db); err != nil {
  44. return err
  45. }
  46. return nil
  47. }