diff --git a/hack/update-codegen.sh b/hack/update-codegen.sh index 501c57d9e0e..1111454604f 100755 --- a/hack/update-codegen.sh +++ b/hack/update-codegen.sh @@ -177,7 +177,7 @@ function codegen::deepcopy() { "${gen_deepcopy_bin}" \ -v "${KUBE_VERBOSE}" \ --go-header-file "${BOILERPLATE_FILENAME}" \ - --output-file-base "${output_file}" \ + --output-file "${output_file}" \ --bounding-dirs "k8s.io/kubernetes,k8s.io/api" \ $(printf -- " -i %s" "${tag_pkgs[@]}") \ "$@" @@ -309,7 +309,7 @@ function codegen::prerelease() { "${gen_prerelease_bin}" \ -v "${KUBE_VERBOSE}" \ --go-header-file "${BOILERPLATE_FILENAME}" \ - --output-file-base "${output_file}" \ + --output-file "${output_file}" \ $(printf -- " -i %s" "${tag_pkgs[@]}") \ "$@" @@ -377,7 +377,7 @@ function codegen::defaults() { "${gen_defaulter_bin}" \ -v "${KUBE_VERBOSE}" \ --go-header-file "${BOILERPLATE_FILENAME}" \ - --output-file-base "${output_file}" \ + --output-file "${output_file}" \ $(printf -- " -i %s" "${tag_pkgs[@]}") \ "$@" @@ -456,7 +456,7 @@ function codegen::conversions() { "${gen_conversion_bin}" \ -v "${KUBE_VERBOSE}" \ --go-header-file "${BOILERPLATE_FILENAME}" \ - --output-file-base "${output_file}" \ + --output-file "${output_file}" \ $(printf -- " --extra-peer-dirs %s" "${extra_peer_pkgs[@]}") \ $(printf -- " -i %s" "${tag_pkgs[@]}") \ "$@" @@ -551,7 +551,7 @@ function codegen::openapi() { "${gen_openapi_bin}" \ -v "${KUBE_VERBOSE}" \ --go-header-file "${BOILERPLATE_FILENAME}" \ - --output-file-base "${output_file}" \ + --output-file "${output_file}" \ --output-dir "${output_dir}" \ --output-pkg "${output_pkg}" \ --report-filename "${report_file}" \ diff --git a/staging/src/k8s.io/code-generator/cmd/conversion-gen/args/args.go b/staging/src/k8s.io/code-generator/cmd/conversion-gen/args/args.go index 636e6c6c3ce..4873d7020ba 100644 --- a/staging/src/k8s.io/code-generator/cmd/conversion-gen/args/args.go +++ b/staging/src/k8s.io/code-generator/cmd/conversion-gen/args/args.go @@ -33,6 +33,9 @@ var DefaultBasePeerDirs = []string{ // CustomArgs is used by the gengo framework to pass args specific to this generator. type CustomArgs struct { + // The filename of the generated results. + OutputFile string + // Base peer dirs which nearly everybody will use, i.e. outside of Kubernetes core. Peer dirs // are declared to make the generator pick up manually written conversion funcs from external // packages. @@ -62,12 +65,13 @@ func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { SkipUnsafe: false, } genericArgs.CustomArgs = customArgs - genericArgs.OutputFileBaseName = "conversion_generated" return genericArgs, customArgs } // AddFlags add the generator flags to the flag set. func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { + fs.StringVar(&ca.OutputFile, "output-file", "generated.conversion.go", + "the name of the file to be generated") fs.StringSliceVar(&ca.BasePeerDirs, "base-peer-dirs", ca.BasePeerDirs, "Comma-separated list of apimachinery import paths which are considered, after tag-specified peers, for conversions. Only change these if you have very good reasons.") fs.StringSliceVar(&ca.ExtraPeerDirs, "extra-peer-dirs", ca.ExtraPeerDirs, @@ -80,10 +84,10 @@ func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { // Validate checks the given arguments. func Validate(genericArgs *args.GeneratorArgs) error { - _ = genericArgs.CustomArgs.(*CustomArgs) + custom := genericArgs.CustomArgs.(*CustomArgs) - if len(genericArgs.OutputFileBaseName) == 0 { - return fmt.Errorf("output file base name cannot be empty") + if len(custom.OutputFile) == 0 { + return fmt.Errorf("--output-file must be specified") } return nil diff --git a/staging/src/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go b/staging/src/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go index d37aa9f496c..4589bce4c8e 100644 --- a/staging/src/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go +++ b/staging/src/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go @@ -336,7 +336,7 @@ func GetTargets(context *generator.Context, arguments *args.GeneratorArgs) []gen }, GeneratorsFunc: func(c *generator.Context) (generators []generator.Generator) { return []generator.Generator{ - NewGenConversion(arguments.OutputFileBaseName, typesPkg.Path, pkg.Path, manualConversions, pkgToPeers[pkg.Path], unsafeEquality), + NewGenConversion(customArgs.OutputFile, typesPkg.Path, pkg.Path, manualConversions, pkgToPeers[pkg.Path], unsafeEquality), } }, }) diff --git a/staging/src/k8s.io/code-generator/cmd/deepcopy-gen/args/args.go b/staging/src/k8s.io/code-generator/cmd/deepcopy-gen/args/args.go index 4529891bf51..203a245166b 100644 --- a/staging/src/k8s.io/code-generator/cmd/deepcopy-gen/args/args.go +++ b/staging/src/k8s.io/code-generator/cmd/deepcopy-gen/args/args.go @@ -32,22 +32,23 @@ func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { genericArgs := args.Default().WithoutDefaultFlagParsing() customArgs := &CustomArgs{} genericArgs.CustomArgs = (*generators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there - genericArgs.OutputFileBaseName = "deepcopy_generated" return genericArgs, customArgs } // AddFlags add the generator flags to the flag set. func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { + fs.StringVar(&ca.OutputFile, "output-file", "generated.deepcopy.go", + "the name of the file to be generated") fs.StringSliceVar(&ca.BoundingDirs, "bounding-dirs", ca.BoundingDirs, "Comma-separated list of import paths which bound the types for which deep-copies will be generated.") } // Validate checks the given arguments. func Validate(genericArgs *args.GeneratorArgs) error { - _ = genericArgs.CustomArgs.(*generators.CustomArgs) + custom := genericArgs.CustomArgs.(*generators.CustomArgs) - if len(genericArgs.OutputFileBaseName) == 0 { - return fmt.Errorf("output file base name cannot be empty") + if len(custom.OutputFile) == 0 { + return fmt.Errorf("--output-file must be specified") } return nil diff --git a/staging/src/k8s.io/code-generator/cmd/defaulter-gen/args/args.go b/staging/src/k8s.io/code-generator/cmd/defaulter-gen/args/args.go index acc42c0353d..19563fbcf48 100644 --- a/staging/src/k8s.io/code-generator/cmd/defaulter-gen/args/args.go +++ b/staging/src/k8s.io/code-generator/cmd/defaulter-gen/args/args.go @@ -32,22 +32,23 @@ func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { genericArgs := args.Default().WithoutDefaultFlagParsing() customArgs := &CustomArgs{} genericArgs.CustomArgs = (*generators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there - genericArgs.OutputFileBaseName = "zz_generated.defaults" return genericArgs, customArgs } // AddFlags add the generator flags to the flag set. func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { + fs.StringVar(&ca.OutputFile, "output-file", "generated.defaults.go", + "the name of the file to be generated") fs.StringSliceVar(&ca.ExtraPeerDirs, "extra-peer-dirs", ca.ExtraPeerDirs, "Comma-separated list of import paths which are considered, after tag-specified peers, for conversions.") } // Validate checks the given arguments. func Validate(genericArgs *args.GeneratorArgs) error { - _ = genericArgs.CustomArgs.(*generators.CustomArgs) + custom := genericArgs.CustomArgs.(*generators.CustomArgs) - if len(genericArgs.OutputFileBaseName) == 0 { - return fmt.Errorf("output file base name cannot be empty") + if len(custom.OutputFile) == 0 { + return fmt.Errorf("--output-file must be specified") } return nil diff --git a/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/args/args.go b/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/args/args.go index a4d70bbc8c2..44c01282727 100644 --- a/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/args/args.go +++ b/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/args/args.go @@ -32,20 +32,21 @@ func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { genericArgs := args.Default().WithoutDefaultFlagParsing() customArgs := &CustomArgs{} genericArgs.CustomArgs = (*statusgenerators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there - genericArgs.OutputFileBaseName = "zz_prerelease_lifecycle_generated" return genericArgs, customArgs } // AddFlags add the generator flags to the flag set. func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { + fs.StringVar(&ca.OutputFile, "output-file", "generated.prerelease_lifecycle.go", + "the name of the file to be generated") } // Validate checks the given arguments. func Validate(genericArgs *args.GeneratorArgs) error { - _ = genericArgs.CustomArgs.(*statusgenerators.CustomArgs) + custom := genericArgs.CustomArgs.(*statusgenerators.CustomArgs) - if len(genericArgs.OutputFileBaseName) == 0 { - return fmt.Errorf("output file base name cannot be empty") + if len(custom.OutputFile) == 0 { + return fmt.Errorf("--output-file must be specified") } return nil diff --git a/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status.go b/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status.go index 4749a148c34..cf4e18f7f01 100644 --- a/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status.go +++ b/staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators/status.go @@ -33,6 +33,7 @@ import ( // CustomArgs is used tby the go2idl framework to pass args specific to this generator. type CustomArgs struct { + OutputFile string } // This is the comment tag that carries parameters for API status generation. Because the cadence is fixed, we can predict @@ -229,6 +230,8 @@ func GetTargets(context *generator.Context, arguments *args.GeneratorArgs) []gen } } + customArgs := arguments.CustomArgs.(*CustomArgs) + if pkgNeedsGeneration { targets = append(targets, &generator.SimpleTarget{ @@ -241,7 +244,7 @@ func GetTargets(context *generator.Context, arguments *args.GeneratorArgs) []gen }, GeneratorsFunc: func(c *generator.Context) (generators []generator.Generator) { return []generator.Generator{ - NewPrereleaseLifecycleGen(arguments.OutputFileBaseName, pkg.Path), + NewPrereleaseLifecycleGen(customArgs.OutputFile, pkg.Path), } }, }) diff --git a/staging/src/k8s.io/code-generator/cmd/register-gen/args/args.go b/staging/src/k8s.io/code-generator/cmd/register-gen/args/args.go index d393fbfdfba..5fffaa008f0 100644 --- a/staging/src/k8s.io/code-generator/cmd/register-gen/args/args.go +++ b/staging/src/k8s.io/code-generator/cmd/register-gen/args/args.go @@ -19,19 +19,31 @@ package args import ( "fmt" + "github.com/spf13/pflag" "k8s.io/gengo/v2/args" ) +type CustomArgs struct { + OutputFile string +} + // NewDefaults returns default arguments for the generator. func NewDefaults() *args.GeneratorArgs { genericArgs := args.Default().WithoutDefaultFlagParsing() - genericArgs.OutputFileBaseName = "zz_generated.register" + genericArgs.CustomArgs = &CustomArgs{} return genericArgs } +// AddFlags add the generator flags to the flag set. +func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { + fs.StringVar(&ca.OutputFile, "output-file", "generated.register.go", + "the name of the file to be generated") +} + // Validate checks the given arguments. func Validate(genericArgs *args.GeneratorArgs) error { - if len(genericArgs.OutputFileBaseName) == 0 { + custom := genericArgs.CustomArgs.(*CustomArgs) + if len(custom.OutputFile) == 0 { return fmt.Errorf("output file base name cannot be empty") } diff --git a/staging/src/k8s.io/code-generator/cmd/register-gen/generators/targets.go b/staging/src/k8s.io/code-generator/cmd/register-gen/generators/targets.go index bdbb60159b7..185afd1debd 100644 --- a/staging/src/k8s.io/code-generator/cmd/register-gen/generators/targets.go +++ b/staging/src/k8s.io/code-generator/cmd/register-gen/generators/targets.go @@ -25,6 +25,7 @@ import ( "k8s.io/klog/v2" clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + registerargs "k8s.io/code-generator/cmd/register-gen/args" "k8s.io/gengo/v2/args" "k8s.io/gengo/v2/generator" "k8s.io/gengo/v2/namer" @@ -49,22 +50,24 @@ func GetTargets(context *generator.Context, arguments *args.GeneratorArgs) []gen klog.Fatalf("Failed loading boilerplate: %v", err) } + customArgs := arguments.CustomArgs.(*registerargs.CustomArgs) + targets := []generator.Target{} for _, input := range context.Inputs { pkg := context.Universe.Package(input) internal, err := isInternal(pkg) if err != nil { - klog.V(5).Infof("skipping the generation of %s file, due to err %v", arguments.OutputFileBaseName, err) + klog.V(5).Infof("skipping the generation of %s file, due to err %v", customArgs.OutputFile, err) continue } if internal { - klog.V(5).Infof("skipping the generation of %s file because %s package contains internal types, note that internal types don't have \"json\" tags", arguments.OutputFileBaseName, pkg.Name) + klog.V(5).Infof("skipping the generation of %s file because %s package contains internal types, note that internal types don't have \"json\" tags", customArgs.OutputFile, pkg.Name) continue } registerFileName := "register.go" searchPath := path.Join(pkg.SourcePath, registerFileName) if _, err := os.Stat(path.Join(searchPath)); err == nil { - klog.V(5).Infof("skipping the generation of %s file because %s already exists in the path %s", arguments.OutputFileBaseName, registerFileName, searchPath) + klog.V(5).Infof("skipping the generation of %s file because %s already exists in the path %s", customArgs.OutputFile, registerFileName, searchPath) continue } else if err != nil && !os.IsNotExist(err) { klog.Fatalf("an error %v has occurred while checking if %s exists", err, registerFileName) @@ -109,7 +112,7 @@ func GetTargets(context *generator.Context, arguments *args.GeneratorArgs) []gen return []generator.Generator{ ®isterExternalGenerator{ GoGenerator: generator.GoGenerator{ - OutputFilename: arguments.OutputFileBaseName, + OutputFilename: customArgs.OutputFile, }, gv: gv, typesToGenerate: typesToRegister, diff --git a/staging/src/k8s.io/code-generator/kube_codegen.sh b/staging/src/k8s.io/code-generator/kube_codegen.sh index 5dd1e5faa87..6ebbae4e82f 100755 --- a/staging/src/k8s.io/code-generator/kube_codegen.sh +++ b/staging/src/k8s.io/code-generator/kube_codegen.sh @@ -144,7 +144,7 @@ function kube::codegen::gen_helpers() { done "${gobin}/deepcopy-gen" \ -v "${v}" \ - --output-file-base zz_generated.deepcopy.go \ + --output-file zz_generated.deepcopy.go \ --go-header-file "${boilerplate}" \ "${input_args[@]}" fi @@ -180,7 +180,7 @@ function kube::codegen::gen_helpers() { done "${gobin}/defaulter-gen" \ -v "${v}" \ - --output-file-base zz_generated.defaults.go \ + --output-file zz_generated.defaults.go \ --go-header-file "${boilerplate}" \ "${input_args[@]}" fi @@ -220,7 +220,7 @@ function kube::codegen::gen_helpers() { done "${gobin}/conversion-gen" \ -v "${v}" \ - --output-file-base zz_generated.conversion.go \ + --output-file zz_generated.conversion.go \ --go-header-file "${boilerplate}" \ "${extra_peer_args[@]:+"${extra_peer_args[@]}"}" \ "${input_args[@]}" @@ -373,7 +373,7 @@ function kube::codegen::gen_openapi() { done "${gobin}/openapi-gen" \ -v "${v}" \ - --output-file-base zz_generated.openapi.go \ + --output-file zz_generated.openapi.go \ --go-header-file "${boilerplate}" \ --output-dir "${out_dir}" \ --output-pkg "${out_pkg}" \