make target generate-manifests panics when using go version 1.22
What steps did you take and what happened?
- install go version 1.22
- checkout new copy of cluster-api repo
- run
make generate-manifestsfrom the new repo
command panics with this output:
mike@kubemark:~/cluster-api$ make generate-manifests
make clean-generated-yaml SRC_DIRS="./config/crd/bases,./config/webhook/manifests.yaml"
make[1]: Entering directory '/home/mike/cluster-api'
(IFS=','; for i in ./config/crd/bases,./config/webhook/manifests.yaml; do find $i -type f -name '*.yaml' -exec rm -f {} \;; done)
make[1]: Leaving directory '/home/mike/cluster-api'
/home/mike/cluster-api/hack/tools/bin/controller-gen-v0.13.0 \
paths=./ \
paths=./api/... \
paths=./internal/apis/core/... \
paths=./internal/controllers/... \
paths=./internal/webhooks/... \
paths=./exp/api/... \
paths=./exp/internal/controllers/... \
paths=./exp/internal/webhooks/... \
paths=./exp/addons/api/... \
paths=./exp/addons/internal/controllers/... \
paths=./exp/addons/internal/webhooks/... \
paths=./exp/ipam/api/... \
paths=./exp/ipam/internal/webhooks/... \
paths=./exp/runtime/api/... \
paths=./exp/runtime/internal/controllers/... \
crd:crdVersions=v1 \
rbac:roleName=manager-role \
output:crd:dir=./config/crd/bases \
output:webhook:dir=./config/webhook \
webhook
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xa0de2f]
goroutine 279 [running]:
go/types.(*Checker).handleBailout(0xc00227ce00, 0xc004207d40)
/snap/go/10553/src/go/types/check.go:367 +0x88
panic({0xbc7860?, 0x12b3880?})
/snap/go/10553/src/runtime/panic.go:770 +0x132
go/types.(*StdSizes).Sizeof(0x0, {0xdc35d8, 0x12bc060})
/snap/go/10553/src/go/types/sizes.go:228 +0x30f
go/types.(*Config).sizeof(...)
/snap/go/10553/src/go/types/sizes.go:333
go/types.representableConst.func1({0xdc35d8?, 0x12bc060?})
/snap/go/10553/src/go/types/const.go:76 +0x9e
go/types.representableConst({0xdc99b0, 0x1286f60}, 0xc00227ce00, 0x12bc060, 0xc0042074b0)
/snap/go/10553/src/go/types/const.go:92 +0x192
go/types.(*Checker).representation(0xc00227ce00, 0xc004212140, 0x12bc060)
/snap/go/10553/src/go/types/const.go:256 +0x65
go/types.(*Checker).implicitTypeAndValue(0xc00227ce00, 0xc004212140, {0xdc3600, 0xc0002b0d90})
/snap/go/10553/src/go/types/expr.go:375 +0x2d7
go/types.(*Checker).assignment(0xc00227ce00, 0xc004212140, {0xdc3600, 0xc0002b0d90}, {0xc95293, 0x14})
/snap/go/10553/src/go/types/assignments.go:52 +0x2e5
go/types.(*Checker).initConst(0xc00227ce00, 0xc003e6d9e0, 0xc004212140)
/snap/go/10553/src/go/types/assignments.go:126 +0x2c5
go/types.(*Checker).constDecl(0xc00227ce00, 0xc003e6d9e0, {0xdc6220, 0xc002d395e0}, {0xdc6220, 0xc002d39600}, 0x0)
/snap/go/10553/src/go/types/decl.go:490 +0x311
go/types.(*Checker).objDecl(0xc00227ce00, {0xdcf140, 0xc003e6d9e0}, 0x0)
/snap/go/10553/src/go/types/decl.go:191 +0xa49
go/types.(*Checker).packageObjects(0xc00227ce00)
/snap/go/10553/src/go/types/resolver.go:693 +0x4dd
go/types.(*Checker).checkFiles(0xc00227ce00, {0xc00360dcb0, 0x5, 0x5})
/snap/go/10553/src/go/types/check.go:408 +0x1a5
go/types.(*Checker).Files(...)
/snap/go/10553/src/go/types/check.go:372
sigs.k8s.io/controller-tools/pkg/loader.(*loader).typeCheck(0xc0002e5800, 0xc002ae6de0)
/home/mike/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/loader/loader.go:286 +0x36a
sigs.k8s.io/controller-tools/pkg/loader.(*Package).NeedTypesInfo(0xc002ae6de0)
/home/mike/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/loader/loader.go:99 +0x39
sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check(0xc002d58960, 0xc002ae6de0)
/home/mike/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/loader/refs.go:268 +0x2b7
sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check.func1(0x4f?)
/home/mike/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/loader/refs.go:262 +0x53
created by sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check in goroutine 133
/home/mike/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/loader/refs.go:260 +0x1c5
make: *** [Makefile:280: generate-manifests-core] Error 2
What did you expect to happen?
manifests to be generated properly
Cluster API version
tested on v1.6.2 and main
Kubernetes version
n/a
Anything else you would like to add?
downgrading to go version 1.21.3 fixes the issue
Label(s) to be applied
/kind bug One or more /area label. See https://github.com/kubernetes-sigs/cluster-api/labels?q=area for the list of labels.
This issue is currently awaiting triage.
CAPI contributors will take a look as soon as possible, apply one of the triage/* labels and provide further guidance.
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.
Maybe worth opening an issue for Controller-tools?
Also could be that this needs go.work?! (they recently merged go.work in k/k)
Note: not reproducible for me on latest main (21a52f9827881e8f731bbcc20b6e0b0eb443d7a5) using go 1.22. However we use controller-tools 0.14.0 there:
❯ go version
go version go1.22.0 darwin/arm64
❯ make generate-manifests
/Library/Developer/CommandLineTools/usr/bin/make clean-generated-yaml SRC_DIRS="./config/crd/bases,./config/webhook/manifests.yaml"
(IFS=','; for i in ./config/crd/bases,./config/webhook/manifests.yaml; do find $i -type f -name '*.yaml' -exec rm -f {} \;; done)
/Users/schlotterc/go/src/sigs.k8s.io/cluster-api/hack/tools/bin/controller-gen-v0.14.0 \
paths=./ \
paths=./api/... \
paths=./internal/apis/core/... \
paths=./internal/controllers/... \
paths=./internal/webhooks/... \
paths=./exp/api/... \
paths=./exp/internal/controllers/... \
paths=./exp/internal/webhooks/... \
paths=./exp/addons/api/... \
paths=./exp/addons/internal/controllers/... \
paths=./exp/addons/internal/webhooks/... \
paths=./exp/ipam/api/... \
paths=./exp/ipam/internal/webhooks/... \
paths=./exp/runtime/api/... \
paths=./exp/runtime/internal/controllers/... \
crd:crdVersions=v1 \
rbac:roleName=manager-role \
output:crd:dir=./config/crd/bases \
output:webhook:dir=./config/webhook \
webhook
...
xref:
- https://github.com/kubernetes-sigs/controller-tools/issues/880
@elmiko seems to be fixed with controller-gen v0.14.0 which is already merged on main :-)
/priority important-soon
@elmiko could you kindly check this again?
using go version 1.22.1, looks like make generate-manifests is working as expected for me.
$ go version
go version go1.22.1 linux/amd64
[mike@shift] main ~/dev/cluster-api
$ make generate-manifests
make clean-generated-yaml SRC_DIRS="./config/crd/bases,./config/webhook/manifests.yaml"
make[1]: Entering directory '/home/mike/dev/cluster-api'
(IFS=','; for i in ./config/crd/bases,./config/webhook/manifests.yaml; do find $i -type f -name '*.yaml' -exec rm -f {} \;; done)
make[1]: Leaving directory '/home/mike/dev/cluster-api'
/home/mike/dev/cluster-api/hack/tools/bin/controller-gen-v0.14.0 \
paths=./ \
paths=./api/... \
paths=./internal/apis/core/... \
paths=./internal/controllers/... \
paths=./internal/webhooks/... \
paths=./exp/api/... \
paths=./exp/internal/controllers/... \
paths=./exp/internal/webhooks/... \
paths=./exp/addons/api/... \
paths=./exp/addons/internal/controllers/... \
paths=./exp/addons/internal/webhooks/... \
paths=./exp/ipam/api/... \
paths=./exp/ipam/internal/webhooks/... \
paths=./exp/runtime/api/... \
paths=./exp/runtime/internal/controllers/... \
crd:crdVersions=v1 \
rbac:roleName=manager-role \
output:crd:dir=./config/crd/bases \
output:webhook:dir=./config/webhook \
webhook
/home/mike/dev/cluster-api/hack/tools/bin/controller-gen-v0.14.0 \
paths=./cmd/clusterctl/api/... \
crd:crdVersions=v1 \
output:crd:dir=./cmd/clusterctl/config/crd/bases
/home/mike/dev/cluster-api/hack/tools/bin/kustomize-v5.3.0 build cmd/clusterctl/config/crd > cmd/clusterctl/config/manifest/clusterctl-api.yaml
make clean-generated-yaml SRC_DIRS="./bootstrap/kubeadm/config/crd/bases,./bootstrap/kubeadm/config/webhook/manifests.yaml"
make[1]: Entering directory '/home/mike/dev/cluster-api'
(IFS=','; for i in ./bootstrap/kubeadm/config/crd/bases,./bootstrap/kubeadm/config/webhook/manifests.yaml; do find $i -type f -name '*.yaml' -exec rm -f {} \;; done)
make[1]: Leaving directory '/home/mike/dev/cluster-api'
/home/mike/dev/cluster-api/hack/tools/bin/controller-gen-v0.14.0 \
paths=./bootstrap/kubeadm \
paths=./bootstrap/kubeadm/api/... \
paths=./bootstrap/kubeadm/internal/controllers/... \
paths=./bootstrap/kubeadm/internal/webhooks/... \
paths=./internal/apis/bootstrap/kubeadm/... \
crd:crdVersions=v1 \
rbac:roleName=manager-role \
output:crd:dir=./bootstrap/kubeadm/config/crd/bases \
output:rbac:dir=./bootstrap/kubeadm/config/rbac \
output:webhook:dir=./bootstrap/kubeadm/config/webhook \
webhook
make clean-generated-yaml SRC_DIRS="./controlplane/kubeadm/config/crd/bases,./controlplane/kubeadm/config/webhook/manifests.yaml"
make[1]: Entering directory '/home/mike/dev/cluster-api'
(IFS=','; for i in ./controlplane/kubeadm/config/crd/bases,./controlplane/kubeadm/config/webhook/manifests.yaml; do find $i -type f -name '*.yaml' -exec rm -f {} \;; done)
make[1]: Leaving directory '/home/mike/dev/cluster-api'
/home/mike/dev/cluster-api/hack/tools/bin/controller-gen-v0.14.0 \
paths=./controlplane/kubeadm \
paths=./controlplane/kubeadm/api/... \
paths=./controlplane/kubeadm/internal/controllers/... \
paths=./controlplane/kubeadm/internal/webhooks/... \
paths=./internal/apis/controlplane/kubeadm/... \
crd:crdVersions=v1 \
rbac:roleName=manager-role \
output:crd:dir=./controlplane/kubeadm/config/crd/bases \
output:rbac:dir=./controlplane/kubeadm/config/rbac \
output:webhook:dir=./controlplane/kubeadm/config/webhook \
webhook
make clean-generated-yaml SRC_DIRS="test/infrastructure/docker/config/crd/bases,test/infrastructure/docker/config/webhook/manifests.yaml"
make[1]: Entering directory '/home/mike/dev/cluster-api'
(IFS=','; for i in test/infrastructure/docker/config/crd/bases,test/infrastructure/docker/config/webhook/manifests.yaml; do find $i -type f -name '*.yaml' -exec rm -f {} \;; done)
make[1]: Leaving directory '/home/mike/dev/cluster-api'
cd test/infrastructure/docker; /home/mike/dev/cluster-api/hack/tools/bin/controller-gen-v0.14.0 \
paths=./ \
paths=./api/... \
paths=./exp/api/... \
paths=./exp/internal/controllers/... \
paths=./exp/internal/webhooks/... \
paths=./internal/controllers/... \
paths=./internal/webhooks/... \
crd:crdVersions=v1 \
rbac:roleName=manager-role \
output:crd:dir=./config/crd/bases \
output:webhook:dir=./config/webhook \
webhook
make clean-generated-yaml SRC_DIRS="test/infrastructure/inmemory/config/crd/bases,test/infrastructure/inmemory/config/webhook/manifests.yaml"
make[1]: Entering directory '/home/mike/dev/cluster-api'
(IFS=','; for i in test/infrastructure/inmemory/config/crd/bases,test/infrastructure/inmemory/config/webhook/manifests.yaml; do find $i -type f -name '*.yaml' -exec rm -f {} \;; done)
make[1]: Leaving directory '/home/mike/dev/cluster-api'
cd test/infrastructure/inmemory; /home/mike/dev/cluster-api/hack/tools/bin/controller-gen-v0.14.0 \
paths=./ \
paths=./api/... \
paths=./internal/controllers/... \
paths=./internal/webhooks/... \
crd:crdVersions=v1 \
rbac:roleName=manager-role \
output:crd:dir=./config/crd/bases \
output:webhook:dir=./config/webhook \
webhook
cd ./test/extension; /home/mike/dev/cluster-api/hack/tools/bin/controller-gen-v0.14.0 \
paths=./... \
output:rbac:dir=./config/rbac \
rbac:roleName=manager-role
Thx!
I'm aware of a few more reports of controller-gen <= 0.13 being incompatible with Go 1.22. So I think it all makes sense and we can close this issue
/close
@sbueringer: Closing this issue.
In response to this:
Thx!
I'm aware of a few more reports of controller-gen <= 0.13 being incompatible with Go 1.22. So I think it all makes sense and we can close this issue
/close
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.