12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package ctx
- import (
- "errors"
- "os"
- "path/filepath"
- "git.i2edu.net/i2/go-zero/core/jsonx"
- "git.i2edu.net/i2/go-zero/tools/goctl/rpc/execx"
- )
- // Module contains the relative data of go module,
- // which is the result of the command go list
- type Module struct {
- Path string
- Main bool
- Dir string
- GoMod string
- GoVersion string
- }
- // projectFromGoMod is used to find the go module and project file path
- // the workDir flag specifies which folder we need to detect based on
- // only valid for go mod project
- func projectFromGoMod(workDir string) (*ProjectContext, error) {
- if len(workDir) == 0 {
- return nil, errors.New("the work directory is not found")
- }
- if _, err := os.Stat(workDir); err != nil {
- return nil, err
- }
- data, err := execx.Run("go list -json -m", workDir)
- if err != nil {
- return nil, err
- }
- var m Module
- err = jsonx.Unmarshal([]byte(data), &m)
- if err != nil {
- return nil, err
- }
- var ret ProjectContext
- ret.WorkDir = workDir
- ret.Name = filepath.Base(m.Dir)
- ret.Dir = m.Dir
- ret.Path = m.Path
- return &ret, nil
- }
|