github.com/seeker-insurance/kit@v0.0.13/cmd/migrate/config.go (about) 1 package migrate 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "syscall" 8 "text/template" 9 10 "github.com/seeker-insurance/kit/goenv" 11 "github.com/spf13/viper" 12 ) 13 14 const configPath = "./dbconfig.yml" 15 16 type configData struct { 17 Env string 18 DatabaseUrl string 19 } 20 21 func writeConfig() error { 22 f, err := os.OpenFile(configPath, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666) 23 if err != nil { 24 if e, ok := err.(*os.PathError); ok && e.Err == syscall.EEXIST { 25 return nil 26 } 27 return fmt.Errorf("writeConfig: os.OpenFile: %v", err) 28 } 29 defer f.Close() 30 if err := templateToFile(f); err != nil { 31 return fmt.Errorf("writeConfig: templateToFile: %v", err) 32 } 33 return nil 34 } 35 36 func templateToFile(wr io.Writer) error { 37 tmpl, err := template.New("config").Parse(configTemplate) 38 if err != nil { 39 return err 40 } 41 42 return tmpl.Execute(wr, getConfig()) 43 } 44 45 func getConfig() configData { 46 return configData{goenv.Env, viper.GetString("database_url")} 47 } 48 49 var configTemplate = ` 50 {{- .Env }}: 51 dialect: postgres 52 datasource: {{ .DatabaseUrl }} 53 dir: data/bin/migrations 54 `