dex/db/migrations/gen_assets.go
Eric Chiang f738188c13 db: switch migration source to use in-memory migration
When reading migrations from files, sql-migrate attempts to split
SQL statements. The parsing logic does not handle $BODY$ statements
and broke when the migration included one.

Replace go-bindata with a small migration generation script and use
in memory migrations instead.
2016-03-01 10:55:05 -08:00

72 lines
1.3 KiB
Go

// +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)
}
}