Closed
Description
Using it with Go 1.22 works and break with Go 1.23, I think it's related to this:
In the latest version of go, a change was made to the generation of Alias types. From the release notes:
By default, go/types now produces Alias type nodes for type aliases. This behavior can be controlled by the GODEBUG gotypesalias flag. Its default has changed from 0 in Go 1.22 to 1 in Go 1.23.
When using Go 1.23 and tools/controller-gen
to generates my CRDs I get the following panic:
panic: interface conversion: types.Type is *types.Alias, not *types.Named
goroutine 1 [running]:
sigs.k8s.io/controller-tools/pkg/crd.localNamedToSchema(0x400186f028, 0x400098b340)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:269 +0x4ac
sigs.k8s.io/controller-tools/pkg/crd.mapToSchema(0x4001b0d6b0, 0x400097b410)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:346 +0x36c
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x4001b0d6b0, {0xa38628, 0x400097b410})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:203 +0x74
sigs.k8s.io/controller-tools/pkg/crd.structToSchema(0x400186f518, 0x4000975c50)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:455 +0xa3c
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x400186f518, {0xa38538, 0x4000975c50})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:207 +0x90
sigs.k8s.io/controller-tools/pkg/crd.infoToSchema(0x400186f518)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:125 +0xcc
sigs.k8s.io/controller-tools/pkg/crd.(*Parser).NeedSchemaFor(0x4000116120, {0x40004829a0, {0x40005c3a50, 0xd}})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/parser.go:193 +0x1e8
sigs.k8s.io/controller-tools/pkg/crd.(*schemaContext).requestSchema(0x40016d6a80?, {0x4000351a40?, 0x8e6a4b?}, {0x40005c3a50?, 0xd?})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:108 +0xd8
sigs.k8s.io/controller-tools/pkg/crd.namedToSchema(0x40016d6a80, 0x400050ec18)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:292 +0x1bc
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x40016d6a80, {0xa38598, 0x400050ec18})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:199 +0xec
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x40016d6a80, {0xa385f8, 0x400050ec30})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:205 +0xb4
sigs.k8s.io/controller-tools/pkg/crd.structToSchema(0x400186fda8, 0x400050ede0)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:455 +0xa3c
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x400186fda8, {0xa38538, 0x400050ede0})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:207 +0x90
sigs.k8s.io/controller-tools/pkg/crd.infoToSchema(0x400186fda8)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:125 +0xcc
sigs.k8s.io/controller-tools/pkg/crd.(*Parser).NeedSchemaFor(0x4000116120, {0x40004827c0, {0x40004f15d8, 0x11}})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/parser.go:193 +0x1e8
sigs.k8s.io/controller-tools/pkg/crd.(*schemaContext).requestSchema(0x4000351b00?, {0x0?, 0x8e6a4b?}, {0x40004f15d8?, 0x0?})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:108 +0xd8
sigs.k8s.io/controller-tools/pkg/crd.localNamedToSchema(0x40016728d0, 0x400007dae0)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:275 +0x168
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x40016728d0, {0xa38568, 0x400007dae0})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:197 +0xd0
sigs.k8s.io/controller-tools/pkg/crd.structToSchema(0x40018705f8, 0x400050e708)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:455 +0xa3c
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x40018705f8, {0xa38538, 0x400050e708})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:207 +0x90
sigs.k8s.io/controller-tools/pkg/crd.infoToSchema(0x40018705f8)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:125 +0xcc
sigs.k8s.io/controller-tools/pkg/crd.(*Parser).NeedSchemaFor(0x4000116120, {0x40004827c0, {0x4000697540, 0xd}})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/parser.go:193 +0x1e8
sigs.k8s.io/controller-tools/pkg/crd.(*Parser).NeedFlattenedSchemaFor(0x4000116120, {0x40004827c0, {0x4000697540, 0xd}})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/parser.go:205 +0x9c
sigs.k8s.io/controller-tools/pkg/crd.(*Parser).NeedCRDFor(0x4000116120, {{0x400089400e, 0x9}, {0x4000697540, 0xd}}, 0x0)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/spec.go:93 +0x3d8
sigs.k8s.io/controller-tools/pkg/crd.Generator.Generate({0x0, 0x0, 0x0, {0x0, 0x0, 0x0}, 0x0, {0x0, 0x0}, {0x0, ...}, ...}, ...)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/crd/gen.go:182 +0x464
sigs.k8s.io/controller-tools/pkg/genall.(*Runtime).Run(0x40000cb0e0)
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/pkg/genall/genall.go:272 +0x21c
main.main.func1(0x4000272200?, {0x40002c1b30?, 0x4?, 0x8e4bdc?})
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go:176 +0x64
github.com/spf13/cobra.(*Command).execute(0x4000282c08, {0x4000032110, 0x3, 0x3})
/src/pkg/k8s/vendor/github.com/spf13/cobra/command.go:985 +0x834
github.com/spf13/cobra.(*Command).ExecuteC(0x4000282c08)
/src/pkg/k8s/vendor/github.com/spf13/cobra/command.go:1117 +0x344
github.com/spf13/cobra.(*Command).Execute(...)
/src/pkg/k8s/vendor/github.com/spf13/cobra/command.go:1041
main.main()
/src/pkg/k8s/vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go:200 +0x290
exit status 2
You can use the project I'm working on for repro https://github.com/cilium/tetragon/actions/runs/10808612794/job/29981972633?pr=2800. Basically clone the project with that branch and run make
in pkg/k8s
.