46 lines
731 B
Go
46 lines
731 B
Go
package database
|
|
|
|
import (
|
|
"embed"
|
|
"io"
|
|
"log"
|
|
"net/url"
|
|
|
|
"github.com/amacneil/dbmate/v2/pkg/dbmate"
|
|
_ "github.com/spotdemo4/dbmate-sqlite-modernc/pkg/driver/sqlite" // Modernc sqlite
|
|
)
|
|
|
|
func Migrate(dsn string, dbFS embed.FS) error {
|
|
_, err := dbFS.ReadDir(".")
|
|
if err == io.EOF {
|
|
return nil
|
|
}
|
|
|
|
dburl, err := url.Parse(dsn)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
db := dbmate.New(dburl)
|
|
db.Driver()
|
|
db.FS = dbFS
|
|
db.AutoDumpSchema = false
|
|
|
|
log.Println("Migrations:")
|
|
migrations, err := db.FindMigrations()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, m := range migrations {
|
|
log.Println(m.Version, m.FilePath)
|
|
}
|
|
|
|
log.Println("\nApplying...")
|
|
err = db.CreateAndMigrate()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|