mirror of https://github.com/pressly/goose.git
56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"github.com/kylelemons/go-gypsy/yaml"
|
|
"log"
|
|
"path"
|
|
)
|
|
|
|
type DBConf struct {
|
|
Name string
|
|
Driver string
|
|
OpenStr string
|
|
}
|
|
|
|
var dbFolder = flag.String("db", "db", "folder containing db info")
|
|
var dbConfName = flag.String("config", "development", "which DB configuration to use")
|
|
var targetVersion = flag.Int("target", -1, "which DB version to target (defaults to latest version)")
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
conf, err := dbConfFromFile(path.Join(*dbFolder, "dbconf.yml"), *dbConfName)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
runMigrations(conf, path.Join(*dbFolder, "migrations"), *targetVersion)
|
|
}
|
|
|
|
// extract configuration details from the given file
|
|
func dbConfFromFile(path, envtype string) (*DBConf, error) {
|
|
|
|
f, err := yaml.ReadFile(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
drv, derr := f.Get(fmt.Sprintf("%s.driver", envtype))
|
|
if derr != nil {
|
|
return nil, derr
|
|
}
|
|
|
|
open, oerr := f.Get(fmt.Sprintf("%s.open", envtype))
|
|
if oerr != nil {
|
|
return nil, oerr
|
|
}
|
|
|
|
return &DBConf{
|
|
Name: envtype,
|
|
Driver: drv,
|
|
OpenStr: open,
|
|
}, nil
|
|
}
|