package cmd import ( "database/sql" "fmt" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/sqlite" "github.com/golang-migrate/migrate/v4/source/iofs" "github.com/spf13/cobra" "gitrepo.ru/neonxp/gorum/migrations" ) var migrateCmd = &cobra.Command{ Use: "migrate", Short: "Migrate db", Long: `Up and down migrations`, } var migrateUp = &cobra.Command{ Use: "up", Short: "Migrate up", Long: `Up migrations`, RunE: func(cmd *cobra.Command, args []string) error { db, err := sql.Open("sqlite3", dbFile) if err != nil { return fmt.Errorf("open db failed: %w", err) } defer db.Close() driver, err := sqlite.WithInstance(db, &sqlite.Config{}) if err != nil { return fmt.Errorf("failed create migration driver: %w", err) } sourceDriver, err := iofs.New(migrations.FS, ".") if err != nil { return fmt.Errorf("failed open migrations: %w", err) } m, err := migrate.NewWithInstance("fs", sourceDriver, "sqlite3", driver) if err != nil { return fmt.Errorf("open migration failed: %w", err) } if err := m.Up(); err != nil && err != migrate.ErrNoChange { return fmt.Errorf("do migration failed: %w", err) } return nil }, }