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  }