// +build ignore package main import ( "io/ioutil" "log" "os" "path/filepath" "sort" "strconv" "text/template" ) var funcs = template.FuncMap{ "quote": strconv.Quote, } var tmpl = template.Must(template.New("assets.go").Delims("{%", "%}").Funcs(funcs).Parse(`package migrations // THIS FILE WAS GENERATED BY gen.go DO NOT EDIT import "github.com/rubenv/sql-migrate" var PostgresMigrations migrate.MigrationSource = &migrate.MemoryMigrationSource{ Migrations: []*migrate.Migration{{% range $i, $m := . %} { Id: {% $m.Name | quote %}, Up: []string{ {% $m.Data | quote %}, }, },{% end %} }, } `)) // A single postgres migration. type migration struct { Name string Data string } func init() { log.SetPrefix("gen_assets: ") log.SetFlags(0) } func main() { files, err := filepath.Glob("*.sql") if err != nil { log.Fatalf("finding sql files: %v", err) } sort.Strings(files) migrations := make([]migration, len(files)) for i, f := range files { data, err := ioutil.ReadFile(f) if err != nil { log.Fatalf("reading file: %v", err) } migrations[i] = migration{f, string(data)} } f, err := os.OpenFile("assets.go", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) if err != nil { log.Fatalf("creating file: %v", err) } defer f.Close() if err := tmpl.Execute(f, migrations); err != nil { log.Fatal(err) } }