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}" \
-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}" \

View File

@ -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

View File

@ -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),
}
},
})

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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),
}
},
})

View File

@ -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")
}

View File

@ -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{
&registerExternalGenerator{
GoGenerator: generator.GoGenerator{
OutputFilename: arguments.OutputFileBaseName,
OutputFilename: customArgs.OutputFile,
},
gv: gv,
typesToGenerate: typesToRegister,

View File

@ -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}" \