@@ -2,6 +2,7 @@ package sqlite
22
33import (
44 "database/sql"
5+ "embed"
56 "fmt"
67 "log/slog"
78 "os"
@@ -12,9 +13,14 @@ import (
1213
1314 "github.com/golang-migrate/migrate/v4"
1415 "github.com/golang-migrate/migrate/v4/database/sqlite"
16+ "github.com/golang-migrate/migrate/v4/source"
1517 "github.com/golang-migrate/migrate/v4/source/file"
18+ "github.com/golang-migrate/migrate/v4/source/iofs"
1619)
1720
21+ //go:embed migrations/*.sql
22+ var embeddedMigrations embed.FS
23+
1824// Store represents a SQLite-backed store
1925type Store struct {
2026 db * sql.DB
@@ -95,15 +101,20 @@ func (s *Store) runMigrations() error {
95101
96102 // Use file:// source for migrations.
97103 migrationsDir , err := resolveMigrationsDir ()
98- if err != nil {
99- return err
100- }
101- migrationsPath := "file://" + migrationsDir
104+ var src source.Driver
105+ if err == nil {
106+ migrationsPath := "file://" + migrationsDir
102107
103- fileDriver := & file.File {}
104- src , err := fileDriver .Open (migrationsPath )
105- if err != nil {
106- return fmt .Errorf ("creating migration source: %w" , err )
108+ fileDriver := & file.File {}
109+ src , err = fileDriver .Open (migrationsPath )
110+ if err != nil {
111+ return fmt .Errorf ("creating migration source: %w" , err )
112+ }
113+ } else {
114+ src , err = iofs .New (embeddedMigrations , "migrations" )
115+ if err != nil {
116+ return fmt .Errorf ("creating embedded migration source: %w" , err )
117+ }
107118 }
108119
109120 m , err := migrate .NewWithInstance ("file" , src , "sqlite" , driver )
0 commit comments