1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package configgen
- import (
- "errors"
- "fmt"
- "os"
- "os/exec"
- "path/filepath"
- "strings"
- "text/template"
- "git.i2edu.net/i2/go-zero/tools/goctl/util"
- "github.com/logrusorgru/aurora"
- "github.com/urfave/cli"
- )
- const configTemplate = `package main
- import (
- "io/ioutil"
- "os"
- "{{.import}}"
- "github.com/ghodss/yaml"
- )
- func main() {
- var c config.Config
- template, err := yaml.Marshal(c)
- if err != nil {
- panic(err)
- }
- err = ioutil.WriteFile("config.yaml", template, os.ModePerm)
- if err != nil {
- panic(err)
- }
- }
- `
- // GenConfigCommand provides the entry of goctl config
- func GenConfigCommand(c *cli.Context) error {
- path, err := filepath.Abs(c.String("path"))
- if err != nil {
- return errors.New("abs failed: " + c.String("path"))
- }
- goModPath, found := util.FindGoModPath(path)
- if !found {
- return errors.New("go mod not initial")
- }
- path = strings.TrimSuffix(path, "/config.go")
- location := filepath.Join(path, "tmp")
- err = os.MkdirAll(location, os.ModePerm)
- if err != nil {
- return err
- }
- goPath := filepath.Join(location, "config.go")
- fp, err := os.Create(goPath)
- if err != nil {
- return err
- }
- defer fp.Close()
- defer os.RemoveAll(location)
- t := template.Must(template.New("template").Parse(configTemplate))
- if err := t.Execute(fp, map[string]string{
- "import": filepath.Dir(goModPath),
- }); err != nil {
- return err
- }
- gen := exec.Command("go", "run", "config.go")
- gen.Dir = filepath.Dir(goPath)
- gen.Stderr = os.Stderr
- gen.Stdout = os.Stdout
- err = gen.Run()
- if err != nil {
- panic(err)
- }
- path, err = os.Getwd()
- if err != nil {
- panic(err)
- }
- err = os.Rename(filepath.Dir(goPath)+"/config.yaml", path+"/config.yaml")
- if err != nil {
- panic(err)
- }
- fmt.Println(aurora.Green("Done."))
- return nil
- }
|