cluster-api icon indicating copy to clipboard operation
cluster-api copied to clipboard

make target generate-manifests panics when using go version 1.22

Open elmiko opened this issue 1 year ago • 4 comments

What steps did you take and what happened?

  1. install go version 1.22
  2. checkout new copy of cluster-api repo
  3. run make generate-manifests from 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.

elmiko avatar Mar 08 '24 19:03 elmiko

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.

k8s-ci-robot avatar Mar 08 '24 19:03 k8s-ci-robot

Maybe worth opening an issue for Controller-tools?

Also could be that this needs go.work?! (they recently merged go.work in k/k)

chrischdi avatar Mar 09 '24 08:03 chrischdi

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
...

chrischdi avatar Mar 09 '24 09:03 chrischdi

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 :-)

chrischdi avatar Mar 12 '24 09:03 chrischdi

/priority important-soon

@elmiko could you kindly check this again?

fabriziopandini avatar Apr 11 '24 16:04 fabriziopandini

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                                               

elmiko avatar Apr 11 '24 17:04 elmiko

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 avatar Apr 12 '24 05:04 sbueringer

@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.

k8s-ci-robot avatar Apr 12 '24 05:04 k8s-ci-robot