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}