diff --git a/pkg/generators/clientgen/clientgen.go b/pkg/generators/clientgen/clientgen.go index d6d10a229..1dcc180ca 100644 --- a/pkg/generators/clientgen/clientgen.go +++ b/pkg/generators/clientgen/clientgen.go @@ -226,8 +226,8 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error { } // adapted from https://github.com/kubernetes/kubernetes/blob/8f269d6df2a57544b73d5ca35e04451373ef334c/staging/src/k8s.io/code-generator/cmd/client-gen/types/helpers.go#L87-L103 -func toGroupVersionInfos(groupVersionKinds map[parser.Group]map[types.PackageVersion][]parser.Kind) []types.GroupVersionInfo { - var info []types.GroupVersionInfo +func toGroupVersionInfos(groupVersionKinds map[parser.Group]map[types.PackageVersion][]parser.Kind) []parser.Group { + var info []parser.Group for group, versions := range groupVersionKinds { for version := range versions { info = append(info, toGroupVersionInfo(group, version)) @@ -240,12 +240,13 @@ func toGroupVersionInfos(groupVersionKinds map[parser.Group]map[types.PackageVer } // adapted from https://github.com/kubernetes/kubernetes/blob/8f269d6df2a57544b73d5ca35e04451373ef334c/staging/src/k8s.io/code-generator/cmd/client-gen/types/helpers.go#L87-L103 -func toGroupVersionInfo(group parser.Group, version types.PackageVersion) types.GroupVersionInfo { - return types.GroupVersionInfo{ +func toGroupVersionInfo(group parser.Group, version types.PackageVersion) parser.Group { + goName := strings.ReplaceAll(group.GoName, "-", "") + return parser.Group{ Group: group.Group, - Version: types.Version(namer.IC(version.Version.String())), - PackageAlias: strings.ToLower(group.GoName + version.Version.NonEmpty()), - GroupGoName: group.GoName, - LowerCaseGroupGoName: namer.IL(group.GoName), + Version: parser.Version(namer.IC(version.Version.String())), + PackageAlias: strings.ToLower(goName + version.Version.NonEmpty()), + GoName: goName, + LowerCaseGroupGoName: namer.IL(goName), } } diff --git a/pkg/generators/informergen/informergen.go b/pkg/generators/informergen/informergen.go index 157585c87..40240f6b8 100644 --- a/pkg/generators/informergen/informergen.go +++ b/pkg/generators/informergen/informergen.go @@ -146,12 +146,12 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error { return err } - gvks := map[types.Group]map[types.Version][]parser.Kind{} + gvks := map[types.Group]map[parser.Version][]parser.Kind{} for group, versions := range groupVersionKinds { for version, kinds := range versions { info := toGroupVersionInfo(group, version) if _, exists := gvks[info.Group]; !exists { - gvks[info.Group] = map[types.Version][]parser.Kind{} + gvks[info.Group] = map[parser.Version][]parser.Kind{} } gvks[info.Group][info.Version] = kinds } @@ -178,7 +178,7 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error { } for group, versions := range groupVersionKinds { - groupDir := filepath.Join(informersDir, group.PackageName()) + groupDir := filepath.Join(informersDir, group.PackagePath()) outputFile := filepath.Join(groupDir, "interface.go") logger := logger.WithValues( "group", group.String(), @@ -246,8 +246,8 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error { } // adapted from https://github.com/kubernetes/kubernetes/blob/8f269d6df2a57544b73d5ca35e04451373ef334c/staging/src/k8s.io/code-generator/cmd/client-gen/types/helpers.go#L87-L103 -func toGroupVersionInfos(groupVersionKinds map[parser.Group]map[types.PackageVersion][]parser.Kind) []types.GroupVersionInfo { - var info []types.GroupVersionInfo +func toGroupVersionInfos(groupVersionKinds map[parser.Group]map[types.PackageVersion][]parser.Kind) []parser.Group { + var info []parser.Group for group, versions := range groupVersionKinds { for version := range versions { info = append(info, toGroupVersionInfo(group, version)) @@ -260,12 +260,12 @@ func toGroupVersionInfos(groupVersionKinds map[parser.Group]map[types.PackageVer } // adapted from https://github.com/kubernetes/kubernetes/blob/8f269d6df2a57544b73d5ca35e04451373ef334c/staging/src/k8s.io/code-generator/cmd/client-gen/types/helpers.go#L87-L103 -func toGroupVersionInfo(group parser.Group, version types.PackageVersion) types.GroupVersionInfo { - return types.GroupVersionInfo{ +func toGroupVersionInfo(group parser.Group, version types.PackageVersion) parser.Group { + return parser.Group{ Group: group.Group, - Version: types.Version(namer.IC(version.Version.String())), - PackageAlias: strings.ToLower(group.GoName + version.Version.NonEmpty()), - GroupGoName: group.GoName, - LowerCaseGroupGoName: namer.IL(group.GoName), + PackageAlias: strings.ReplaceAll(strings.ToLower(group.GoName+version.Version.NonEmpty()), "-", ""), + Version: parser.Version(namer.IC(version.Version.String())), + GoName: strings.ReplaceAll(group.GoName, "-", ""), + LowerCaseGroupGoName: strings.ReplaceAll(namer.IL(group.GoName), "-", ""), } } diff --git a/pkg/generators/listergen/listergen.go b/pkg/generators/listergen/listergen.go index 0aa7ebe48..2576c08af 100644 --- a/pkg/generators/listergen/listergen.go +++ b/pkg/generators/listergen/listergen.go @@ -86,7 +86,7 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error { for version, kinds := range versions { groupInfo := toGroupVersionInfo(group, version) for _, kind := range kinds { - listerDir := filepath.Join("listers", group.PackageName(), version.PackageName()) + listerDir := filepath.Join("listers", group.PackagePath(), version.PackageName()) outputFile := filepath.Join(listerDir, strings.ToLower(kind.String())+".go") logger := klog.Background().WithValues( "group", group.String(), @@ -126,12 +126,12 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error { } // adapted from https://github.com/kubernetes/kubernetes/blob/8f269d6df2a57544b73d5ca35e04451373ef334c/staging/src/k8s.io/code-generator/cmd/client-gen/types/helpers.go#L87-L103 -func toGroupVersionInfo(group parser.Group, version types.PackageVersion) types.GroupVersionInfo { - return types.GroupVersionInfo{ +func toGroupVersionInfo(group parser.Group, version types.PackageVersion) parser.Group { + return parser.Group{ Group: group.Group, - Version: types.Version(namer.IC(version.Version.String())), - PackageAlias: strings.ToLower(group.GoName + version.Version.NonEmpty()), - GroupGoName: group.GoName, - LowerCaseGroupGoName: namer.IL(group.GoName), + Version: parser.Version(namer.IC(version.Version.String())), + PackageAlias: strings.ReplaceAll(strings.ToLower(group.GoName+version.Version.NonEmpty()), "-", ""), + GoName: strings.ReplaceAll(group.GoName, "-", ""), + LowerCaseGroupGoName: strings.ReplaceAll(namer.IL(group.GoName), "-", ""), } } diff --git a/pkg/internal/clientgen/clientset.go b/pkg/internal/clientgen/clientset.go index 943a15fbb..7791c2e43 100644 --- a/pkg/internal/clientgen/clientset.go +++ b/pkg/internal/clientgen/clientset.go @@ -5,8 +5,7 @@ import ( "strings" "text/template" - "k8s.io/code-generator/cmd/client-gen/types" - + "github.com/kcp-dev/code-generator/v2/pkg/parser" "github.com/kcp-dev/code-generator/v2/pkg/util" ) @@ -15,7 +14,7 @@ type ClientSet struct { Name string // Groups are the groups in this client-set. - Groups []types.GroupVersionInfo + Groups []parser.Group // PackagePath is the package under which this client-set will be exposed. // TODO(skuznets) we should be able to figure this out from the output dir, ideally @@ -38,6 +37,7 @@ func (c *ClientSet) WriteContent(w io.Writer) error { m := map[string]interface{}{ "name": c.Name, + "packageName": strings.ReplaceAll(c.Name, "-", ""), "packagePath": c.PackagePath, "groups": c.Groups, "singleClusterClientPackagePath": c.SingleClusterClientPackagePath, @@ -51,7 +51,7 @@ var clientset = ` // Code generated by kcp code-generator. DO NOT EDIT. -package {{.name}} +package {{.packageName}} import ( "fmt" @@ -66,14 +66,14 @@ import ( "k8s.io/client-go/rest" "k8s.io/client-go/util/flowcontrol" -{{range .groups}} {{.PackageAlias}} "{{$.packagePath}}/typed/{{.Group.PackageName}}/{{.Version.PackageName}}" +{{range .groups}} {{.GoPackageAlias}} "{{$.packagePath}}/typed/{{.Group.PackageName}}/{{.Version.PackageName}}" {{end -}} ) type ClusterInterface interface { Cluster(logicalcluster.Path) client.Interface Discovery() discovery.DiscoveryInterface -{{range .groups}} {{.GroupGoName}}{{.Version}}() {{.PackageAlias}}.{{.GroupGoName}}{{.Version}}ClusterInterface +{{range .groups}} {{.GroupGoName}}{{.Version}}() {{.GoPackageAlias}}.{{.GroupGoName}}{{.Version}}ClusterInterface {{end -}} } @@ -81,7 +81,7 @@ type ClusterInterface interface { type ClusterClientset struct { *discovery.DiscoveryClient clientCache kcpclient.Cache[*client.Clientset] -{{range .groups}} {{.LowerCaseGroupGoName}}{{.Version}} *{{.PackageAlias}}.{{.GroupGoName}}{{.Version}}ClusterClient +{{range .groups}} {{.LowerCaseGroupGoName}}{{.Version}} *{{.GoPackageAlias}}.{{.GroupGoName}}{{.Version}}ClusterClient {{end -}} } diff --git a/pkg/internal/clientgen/fake_clientset.go b/pkg/internal/clientgen/fake_clientset.go index 511f61e70..1173e04eb 100644 --- a/pkg/internal/clientgen/fake_clientset.go +++ b/pkg/internal/clientgen/fake_clientset.go @@ -5,8 +5,7 @@ import ( "strings" "text/template" - "k8s.io/code-generator/cmd/client-gen/types" - + "github.com/kcp-dev/code-generator/v2/pkg/parser" "github.com/kcp-dev/code-generator/v2/pkg/util" ) @@ -15,7 +14,7 @@ type FakeClientset struct { Name string // Groups are the groups in this client-set. - Groups []types.GroupVersionInfo + Groups []parser.Group // PackagePath is the package under which this client-set will be exposed. // TODO(skuznets) we should be able to figure this out from the output dir, ideally diff --git a/pkg/internal/clientgen/fake_group.go b/pkg/internal/clientgen/fake_group.go index cd3b96b0b..e2536b1e5 100644 --- a/pkg/internal/clientgen/fake_group.go +++ b/pkg/internal/clientgen/fake_group.go @@ -5,15 +5,13 @@ import ( "strings" "text/template" - "k8s.io/code-generator/cmd/client-gen/types" - "github.com/kcp-dev/code-generator/v2/pkg/parser" "github.com/kcp-dev/code-generator/v2/pkg/util" ) type FakeGroup struct { // Group is the group in this client. - Group types.GroupVersionInfo + Group parser.Group // Kinds are the kinds in the group. Kinds []parser.Kind diff --git a/pkg/internal/clientgen/fake_type.go b/pkg/internal/clientgen/fake_type.go index c52abf527..2a62914e4 100644 --- a/pkg/internal/clientgen/fake_type.go +++ b/pkg/internal/clientgen/fake_type.go @@ -8,7 +8,6 @@ import ( "text/template" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/code-generator/cmd/client-gen/types" "github.com/kcp-dev/code-generator/v2/pkg/parser" "github.com/kcp-dev/code-generator/v2/pkg/util" @@ -16,7 +15,7 @@ import ( type FakeTypedClient struct { // Group is the group in this client. - Group types.GroupVersionInfo + Group parser.Group // Kind is the kinds in this file. Kind parser.Kind diff --git a/pkg/internal/clientgen/group.go b/pkg/internal/clientgen/group.go index 9421c1733..f0b065b2b 100644 --- a/pkg/internal/clientgen/group.go +++ b/pkg/internal/clientgen/group.go @@ -5,15 +5,13 @@ import ( "strings" "text/template" - "k8s.io/code-generator/cmd/client-gen/types" - "github.com/kcp-dev/code-generator/v2/pkg/parser" "github.com/kcp-dev/code-generator/v2/pkg/util" ) type Group struct { // Group is the group in this client. - Group types.GroupVersionInfo + Group parser.Group // Kinds are the kinds in the group. Kinds []parser.Kind diff --git a/pkg/internal/clientgen/scheme.go b/pkg/internal/clientgen/scheme.go index 6b5524e35..278dcd7f6 100644 --- a/pkg/internal/clientgen/scheme.go +++ b/pkg/internal/clientgen/scheme.go @@ -5,14 +5,13 @@ import ( "strings" "text/template" - "k8s.io/code-generator/cmd/client-gen/types" - + "github.com/kcp-dev/code-generator/v2/pkg/parser" "github.com/kcp-dev/code-generator/v2/pkg/util" ) type Scheme struct { // Groups are the groups in this client-set. - Groups []types.GroupVersionInfo + Groups []parser.Group // APIPackagePath is the root directory under which API types exist. // e.g. "k8s.io/api" @@ -51,7 +50,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/serializer" utilruntime "k8s.io/apimachinery/pkg/util/runtime" -{{range .groups}} {{.PackageAlias}} "{{$.apiPackagePath}}/{{.Group.PackageName}}/{{.Version.PackageName}}" +{{range .groups}} {{.GoPackageAlias}} "{{$.apiPackagePath}}/{{.Group.PackageName}}/{{.Version.PackageName}}" {{end -}} ) @@ -59,7 +58,7 @@ var Scheme = runtime.NewScheme() var Codecs = serializer.NewCodecFactory(Scheme) var ParameterCodec = runtime.NewParameterCodec(Scheme) var localSchemeBuilder = runtime.SchemeBuilder{ -{{range .groups}} {{.PackageAlias}}.AddToScheme, +{{range .groups}} {{.GoPackageAlias}}.AddToScheme, {{end -}} } diff --git a/pkg/internal/clientgen/type.go b/pkg/internal/clientgen/type.go index bb5a95e33..2e0ed611e 100644 --- a/pkg/internal/clientgen/type.go +++ b/pkg/internal/clientgen/type.go @@ -5,15 +5,13 @@ import ( "strings" "text/template" - "k8s.io/code-generator/cmd/client-gen/types" - "github.com/kcp-dev/code-generator/v2/pkg/parser" "github.com/kcp-dev/code-generator/v2/pkg/util" ) type TypedClient struct { // Group is the group in this client. - Group types.GroupVersionInfo + Group parser.Group // Kind is the kinds in this file. Kind parser.Kind @@ -62,10 +60,10 @@ import ( "context" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/watch" - {{.group.PackageAlias}} "{{.apiPackagePath}}/{{.group.Group.PackageName}}/{{.group.Version.PackageName}}" + {{.group.GoPackageAlias}} "{{.apiPackagePath}}/{{.group.Group.PackageName}}/{{.group.Version.PackageName}}" {{end}} - {{.group.PackageAlias}}client "{{.singleClusterClientPackagePath}}/typed/{{.group.Group.PackageName}}/{{.group.Version.PackageName}}" + {{.group.GoPackageAlias}}client "{{.singleClusterClientPackagePath}}/typed/{{.group.Group.PackageName}}/{{.group.Version.PackageName}}" ) // {{.kind.Plural}}ClusterGetter has a method to return a {{.kind.String}}ClusterInterface. diff --git a/pkg/internal/informergen/factory.go b/pkg/internal/informergen/factory.go index 9563eeaa9..31ada8247 100644 --- a/pkg/internal/informergen/factory.go +++ b/pkg/internal/informergen/factory.go @@ -92,7 +92,7 @@ import ( upstreaminformers "{{.singleClusterInformerPackagePath}}" {{end -}} -{{range .groups}} {{.Group.PackageName}}informers "{{$.packagePath}}/{{.Group.PackageName}}" +{{range .groups}} {{.PackageName}}informers "{{$.packagePath}}/{{.Group.PackageName}}" {{end -}} "{{.packagePath}}/internalinterfaces" @@ -329,12 +329,12 @@ type SharedInformerFactory interface { // InformerFor returns the SharedIndexInformer for obj. InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) kcpcache.ScopeableSharedIndexInformer -{{range .groups}} {{.GoName}}() {{.Group.PackageName}}informers.ClusterInterface +{{range .groups}} {{.GroupGoName}}() {{.PackageName}}informers.ClusterInterface {{end -}} } {{range .groups}} -func (f *sharedInformerFactory) {{.GoName}}() {{.Group.PackageName}}informers.ClusterInterface { +func (f *sharedInformerFactory) {{.GroupGoName}}() {{.PackageName}}informers.ClusterInterface { return {{.Group.PackageName}}informers.New(f, f.tweakListOptions) } {{end}} @@ -485,13 +485,13 @@ type SharedScopedInformerFactory interface { ForResource(resource schema.GroupVersionResource) (GenericInformer, error) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool -{{range .groups}} {{.GoName}}() {{.Group.PackageName}}informers.Interface +{{range .groups}} {{.GroupGoName}}() {{.PackageName}}informers.Interface {{end -}} } {{range .groups}} -func (f *sharedScopedInformerFactory) {{.GoName}}() {{.Group.PackageName}}informers.Interface { +func (f *sharedScopedInformerFactory) {{.GroupGoName}}() {{.PackageName}}informers.Interface { return {{.Group.PackageName}}informers.NewScoped(f, f.namespace, f.tweakListOptions) } {{end}} diff --git a/pkg/internal/informergen/generic.go b/pkg/internal/informergen/generic.go index 18ce9b072..d43b7eaa8 100644 --- a/pkg/internal/informergen/generic.go +++ b/pkg/internal/informergen/generic.go @@ -27,10 +27,10 @@ import ( type Generic struct { // Groups are the groups in this informer factory. - Groups []types.GroupVersionInfo + Groups []parser.Group // GroupVersionKinds are all the kinds we need to support,indexed by group and version. - GroupVersionKinds map[types.Group]map[types.Version][]parser.Kind + GroupVersionKinds map[types.Group]map[parser.Version][]parser.Kind // APIPackagePath is the root directory under which API types exist. // e.g. "k8s.io/api" @@ -78,7 +78,7 @@ import ( upstreaminformers "{{.singleClusterInformerPackagePath}}" {{end -}} -{{range .groups}} {{.PackageAlias}} "{{$.apiPackagePath}}/{{.Group.PackageName}}/{{.Version.PackageName}}" +{{range .groups}} {{.GoPackageAlias}} "{{$.apiPackagePath}}/{{.Group.PackageName}}/{{.Version.PackageName}}" {{end -}} ) diff --git a/pkg/internal/informergen/groupinterface.go b/pkg/internal/informergen/groupinterface.go index 9848d4336..110a93fd9 100644 --- a/pkg/internal/informergen/groupinterface.go +++ b/pkg/internal/informergen/groupinterface.go @@ -18,6 +18,7 @@ package informergen import ( "io" + "strings" "text/template" "k8s.io/code-generator/cmd/client-gen/types" @@ -49,6 +50,7 @@ func (g GroupInterface) WriteContent(w io.Writer) error { m := map[string]interface{}{ "group": g.Group, + "packageName": strings.ReplaceAll(g.Group.PackageName(), "-", ""), "packagePath": g.PackagePath, "versions": g.Versions, "useUpstreamInterfaces": g.UseUpstreamInterfaces, @@ -62,7 +64,7 @@ var groupInterface = ` // Code generated by kcp code-generator. DO NOT EDIT. -package {{.group.Group.PackageName}} +package {{.packageName}} import ( {{range .versions}} "{{$.packagePath}}/{{$.group.Group.PackageName}}/{{.PackageName}}" diff --git a/pkg/internal/informergen/informer.go b/pkg/internal/informergen/informer.go index 91b2b35f8..d19835a82 100644 --- a/pkg/internal/informergen/informer.go +++ b/pkg/internal/informergen/informer.go @@ -20,14 +20,12 @@ import ( "io" "text/template" - "k8s.io/code-generator/cmd/client-gen/types" - "github.com/kcp-dev/code-generator/v2/pkg/parser" ) type Informer struct { // Group is the group in this informer. - Group types.GroupVersionInfo + Group parser.Group // Kind is the kind in this file. Kind parser.Kind diff --git a/pkg/internal/informergen/versioninterface.go b/pkg/internal/informergen/versioninterface.go index fb20d35ac..41905a2bf 100644 --- a/pkg/internal/informergen/versioninterface.go +++ b/pkg/internal/informergen/versioninterface.go @@ -18,6 +18,7 @@ package informergen import ( "io" + "strings" "text/template" "k8s.io/code-generator/cmd/client-gen/types" @@ -51,6 +52,7 @@ func (v *VersionInterface) WriteContent(w io.Writer) error { "version": v.Version, "kinds": v.Kinds, "packagePath": v.PackagePath, + "packageName": strings.ReplaceAll(v.Version.PackageName(), "-", ""), "useUpstreamInterfaces": v.UseUpstreamInterfaces, } return templ.Execute(w, m) @@ -62,7 +64,7 @@ var versionInterfaceTemplate = ` // Code generated by kcp code-generator. DO NOT EDIT. -package {{.version.PackageName}} +package {{.packageName}} import ( "{{.packagePath}}/internalinterfaces" diff --git a/pkg/internal/listergen/expansions.go b/pkg/internal/listergen/expansions.go index 13edd29ab..5c4f3089c 100644 --- a/pkg/internal/listergen/expansions.go +++ b/pkg/internal/listergen/expansions.go @@ -4,8 +4,6 @@ import ( "io" "text/template" - clientgentypes "k8s.io/code-generator/cmd/client-gen/types" - "github.com/kcp-dev/code-generator/v2/pkg/parser" ) @@ -13,7 +11,7 @@ type Expansions struct { // Group is: // - the name of the API group, e.g. "authorization", // - the version and package path of the API, e.g. "v1" and "k8s.io/api/rbac/v1" - Group clientgentypes.GroupVersionInfo + Group parser.Group // Kind is the kind for which we are generating listers, e.g. "ClusterRole" Kind parser.Kind diff --git a/pkg/internal/listergen/lister.go b/pkg/internal/listergen/lister.go index 48ff2416c..b1755a3e5 100644 --- a/pkg/internal/listergen/lister.go +++ b/pkg/internal/listergen/lister.go @@ -4,8 +4,6 @@ import ( "io" "text/template" - clientgentypes "k8s.io/code-generator/cmd/client-gen/types" - "github.com/kcp-dev/code-generator/v2/pkg/parser" ) @@ -13,7 +11,7 @@ type Lister struct { // Group is: // - the name of the API group, e.g. "authorization", // - the version and package path of the API, e.g. "v1" and "k8s.io/api/rbac/v1" - Group clientgentypes.GroupVersionInfo + Group parser.Group // Kind is the kind for which we are generating listers, e.g. "ClusterRole" Kind parser.Kind diff --git a/pkg/parser/types.go b/pkg/parser/types.go index 00fbd86e5..cd98ae610 100644 --- a/pkg/parser/types.go +++ b/pkg/parser/types.go @@ -17,6 +17,8 @@ limitations under the License. package parser import ( + "strings" + "k8s.io/apimachinery/pkg/util/sets" "k8s.io/code-generator/cmd/client-gen/types" @@ -34,7 +36,32 @@ type Kind struct { type Group struct { types.Group - GoName string + GoName string `marker:",+groupGoName"` + Version Version + PackageAlias string + LowerCaseGroupGoName string +} + +func (g Group) GoPackageAlias() string { + if g.PackageAlias == "" { + panic("PackageAlias is empty. Programmer error.") + } + return strings.ReplaceAll(g.PackageAlias, "-", "") +} + +func (g Group) GroupGoName() string { + if g.GoName == "" { + panic("GroupGoName is empty. Programmer error.") + } + return strings.ReplaceAll(g.GoName, "-", "") // Code base is litterate with either GoName or GroupGoName. We should unify this. +} + +func (g Group) PackagePath() string { + return strings.ToLower(g.Group.PackageName()) +} + +func (g Group) PackageName() string { + return strings.ToLower(strings.ReplaceAll(g.Group.PackageName(), "-", "")) } func (k *Kind) Plural() string { @@ -53,6 +80,23 @@ func (k *Kind) SupportsListWatch() bool { return k.SupportedVerbs.HasAll("list", "watch") } +type Version string + +func (v Version) String() string { + return string(v) +} + +func (v Version) NonEmpty() string { + if v == "" { + return "internalVersion" + } + return v.String() +} + +func (v Version) PackageName() string { + return strings.ToLower(v.NonEmpty()) +} + // TODO(skuznets): // add an e2e for a kind that has no verbs, but uses an extension for something // then ensure we add in fake_type.go entries for the extension