migrate.go

 1package sqlite
 2
 3import (
 4	"embed"
 5	"errors"
 6
 7	"github.com/charmbracelet/log"
 8	"github.com/golang-migrate/migrate/v4"
 9	_ "github.com/golang-migrate/migrate/v4/database/sqlite" // db driver
10	_ "github.com/golang-migrate/migrate/v4/source/file"     // file driver
11	"github.com/golang-migrate/migrate/v4/source/iofs"
12	_ "modernc.org/sqlite" // sqlite driver
13)
14
15//go:embed migrations/*.sql
16var migrations embed.FS
17
18// Migrate runs database migrations.
19func (s *Sqlite) Migrate(url string) error {
20	d, err := iofs.New(migrations, ".")
21	if err != nil {
22		return err
23	}
24	m, err := migrate.NewWithSourceInstance("iofs", d, url)
25	if err != nil {
26		return err
27	}
28	log.Info("Running migrations...")
29	if err := m.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
30		return err
31	}
32	return nil
33}