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  `