Open markussiebert opened 1 week ago
Can you please provide the entire panic stack trace?
(cc @mtardy fyi)
Just tried out locally,
https://github.com/kubernetes-sigs/controller-tools/blob/main/pkg/crd/schema.go#L277
changing this line to
typeInfo := typeInfoRaw.(interface{ Obj() *types.TypeName })
fixes it
15:16:12 [ .. ] go generate linux_arm64
panic: interface conversion: types.Type is *types.Alias, not *types.Named
goroutine 1 [running]:
sigs.k8s.io/controller-tools/pkg/crd.namedToSchema(0x1400563c360, 0x14005704810)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:277 +0x2d4
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x1400563c360, {0x102efc8a8, 0x14005704810})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:199 +0xec
sigs.k8s.io/controller-tools/pkg/crd.structToSchema(0x1400880b638, 0x14005704828)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:435 +0x7d8
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x1400880b638, {0x102efc848, 0x14005704828})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:207 +0x90
sigs.k8s.io/controller-tools/pkg/crd.infoToSchema(0x1400880b638)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:125 +0xcc
sigs.k8s.io/controller-tools/pkg/crd.(*Parser).NeedSchemaFor(0x140089c3d40, {0x1400038c920, {0x14005716240, 0x13}})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/parser.go:193 +0x1e8
sigs.k8s.io/controller-tools/pkg/crd.(*schemaContext).requestSchema(0x1400033b810?, {0x0?, 0x102c270f2?}, {0x14005716240?, 0x0?})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:108 +0xd8
sigs.k8s.io/controller-tools/pkg/crd.localNamedToSchema(0x1400563c210, 0x1400570f720)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:263 +0x2e8
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x1400563c210, {0x102efc878, 0x1400570f720})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:197 +0xd0
sigs.k8s.io/controller-tools/pkg/crd.structToSchema(0x1400880be18, 0x140057048e8)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:435 +0x7d8
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x1400880be18, {0x102efc848, 0x140057048e8})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:207 +0x90
sigs.k8s.io/controller-tools/pkg/crd.infoToSchema(0x1400880be18)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:125 +0xcc
sigs.k8s.io/controller-tools/pkg/crd.(*Parser).NeedSchemaFor(0x140089c3d40, {0x1400038c920, {0x140057064a0, 0xe}})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/parser.go:193 +0x1e8
sigs.k8s.io/controller-tools/pkg/crd.(*schemaContext).requestSchema(0x1400033b810?, {0x0?, 0x102c270f2?}, {0x140057064a0?, 0x0?})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:108 +0xd8
sigs.k8s.io/controller-tools/pkg/crd.localNamedToSchema(0x140027fb800, 0x1400570f900)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:263 +0x2e8
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x140027fb800, {0x102efc878, 0x1400570f900})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:197 +0xd0
sigs.k8s.io/controller-tools/pkg/crd.structToSchema(0x1400880c5f8, 0x14005704a20)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:435 +0x7d8
sigs.k8s.io/controller-tools/pkg/crd.typeToSchema(0x1400880c5f8, {0x102efc848, 0x14005704a20})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:207 +0x90
sigs.k8s.io/controller-tools/pkg/crd.infoToSchema(0x1400880c5f8)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go:125 +0xcc
sigs.k8s.io/controller-tools/pkg/crd.(*Parser).NeedSchemaFor(0x140089c3d40, {0x1400038c920, {0x140057064f0, 0x8}})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/parser.go:193 +0x1e8
sigs.k8s.io/controller-tools/pkg/crd.(*Parser).NeedFlattenedSchemaFor(0x140089c3d40, {0x1400038c920, {0x140057064f0, 0x8}})
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/parser.go:205 +0x9c
sigs.k8s.io/controller-tools/pkg/crd.(*Parser).NeedCRDFor(0x140089c3d40, {{0x14003932f9e, 0x16}, {0x140057064f0, 0x8}}, 0x0)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/spec.go:93 +0x3d8
sigs.k8s.io/controller-tools/pkg/crd.Generator.Generate({0x0, 0x0, 0x0, {0x1400004e170, 0x1, 0x1}, 0x0, {0x0, 0x0}, {0x0, ...}, ...}, ...)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/crd/gen.go:182 +0x464
sigs.k8s.io/controller-tools/pkg/genall.(*Runtime).Run(0x14000169b90)
/..some..provider../vendor/sigs.k8s.io/controller-tools/pkg/genall/genall.go:272 +0x21c
main.main.func1(0x1400017c300?, {0x140002e20c0?, 0x4?, 0x102c252d7?})
/..some..provider../vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go:176 +0x64
github.com/spf13/cobra.(*Command).execute(0x1400029ac08, {0x14000116060, 0x4, 0x4})
/..some..provider../vendor/github.com/spf13/cobra/command.go:985 +0x834
github.com/spf13/cobra.(*Command).ExecuteC(0x1400029ac08)
/..some..provider../vendor/github.com/spf13/cobra/command.go:1117 +0x344
github.com/spf13/cobra.(*Command).Execute(...)
/..some..provider../vendor/github.com/spf13/cobra/command.go:1041
main.main()
/..some..provider../vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go:200 +0x290
exit status 2
apis/generate.go:26: running "go": exit status 1
15:16:16 [FAIL]
make: *** [go.generate] Error 1
Just tried out locally,
https://github.com/kubernetes-sigs/controller-tools/blob/main/pkg/crd/schema.go#L277
changing this line to
typeInfo := typeInfoRaw.(interface{ Obj() *types.TypeName })
fixes it
Oh it seems I didn’t hit that indeed. Maybe you can add a test for it and fix it similarly that in https://github.com/kubernetes-sigs/controller-tools/pull/1061 :)
I’ll do grep on (*types.Named)
when I’m in front of a computer maybe there are some lefts that we can hit.
I’ll do grep on
(*types.Named)
when I’m in front of a computer maybe there are some lefts that we can hit.
After fixing this one:
$ git grep '(*types.Named)'
pkg/crd/gen.go: namedField, isNamed := fieldType.(*types.Named)
pkg/deepcopy/traverse.go: if asPtr, isPtr := typeInfo.(*types.Named).Underlying().(*types.Pointer); isPtr {
pkg/deepcopy/traverse.go: if _, isNamed := typeInfo.(*types.Named); isNamed {
Those should be not panicking as in two cases they are checking isNamed
. The other maybe should be replaced with (interface { Underlying() types.Type })
since it's shared between both Named and Alias. But I'm unsure we could hit that since I'm not familiar with that area.
Hi,
just experiencing this issue (https://github.com/kubernetes-sigs/controller-tools/issues/1053) again:
Version:
We are on go 1.23.1