Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make target generate-manifests panics when using go version 1.22 #10240

Closed
elmiko opened this issue Mar 8, 2024 · 8 comments
Closed

make target generate-manifests panics when using go version 1.22 #10240

elmiko opened this issue Mar 8, 2024 · 8 comments
Labels
kind/bug Categorizes issue or PR as related to a bug. needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. priority/important-soon Must be staffed and worked on either currently, or very soon, ideally in time for the next release.

Comments

@elmiko
Copy link
Contributor

elmiko commented Mar 8, 2024

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/controller-tools@v0.13.0/pkg/loader/loader.go:286 +0x36a                                                                            
sigs.k8s.io/controller-tools/pkg/loader.(*Package).NeedTypesInfo(0xc002ae6de0)
        /home/mike/go/pkg/mod/sigs.k8s.io/controller-tools@v0.13.0/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/controller-tools@v0.13.0/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/controller-tools@v0.13.0/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/controller-tools@v0.13.0/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.

@k8s-ci-robot k8s-ci-robot added the kind/bug Categorizes issue or PR as related to a bug. label Mar 8, 2024
@k8s-ci-robot
Copy link
Contributor

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 k8s-ci-robot added the needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. label Mar 8, 2024
@chrischdi
Copy link
Member

chrischdi commented Mar 9, 2024

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
Copy link
Member

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
Copy link
Member

xref:

@elmiko seems to be fixed with controller-gen v0.14.0 which is already merged on main :-)

@fabriziopandini
Copy link
Member

/priority important-soon

@elmiko could you kindly check this again?

@k8s-ci-robot k8s-ci-robot added the priority/important-soon Must be staffed and worked on either currently, or very soon, ideally in time for the next release. label Apr 11, 2024
@elmiko
Copy link
Contributor Author

elmiko commented Apr 11, 2024

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                                               

@sbueringer
Copy link
Member

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

@k8s-ci-robot
Copy link
Contributor

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Categorizes issue or PR as related to a bug. needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. priority/important-soon Must be staffed and worked on either currently, or very soon, ideally in time for the next release.
Projects
None yet
Development

No branches or pull requests

5 participants