github.com/jenkins-x/jx-api@v0.0.24/cmd/codegen/generator/common.go (about) 1 package generator 2 3 import ( 4 "fmt" 5 "path/filepath" 6 "strings" 7 8 "github.com/jenkins-x/jx-logging/pkg/log" 9 10 "github.com/jenkins-x/jx-api/cmd/codegen/util" 11 "github.com/pkg/errors" 12 ) 13 14 func defaultGenerate(generator string, name string, groupsWithVersions []string, inputPackage string, 15 outputPackage string, outputBase string, boilerplateFile string, gopath string, args ...string) error { 16 log.Logger().Infof("generating %s structs for %s at %s\n", name, groupsWithVersions, outputPackage) 17 18 generateCommand := util.Command{ 19 Name: filepath.Join(util.GoPathBin(gopath), generator), 20 Args: []string{ 21 "--output-base", 22 outputBase, 23 "--go-header-file", 24 boilerplateFile, 25 }, 26 Env: map[string]string{ 27 "GO111MODULE": "on", 28 }, 29 } 30 if name == "clientset" { 31 inputDirs := make([]string, 0) 32 for _, gv := range groupsWithVersions { 33 groupVersion := strings.Split(gv, ":") 34 if len(groupVersion) != 2 { 35 return errors.Errorf("argument %s must be like cheese:v1", gv) 36 } 37 inputDirs = append(inputDirs, fmt.Sprintf("%s/%s", groupVersion[0], groupVersion[1])) 38 } 39 inputDirsStr := strings.Join(inputDirs, ",") 40 generateCommand.Args = append(generateCommand.Args, "--input", inputDirsStr, "--input-base", inputPackage) 41 } else { 42 inputDirs, err := packagesForGroupsWithVersions(inputPackage, groupsWithVersions) 43 if err != nil { 44 return err 45 } 46 inputDirsStr := strings.Join(inputDirs, ",") 47 generateCommand.Args = append(generateCommand.Args, "--input-dirs", inputDirsStr) 48 } 49 generateCommand.Args = append(generateCommand.Args, args...) 50 51 out, err := generateCommand.RunWithoutRetry() 52 if err != nil { 53 return errors.Wrapf(err, "running %s, output %s", generateCommand.String(), out) 54 } 55 return nil 56 } 57 58 func packagesForGroupsWithVersions(inputPackage string, groupsWithVersions []string) ([]string, error) { 59 inputDirs := make([]string, 0) 60 for _, gv := range groupsWithVersions { 61 groupVersion := strings.Split(gv, ":") 62 if len(groupVersion) != 2 { 63 return nil, errors.Errorf("argument %s must be like cheese:v1", gv) 64 } 65 inputDirs = append(inputDirs, fmt.Sprintf("%s/%s/%s", inputPackage, groupVersion[0], groupVersion[1])) 66 } 67 return inputDirs, nil 68 }