You've already forked sap-jenkins-library
mirror of
https://github.com/SAP/jenkins-library.git
synced 2025-09-16 09:26:22 +02:00
main.go generator
This commit is contained in:
@@ -17,6 +17,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type stepInfo struct {
|
type stepInfo struct {
|
||||||
|
ModuleName string
|
||||||
CobraCmdFuncName string
|
CobraCmdFuncName string
|
||||||
CreateCmdVar string
|
CreateCmdVar string
|
||||||
ExportPrefix string
|
ExportPrefix string
|
||||||
@@ -188,6 +189,21 @@ func bindEnvToFlag(stepCmd *cobra.Command) {
|
|||||||
{{- end -}}
|
{{- end -}}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const mainGoTemplate = `
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"{{ .ModuleName }}/cmd"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
err := cmd.{{.CobraCmdFuncName}}().Execute()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
// StepTestGoTemplate ...
|
// StepTestGoTemplate ...
|
||||||
const stepTestGoTemplate = `//go:build unit
|
const stepTestGoTemplate = `//go:build unit
|
||||||
// +build unit
|
// +build unit
|
||||||
@@ -362,7 +378,7 @@ func GetAllStepMetadata() map[string]config.StepData {
|
|||||||
`
|
`
|
||||||
|
|
||||||
// ProcessMetaFiles generates step coding based on step configuration provided in yaml files
|
// ProcessMetaFiles generates step coding based on step configuration provided in yaml files
|
||||||
func ProcessMetaFiles(metadataFiles []string, targetDir string, stepHelperData StepHelperData) error {
|
func ProcessMetaFiles(metadataFiles []string, moduleName, targetDir string, stepHelperData StepHelperData) error {
|
||||||
|
|
||||||
allSteps := struct{ Steps []string }{}
|
allSteps := struct{ Steps []string }{}
|
||||||
for key := range metadataFiles {
|
for key := range metadataFiles {
|
||||||
@@ -401,12 +417,19 @@ func ProcessMetaFiles(metadataFiles []string, targetDir string, stepHelperData S
|
|||||||
checkError(err)
|
checkError(err)
|
||||||
|
|
||||||
myStepInfo, err := getStepInfo(&stepData, osImport, stepHelperData.ExportPrefix)
|
myStepInfo, err := getStepInfo(&stepData, osImport, stepHelperData.ExportPrefix)
|
||||||
|
myStepInfo.ModuleName = moduleName
|
||||||
checkError(err)
|
checkError(err)
|
||||||
|
|
||||||
step := stepTemplate(myStepInfo, "step", stepGoTemplate)
|
step := stepTemplate(myStepInfo, "step", stepGoTemplate)
|
||||||
err = stepHelperData.WriteFile(filepath.Join(targetDir, fmt.Sprintf("%v_generated.go", stepName)), step, 0644)
|
err = stepHelperData.WriteFile(filepath.Join(targetDir, fmt.Sprintf("%v_generated.go", stepName)), step, 0644)
|
||||||
checkError(err)
|
checkError(err)
|
||||||
|
|
||||||
|
if myStepInfo.ModuleName != "" {
|
||||||
|
mainGo := generateCode(myStepInfo, "main", mainGoTemplate, nil)
|
||||||
|
err = stepHelperData.WriteFile(filepath.Join(targetDir, fmt.Sprintf("%v_generated.go", stepName)), mainGo, 0644)
|
||||||
|
checkError(err)
|
||||||
|
}
|
||||||
|
|
||||||
// do not generate these tests for POC
|
// do not generate these tests for POC
|
||||||
//test := stepTemplate(myStepInfo, "stepTest", stepTestGoTemplate)
|
//test := stepTemplate(myStepInfo, "stepTest", stepTestGoTemplate)
|
||||||
//err = stepHelperData.WriteFile(filepath.Join(targetDir, fmt.Sprintf("%v_generated_test.go", stepName)), test, 0644)
|
//err = stepHelperData.WriteFile(filepath.Join(targetDir, fmt.Sprintf("%v_generated_test.go", stepName)), test, 0644)
|
||||||
|
@@ -12,18 +12,21 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var metadataFile, metadataPath, targetDir string
|
var metadataFile, moduleName, metadataPath, targetDir string
|
||||||
flag.StringVar(&metadataFile, "metadataFile", "", "Single metadata file used to generate code for a step.")
|
flag.StringVar(&metadataFile, "metadataFile", "", "Single metadata file used to generate code for a step.")
|
||||||
|
flag.StringVar(&moduleName, "moduleName", "", "Name of the module created with go mod init.")
|
||||||
flag.StringVar(&metadataPath, "metadataDir", "./resources/metadata", "The directory containing the step metadata. Default points to \\'resources/metadata\\'.")
|
flag.StringVar(&metadataPath, "metadataDir", "./resources/metadata", "The directory containing the step metadata. Default points to \\'resources/metadata\\'.")
|
||||||
flag.StringVar(&targetDir, "targetDir", "./cmd", "The target directory for the generated commands.")
|
flag.StringVar(&targetDir, "targetDir", "./cmd", "The target directory for the generated commands.")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
fmt.Printf("metadataFile: %v\nmetadataDir: %v\ntargetDir: %v\n", metadataFile, metadataPath, targetDir)
|
fmt.Printf("metadataFile: %v\nmoduleName: %v\nmetadataDir: %v\ntargetDir: %v\n", metadataFile, moduleName, metadataPath, targetDir)
|
||||||
|
|
||||||
var metadataFiles []string
|
var metadataFiles []string
|
||||||
var err error
|
var err error
|
||||||
if metadataFile != "" {
|
if metadataFile != "" {
|
||||||
fmt.Printf("Using single metadata file: %v\n", metadataFile)
|
fmt.Printf("Using single metadata file: %v\n", metadataFile)
|
||||||
metadataFiles = []string{metadataFile}
|
metadataFiles = []string{metadataFile}
|
||||||
|
fmt.Println("Setting target directory to './cmd' as only one step is being generated.")
|
||||||
|
targetDir = "./cmd"
|
||||||
} else {
|
} else {
|
||||||
fmt.Printf("Using metadata directory: %v\n", metadataPath)
|
fmt.Printf("Using metadata directory: %v\n", metadataPath)
|
||||||
metadataFiles, err = helper.MetadataFiles(metadataPath)
|
metadataFiles, err = helper.MetadataFiles(metadataPath)
|
||||||
@@ -33,7 +36,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = helper.ProcessMetaFiles(metadataFiles, targetDir, helper.StepHelperData{
|
err = helper.ProcessMetaFiles(metadataFiles, moduleName, targetDir, helper.StepHelperData{
|
||||||
OpenFile: openMetaFile,
|
OpenFile: openMetaFile,
|
||||||
WriteFile: os.WriteFile,
|
WriteFile: os.WriteFile,
|
||||||
ExportPrefix: "",
|
ExportPrefix: "",
|
||||||
|
Reference in New Issue
Block a user