From 8105dd7c788a73e8bd9f331fa0cffade1694a06e Mon Sep 17 00:00:00 2001 From: Vu Dinh Date: Tue, 22 Oct 2024 04:03:19 -0400 Subject: [PATCH] Restore build-tag for conversion and defaulter gen The build-tag flag is removed but it is still useful to provide a way to inject a custom build tag that is different from the default build tag. This custom build tag will allow gengo to load certain conversion and defaults funcs that reside in files with default build tag which is usually ignored by gengo. Signed-off-by: Vu Dinh --- .../code-generator/cmd/conversion-gen/args/args.go | 14 ++++++++++++-- .../cmd/conversion-gen/generators/conversion.go | 2 +- .../code-generator/cmd/conversion-gen/main.go | 2 +- .../code-generator/cmd/defaulter-gen/args/args.go | 13 ++++++++++++- .../cmd/defaulter-gen/generators/defaulter.go | 2 +- .../code-generator/cmd/defaulter-gen/main.go | 2 +- 6 files changed, 28 insertions(+), 7 deletions(-) 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 cc61c48d49f..02663bfce1a 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 @@ -20,6 +20,8 @@ import ( "fmt" "github.com/spf13/pflag" + + "k8s.io/gengo/v2" ) // DefaultBasePeerDirs are the peer-dirs nearly everybody will use, i.e. those coming from @@ -57,13 +59,20 @@ type Args struct { // GoHeaderFile is the path to a boilerplate header file for generated // code. GoHeaderFile string + + // GeneratedBuildTag is the tag used to identify code generated by execution + // of this type. Each generator should use a different tag, and different + // groups of generators (external API that depends on Kube generations) should + // keep tags distinct as well. + GeneratedBuildTag string } // New returns default arguments for the generator. func New() *Args { return &Args{ - BasePeerDirs: DefaultBasePeerDirs, - SkipUnsafe: false, + BasePeerDirs: DefaultBasePeerDirs, + SkipUnsafe: false, + GeneratedBuildTag: gengo.StdBuildTag, } } @@ -81,6 +90,7 @@ func (args *Args) AddFlags(fs *pflag.FlagSet) { "If true, will not generate code using unsafe pointer conversions; resulting code may be slower.") fs.StringVar(&args.GoHeaderFile, "go-header-file", "", "the path to a file containing boilerplate header text; the string \"YEAR\" will be replaced with the current 4-digit year") + fs.StringVar(&args.GeneratedBuildTag, "build-tag", args.GeneratedBuildTag, "A Go build tag to use to identify files generated by this command. Should be unique.") } // Validate checks the given arguments. 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 b1ac8209a56..a5f1b0cfb43 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 @@ -196,7 +196,7 @@ func getManualConversionFunctions(context *generator.Context, pkg *types.Package } func GetTargets(context *generator.Context, args *args.Args) []generator.Target { - boilerplate, err := gengo.GoBoilerplate(args.GoHeaderFile, gengo.StdBuildTag, gengo.StdGeneratedBy) + boilerplate, err := gengo.GoBoilerplate(args.GoHeaderFile, args.GeneratedBuildTag, gengo.StdGeneratedBy) if err != nil { klog.Fatalf("Failed loading boilerplate: %v", err) } diff --git a/staging/src/k8s.io/code-generator/cmd/conversion-gen/main.go b/staging/src/k8s.io/code-generator/cmd/conversion-gen/main.go index cd52a9b9643..5aec5025d58 100644 --- a/staging/src/k8s.io/code-generator/cmd/conversion-gen/main.go +++ b/staging/src/k8s.io/code-generator/cmd/conversion-gen/main.go @@ -128,7 +128,7 @@ func main() { generators.NameSystems(), generators.DefaultNameSystem(), myTargets, - gengo.StdBuildTag, + args.GeneratedBuildTag, pflag.Args(), ); err != nil { klog.Fatalf("Error: %v", err) 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 52a9d1c67d0..8d8dfe97f42 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 @@ -20,17 +20,27 @@ import ( "fmt" "github.com/spf13/pflag" + + "k8s.io/gengo/v2" ) type Args struct { OutputFile string ExtraPeerDirs []string // Always consider these as last-ditch possibilities for conversions. GoHeaderFile string + + // GeneratedBuildTag is the tag used to identify code generated by execution + // of this type. Each generator should use a different tag, and different + // groups of generators (external API that depends on Kube generations) should + // keep tags distinct as well. + GeneratedBuildTag string } // New returns default arguments for the generator. func New() *Args { - return &Args{} + return &Args{ + GeneratedBuildTag: gengo.StdBuildTag, + } } // AddFlags add the generator flags to the flag set. @@ -41,6 +51,7 @@ func (args *Args) AddFlags(fs *pflag.FlagSet) { "Comma-separated list of import paths which are considered, after tag-specified peers, for conversions.") fs.StringVar(&args.GoHeaderFile, "go-header-file", "", "the path to a file containing boilerplate header text; the string \"YEAR\" will be replaced with the current 4-digit year") + fs.StringVar(&args.GeneratedBuildTag, "build-tag", args.GeneratedBuildTag, "A Go build tag to use to identify files generated by this command. Should be unique.") } // Validate checks the given arguments. diff --git a/staging/src/k8s.io/code-generator/cmd/defaulter-gen/generators/defaulter.go b/staging/src/k8s.io/code-generator/cmd/defaulter-gen/generators/defaulter.go index f7a6864c745..82e1cdd2070 100644 --- a/staging/src/k8s.io/code-generator/cmd/defaulter-gen/generators/defaulter.go +++ b/staging/src/k8s.io/code-generator/cmd/defaulter-gen/generators/defaulter.go @@ -222,7 +222,7 @@ func getManualDefaultingFunctions(context *generator.Context, pkg *types.Package } func GetTargets(context *generator.Context, args *args.Args) []generator.Target { - boilerplate, err := gengo.GoBoilerplate(args.GoHeaderFile, gengo.StdBuildTag, gengo.StdGeneratedBy) + boilerplate, err := gengo.GoBoilerplate(args.GoHeaderFile, args.GeneratedBuildTag, gengo.StdGeneratedBy) if err != nil { klog.Fatalf("Failed loading boilerplate: %v", err) } diff --git a/staging/src/k8s.io/code-generator/cmd/defaulter-gen/main.go b/staging/src/k8s.io/code-generator/cmd/defaulter-gen/main.go index d57ca0666cd..0250c1328fd 100644 --- a/staging/src/k8s.io/code-generator/cmd/defaulter-gen/main.go +++ b/staging/src/k8s.io/code-generator/cmd/defaulter-gen/main.go @@ -74,7 +74,7 @@ func main() { generators.NameSystems(), generators.DefaultNameSystem(), myTargets, - gengo.StdBuildTag, + args.GeneratedBuildTag, pflag.Args(), ); err != nil { klog.Fatalf("Error: %v", err)