Move OutputFileBase flag to each tool

This commit is contained in:
Tim Hockin 2024-01-16 18:24:28 -08:00
parent 26a1a13b80
commit d0dd72b01e
No known key found for this signature in database
10 changed files with 58 additions and 33 deletions

View File

@ -177,7 +177,7 @@ function codegen::deepcopy() {
"${gen_deepcopy_bin}" \ "${gen_deepcopy_bin}" \
-v "${KUBE_VERBOSE}" \ -v "${KUBE_VERBOSE}" \
--go-header-file "${BOILERPLATE_FILENAME}" \ --go-header-file "${BOILERPLATE_FILENAME}" \
--output-file-base "${output_file}" \ --output-file "${output_file}" \
--bounding-dirs "k8s.io/kubernetes,k8s.io/api" \ --bounding-dirs "k8s.io/kubernetes,k8s.io/api" \
$(printf -- " -i %s" "${tag_pkgs[@]}") \ $(printf -- " -i %s" "${tag_pkgs[@]}") \
"$@" "$@"
@ -309,7 +309,7 @@ function codegen::prerelease() {
"${gen_prerelease_bin}" \ "${gen_prerelease_bin}" \
-v "${KUBE_VERBOSE}" \ -v "${KUBE_VERBOSE}" \
--go-header-file "${BOILERPLATE_FILENAME}" \ --go-header-file "${BOILERPLATE_FILENAME}" \
--output-file-base "${output_file}" \ --output-file "${output_file}" \
$(printf -- " -i %s" "${tag_pkgs[@]}") \ $(printf -- " -i %s" "${tag_pkgs[@]}") \
"$@" "$@"
@ -377,7 +377,7 @@ function codegen::defaults() {
"${gen_defaulter_bin}" \ "${gen_defaulter_bin}" \
-v "${KUBE_VERBOSE}" \ -v "${KUBE_VERBOSE}" \
--go-header-file "${BOILERPLATE_FILENAME}" \ --go-header-file "${BOILERPLATE_FILENAME}" \
--output-file-base "${output_file}" \ --output-file "${output_file}" \
$(printf -- " -i %s" "${tag_pkgs[@]}") \ $(printf -- " -i %s" "${tag_pkgs[@]}") \
"$@" "$@"
@ -456,7 +456,7 @@ function codegen::conversions() {
"${gen_conversion_bin}" \ "${gen_conversion_bin}" \
-v "${KUBE_VERBOSE}" \ -v "${KUBE_VERBOSE}" \
--go-header-file "${BOILERPLATE_FILENAME}" \ --go-header-file "${BOILERPLATE_FILENAME}" \
--output-file-base "${output_file}" \ --output-file "${output_file}" \
$(printf -- " --extra-peer-dirs %s" "${extra_peer_pkgs[@]}") \ $(printf -- " --extra-peer-dirs %s" "${extra_peer_pkgs[@]}") \
$(printf -- " -i %s" "${tag_pkgs[@]}") \ $(printf -- " -i %s" "${tag_pkgs[@]}") \
"$@" "$@"
@ -551,7 +551,7 @@ function codegen::openapi() {
"${gen_openapi_bin}" \ "${gen_openapi_bin}" \
-v "${KUBE_VERBOSE}" \ -v "${KUBE_VERBOSE}" \
--go-header-file "${BOILERPLATE_FILENAME}" \ --go-header-file "${BOILERPLATE_FILENAME}" \
--output-file-base "${output_file}" \ --output-file "${output_file}" \
--output-dir "${output_dir}" \ --output-dir "${output_dir}" \
--output-pkg "${output_pkg}" \ --output-pkg "${output_pkg}" \
--report-filename "${report_file}" \ --report-filename "${report_file}" \

View File

@ -33,6 +33,9 @@ var DefaultBasePeerDirs = []string{
// CustomArgs is used by the gengo framework to pass args specific to this generator. // CustomArgs is used by the gengo framework to pass args specific to this generator.
type CustomArgs struct { 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 // 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 // are declared to make the generator pick up manually written conversion funcs from external
// packages. // packages.
@ -62,12 +65,13 @@ func NewDefaults() (*args.GeneratorArgs, *CustomArgs) {
SkipUnsafe: false, SkipUnsafe: false,
} }
genericArgs.CustomArgs = customArgs genericArgs.CustomArgs = customArgs
genericArgs.OutputFileBaseName = "conversion_generated"
return genericArgs, customArgs return genericArgs, customArgs
} }
// AddFlags add the generator flags to the flag set. // AddFlags add the generator flags to the flag set.
func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { 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, 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.") "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, 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. // Validate checks the given arguments.
func Validate(genericArgs *args.GeneratorArgs) error { func Validate(genericArgs *args.GeneratorArgs) error {
_ = genericArgs.CustomArgs.(*CustomArgs) custom := genericArgs.CustomArgs.(*CustomArgs)
if len(genericArgs.OutputFileBaseName) == 0 { if len(custom.OutputFile) == 0 {
return fmt.Errorf("output file base name cannot be empty") return fmt.Errorf("--output-file must be specified")
} }
return nil return nil

View File

@ -336,7 +336,7 @@ func GetTargets(context *generator.Context, arguments *args.GeneratorArgs) []gen
}, },
GeneratorsFunc: func(c *generator.Context) (generators []generator.Generator) { GeneratorsFunc: func(c *generator.Context) (generators []generator.Generator) {
return []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),
} }
}, },
}) })

View File

@ -32,22 +32,23 @@ func NewDefaults() (*args.GeneratorArgs, *CustomArgs) {
genericArgs := args.Default().WithoutDefaultFlagParsing() genericArgs := args.Default().WithoutDefaultFlagParsing()
customArgs := &CustomArgs{} customArgs := &CustomArgs{}
genericArgs.CustomArgs = (*generators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there genericArgs.CustomArgs = (*generators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there
genericArgs.OutputFileBaseName = "deepcopy_generated"
return genericArgs, customArgs return genericArgs, customArgs
} }
// AddFlags add the generator flags to the flag set. // AddFlags add the generator flags to the flag set.
func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { 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, 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.") "Comma-separated list of import paths which bound the types for which deep-copies will be generated.")
} }
// Validate checks the given arguments. // Validate checks the given arguments.
func Validate(genericArgs *args.GeneratorArgs) error { func Validate(genericArgs *args.GeneratorArgs) error {
_ = genericArgs.CustomArgs.(*generators.CustomArgs) custom := genericArgs.CustomArgs.(*generators.CustomArgs)
if len(genericArgs.OutputFileBaseName) == 0 { if len(custom.OutputFile) == 0 {
return fmt.Errorf("output file base name cannot be empty") return fmt.Errorf("--output-file must be specified")
} }
return nil return nil

View File

@ -32,22 +32,23 @@ func NewDefaults() (*args.GeneratorArgs, *CustomArgs) {
genericArgs := args.Default().WithoutDefaultFlagParsing() genericArgs := args.Default().WithoutDefaultFlagParsing()
customArgs := &CustomArgs{} customArgs := &CustomArgs{}
genericArgs.CustomArgs = (*generators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there genericArgs.CustomArgs = (*generators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there
genericArgs.OutputFileBaseName = "zz_generated.defaults"
return genericArgs, customArgs return genericArgs, customArgs
} }
// AddFlags add the generator flags to the flag set. // AddFlags add the generator flags to the flag set.
func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { 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, fs.StringSliceVar(&ca.ExtraPeerDirs, "extra-peer-dirs", ca.ExtraPeerDirs,
"Comma-separated list of import paths which are considered, after tag-specified peers, for conversions.") "Comma-separated list of import paths which are considered, after tag-specified peers, for conversions.")
} }
// Validate checks the given arguments. // Validate checks the given arguments.
func Validate(genericArgs *args.GeneratorArgs) error { func Validate(genericArgs *args.GeneratorArgs) error {
_ = genericArgs.CustomArgs.(*generators.CustomArgs) custom := genericArgs.CustomArgs.(*generators.CustomArgs)
if len(genericArgs.OutputFileBaseName) == 0 { if len(custom.OutputFile) == 0 {
return fmt.Errorf("output file base name cannot be empty") return fmt.Errorf("--output-file must be specified")
} }
return nil return nil

View File

@ -32,20 +32,21 @@ func NewDefaults() (*args.GeneratorArgs, *CustomArgs) {
genericArgs := args.Default().WithoutDefaultFlagParsing() genericArgs := args.Default().WithoutDefaultFlagParsing()
customArgs := &CustomArgs{} customArgs := &CustomArgs{}
genericArgs.CustomArgs = (*statusgenerators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there genericArgs.CustomArgs = (*statusgenerators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there
genericArgs.OutputFileBaseName = "zz_prerelease_lifecycle_generated"
return genericArgs, customArgs return genericArgs, customArgs
} }
// AddFlags add the generator flags to the flag set. // AddFlags add the generator flags to the flag set.
func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { 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. // Validate checks the given arguments.
func Validate(genericArgs *args.GeneratorArgs) error { func Validate(genericArgs *args.GeneratorArgs) error {
_ = genericArgs.CustomArgs.(*statusgenerators.CustomArgs) custom := genericArgs.CustomArgs.(*statusgenerators.CustomArgs)
if len(genericArgs.OutputFileBaseName) == 0 { if len(custom.OutputFile) == 0 {
return fmt.Errorf("output file base name cannot be empty") return fmt.Errorf("--output-file must be specified")
} }
return nil return nil

View File

@ -33,6 +33,7 @@ import (
// CustomArgs is used tby the go2idl framework to pass args specific to this generator. // CustomArgs is used tby the go2idl framework to pass args specific to this generator.
type CustomArgs struct { 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 // 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 { if pkgNeedsGeneration {
targets = append(targets, targets = append(targets,
&generator.SimpleTarget{ &generator.SimpleTarget{
@ -241,7 +244,7 @@ func GetTargets(context *generator.Context, arguments *args.GeneratorArgs) []gen
}, },
GeneratorsFunc: func(c *generator.Context) (generators []generator.Generator) { GeneratorsFunc: func(c *generator.Context) (generators []generator.Generator) {
return []generator.Generator{ return []generator.Generator{
NewPrereleaseLifecycleGen(arguments.OutputFileBaseName, pkg.Path), NewPrereleaseLifecycleGen(customArgs.OutputFile, pkg.Path),
} }
}, },
}) })

View File

@ -19,19 +19,31 @@ package args
import ( import (
"fmt" "fmt"
"github.com/spf13/pflag"
"k8s.io/gengo/v2/args" "k8s.io/gengo/v2/args"
) )
type CustomArgs struct {
OutputFile string
}
// NewDefaults returns default arguments for the generator. // NewDefaults returns default arguments for the generator.
func NewDefaults() *args.GeneratorArgs { func NewDefaults() *args.GeneratorArgs {
genericArgs := args.Default().WithoutDefaultFlagParsing() genericArgs := args.Default().WithoutDefaultFlagParsing()
genericArgs.OutputFileBaseName = "zz_generated.register" genericArgs.CustomArgs = &CustomArgs{}
return genericArgs 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. // Validate checks the given arguments.
func Validate(genericArgs *args.GeneratorArgs) error { 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") return fmt.Errorf("output file base name cannot be empty")
} }

View File

@ -25,6 +25,7 @@ import (
"k8s.io/klog/v2" "k8s.io/klog/v2"
clientgentypes "k8s.io/code-generator/cmd/client-gen/types" 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/args"
"k8s.io/gengo/v2/generator" "k8s.io/gengo/v2/generator"
"k8s.io/gengo/v2/namer" "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) klog.Fatalf("Failed loading boilerplate: %v", err)
} }
customArgs := arguments.CustomArgs.(*registerargs.CustomArgs)
targets := []generator.Target{} targets := []generator.Target{}
for _, input := range context.Inputs { for _, input := range context.Inputs {
pkg := context.Universe.Package(input) pkg := context.Universe.Package(input)
internal, err := isInternal(pkg) internal, err := isInternal(pkg)
if err != nil { 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 continue
} }
if internal { 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 continue
} }
registerFileName := "register.go" registerFileName := "register.go"
searchPath := path.Join(pkg.SourcePath, registerFileName) searchPath := path.Join(pkg.SourcePath, registerFileName)
if _, err := os.Stat(path.Join(searchPath)); err == nil { 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 continue
} else if err != nil && !os.IsNotExist(err) { } else if err != nil && !os.IsNotExist(err) {
klog.Fatalf("an error %v has occurred while checking if %s exists", err, registerFileName) 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{ return []generator.Generator{
&registerExternalGenerator{ &registerExternalGenerator{
GoGenerator: generator.GoGenerator{ GoGenerator: generator.GoGenerator{
OutputFilename: arguments.OutputFileBaseName, OutputFilename: customArgs.OutputFile,
}, },
gv: gv, gv: gv,
typesToGenerate: typesToRegister, typesToGenerate: typesToRegister,

View File

@ -144,7 +144,7 @@ function kube::codegen::gen_helpers() {
done done
"${gobin}/deepcopy-gen" \ "${gobin}/deepcopy-gen" \
-v "${v}" \ -v "${v}" \
--output-file-base zz_generated.deepcopy.go \ --output-file zz_generated.deepcopy.go \
--go-header-file "${boilerplate}" \ --go-header-file "${boilerplate}" \
"${input_args[@]}" "${input_args[@]}"
fi fi
@ -180,7 +180,7 @@ function kube::codegen::gen_helpers() {
done done
"${gobin}/defaulter-gen" \ "${gobin}/defaulter-gen" \
-v "${v}" \ -v "${v}" \
--output-file-base zz_generated.defaults.go \ --output-file zz_generated.defaults.go \
--go-header-file "${boilerplate}" \ --go-header-file "${boilerplate}" \
"${input_args[@]}" "${input_args[@]}"
fi fi
@ -220,7 +220,7 @@ function kube::codegen::gen_helpers() {
done done
"${gobin}/conversion-gen" \ "${gobin}/conversion-gen" \
-v "${v}" \ -v "${v}" \
--output-file-base zz_generated.conversion.go \ --output-file zz_generated.conversion.go \
--go-header-file "${boilerplate}" \ --go-header-file "${boilerplate}" \
"${extra_peer_args[@]:+"${extra_peer_args[@]}"}" \ "${extra_peer_args[@]:+"${extra_peer_args[@]}"}" \
"${input_args[@]}" "${input_args[@]}"
@ -373,7 +373,7 @@ function kube::codegen::gen_openapi() {
done done
"${gobin}/openapi-gen" \ "${gobin}/openapi-gen" \
-v "${v}" \ -v "${v}" \
--output-file-base zz_generated.openapi.go \ --output-file zz_generated.openapi.go \
--go-header-file "${boilerplate}" \ --go-header-file "${boilerplate}" \
--output-dir "${out_dir}" \ --output-dir "${out_dir}" \
--output-pkg "${out_pkg}" \ --output-pkg "${out_pkg}" \