From 6ab2d5bf0875ede1892f7518cf1aa2d801891fd9 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sat, 18 Apr 2026 16:20:01 -0500 Subject: [PATCH] fix: nondeterministic NonNamespaced annotations in register generator Two bugs caused nondeterministic NonNamespaced annotations in generated register files: 1. parse.go gated NonNamespaced detection behind next.Resource != nil, but types can be encountered first as subtypes (Resource=nil) via map iteration. Since processed types are skipped on re-encounter, the Resource version never runs, leaving NonNamespaced=false. 2. The template unconditionally emitted "// +genclient" on one line, then conditionally emitted "// +genclient:nonNamespaced" or a duplicate "// +genclient" on the next. Now the second line only emits when NonNamespaced is true. --- pkg/generate/parse.go | 4 +--- pkg/generate/unversioned_generator.go | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pkg/generate/parse.go b/pkg/generate/parse.go index 76659f12..5813c69a 100644 --- a/pkg/generate/parse.go +++ b/pkg/generate/parse.go @@ -579,9 +579,7 @@ func (b *APIsBuilder) ParseStructsAndAliases(apigroup *APIGroup) { result.GenDeepCopy = true } - if next.Resource != nil { - result.NonNamespaced = IsNonNamespaced(next.Type) - } + result.NonNamespaced = IsNonNamespaced(next.Type) if b.GenDeepCopy(next.Type) { result.GenDeepCopy = true diff --git a/pkg/generate/unversioned_generator.go b/pkg/generate/unversioned_generator.go index e1540c82..5806ece3 100644 --- a/pkg/generate/unversioned_generator.go +++ b/pkg/generate/unversioned_generator.go @@ -167,7 +167,7 @@ type {{ $a.Name }} {{ $a.UnderlyingTypeName }} {{ range $s := .Structs -}} {{ if $s.GenUnversioned -}} {{ if $s.GenClient }}// +genclient{{end}} -{{ if $s.GenClient }}// +genclient{{ if $s.NonNamespaced }}:nonNamespaced{{end}}{{end}} +{{ if and $s.GenClient $s.NonNamespaced }}// +genclient:nonNamespaced{{end}} {{ if $s.GenDeepCopy }}// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object{{end}} type {{ $s.Name }} struct {