- 
                Notifications
    
You must be signed in to change notification settings  - Fork 1.4k
 
🌱 Bump golangci-lint v2 #12088
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
          
     Merged
      
      
            k8s-ci-robot
  merged 11 commits into
  kubernetes-sigs:main
from
sivchari:migrate-golangci-lint-v2
  
      
      
   
  May 8, 2025 
      
    
  
     Merged
                    🌱 Bump golangci-lint v2 #12088
Changes from 10 commits
      Commits
    
    
            Show all changes
          
          
            11 commits
          
        
        Select commit
          Hold shift + click to select a range
      
      a425594
              
                migrate .golangci.yml for v2
              
              
                sivchari 64f3ef1
              
                fix lint error
              
              
                sivchari bde0813
              
                migrate golangci-lint-kal for v2
              
              
                sivchari 25673d5
              
                restore GOLANGCI_LINT_VER
              
              
                sivchari a60874e
              
                re-fix: upstream lint error
              
              
                sivchari 8530749
              
                preserve comments
              
              
                sivchari f8c48c7
              
                fix review points
              
              
                sivchari f3f8c9c
              
                move exclude-use-default correctly
              
              
                sivchari 29249ce
              
                use presets instead
              
              
                sivchari f5bfe34
              
                restore comment
              
              
                sivchari bad2b67
              
                remove presets
              
              
                sivchari File filter
Filter by extension
Conversations
          Failed to load comments.   
        
        
          
      Loading
        
  Jump to
        
          Jump to file
        
      
      
          Failed to load files.   
        
        
          
      Loading
        
  Diff view
Diff view
There are no files selected for viewing
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -1,114 +1,114 @@ | ||
| version: "2" | ||
| run: | ||
| timeout: 10m | ||
| go: "1.23" | ||
| allow-parallel-runners: true | ||
| 
     | 
||
| linters: | ||
| disable-all: true | ||
| default: none | ||
| enable: | ||
| - kubeapilinter # linter for Kube API conventions | ||
| 
     | 
||
| linters-settings: | ||
| custom: | ||
| kubeapilinter: | ||
| type: "module" | ||
| description: kube-api-linter and lints Kube like APIs based on API conventions and best practices. | ||
| settings: | ||
| linters: | ||
| enable: | ||
| - "commentstart" # Ensure comments start with the serialized version of the field name. | ||
| - "conditions" # Ensure conditions have the correct json tags and markers. | ||
| - "integers" # Ensure only int32 and int64 are used for integers. | ||
| - "jsontags" # Ensure every field has a json tag. | ||
| - "maxlength" # Ensure all strings and arrays have maximum lengths/maximum items. | ||
| - "nobools" # Bools do not evolve over time, should use enums instead. | ||
| - "nofloats" # Ensure floats are not used. | ||
| - "optionalorrequired" # Every field should be marked as `+optional` or `+required`. | ||
| - "requiredfields" # Required fields should not be pointers, and should not have `omitempty`. | ||
| - "statussubresource" # All root objects that have a `status` field should have a status subresource. | ||
| settings: | ||
| custom: | ||
| kubeapilinter: | ||
| type: module | ||
| description: KAL is the Kube-API-Linter and lints Kube like APIs based on API conventions and best practices. | ||
| settings: | ||
| linters: | ||
| enable: | ||
| - "commentstart" # Ensure comments start with the serialized version of the field name. | ||
| - "conditions" # Ensure conditions have the correct json tags and markers. | ||
| - "integers" # Ensure only int32 and int64 are used for integers. | ||
| - "jsontags" # Ensure every field has a json tag. | ||
| - "maxlength" # Ensure all strings and arrays have maximum lengths/maximum items. | ||
| - "nobools" # Bools do not evolve over time, should use enums instead. | ||
| - "nofloats" # Ensure floats are not used. | ||
| - "optionalorrequired" # Every field should be marked as `+optional` or `+required`. | ||
| - "requiredfields" # Required fields should not be pointers, and should not have `omitempty`. | ||
| - "statussubresource" # All root objects that have a `status` field should have a status subresource. | ||
| 
     | 
||
| # Per discussion in July 2024, we are keeping phase fields for now. | ||
| # See https://github.com/kubernetes-sigs/cluster-api/pull/10897#discussion_r1685929508 | ||
| # and https://github.com/kubernetes-sigs/cluster-api/pull/10897#discussion_r1685919394. | ||
| # - "nophase" # Phase fields are discouraged by the Kube API conventions, use conditions instead. | ||
| 
     | 
||
| # Per discussion in July 2024, we are keeping phase fields for now. | ||
| # See https://github.com/kubernetes-sigs/cluster-api/pull/10897#discussion_r1685929508 | ||
| # and https://github.com/kubernetes-sigs/cluster-api/pull/10897#discussion_r1685919394. | ||
| # - "nophase" # Phase fields are discouraged by the Kube API conventions, use conditions instead. | ||
| 
     | 
||
| # Linters below this line are disabled, pending conversation on how and when to enable them. | ||
| disable: | ||
| - "*" # We will manually enable new linters after understanding the impact. Disable all by default. | ||
| lintersConfig: | ||
| conditions: | ||
| isFirstField: Warn # Require conditions to be the first field in the status struct. | ||
| usePatchStrategy: Forbid # Conditions should not use the patch strategy on CRDs. | ||
| useProtobuf: Forbid # We don't use protobuf, so protobuf tags are not required. | ||
| # jsonTags: | ||
| # jsonTagRegex: "^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*)*$" # The default regex is appropriate for our use case. | ||
| # optionalOrRequired: | ||
| # preferredOptionalMarker: optional | kubebuilder:validation:Optional # The preferred optional marker to use, fixes will suggest to use this marker. Defaults to `optional`. | ||
| # preferredRequiredMarker: required | kubebuilder:validation:Required # The preferred required marker to use, fixes will suggest to use this marker. Defaults to `required`. | ||
| # requiredFields: | ||
| # pointerPolicy: Warn | SuggestFix # Defaults to `SuggestFix`. We want our required fields to not be pointers. | ||
| # Linters below this line are disabled, pending conversation on how and when to enable them. | ||
| disable: | ||
| - "*" # We will manually enable new linters after understanding the impact. Disable all by default. | ||
| lintersConfig: | ||
| conditions: | ||
| isFirstField: Warn # Require conditions to be the first field in the status struct. | ||
| usePatchStrategy: Forbid # Require conditions to be the first field in the status struct. | ||
| useProtobuf: Forbid # We don't use protobuf, so protobuf tags are not required. | ||
| # jsonTags: | ||
| # jsonTagRegex: "^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*)*$" # The default regex is appropriate for our use case. | ||
| # optionalOrRequired: | ||
| # preferredOptionalMarker: optional | kubebuilder:validation:Optional # The preferred optional marker to use, fixes will suggest to use this marker. Defaults to `optional`. | ||
| # preferredRequiredMarker: required | kubebuilder:validation:Required # The preferred required marker to use, fixes will suggest to use this marker. Defaults to `required`. | ||
| # requiredFields: | ||
| # pointerPolicy: Warn | SuggestFix # Defaults to `SuggestFix`. We want our required fields to not be pointers. | ||
| 
     | 
||
| exclusions: | ||
| generated: strict | ||
| paths: | ||
| - zz_generated.*\.go$ | ||
| - vendored_openapi\.go$ | ||
| # We don't want to invest time to fix new linter findings in old API types. | ||
| - internal/apis/.* | ||
| - ".*_test.go" # Exclude test files. | ||
| rules: | ||
| # KAL should only run on API folders. | ||
| - path-except: "api//*" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "api/v1beta2/*|api/addons/v1beta2/*|api/v1beta1/*|api/v1alpha1/*|api/addons/v1beta1/*" | ||
| text: "Conditions field must be a slice of metav1.Condition" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "api/v1beta2/*|api/v1beta1/*" | ||
| text: "type ClusterIPFamily should not use an int, int8 or int16. Use int32 or int64 depending on bounding requirements" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "exp/ipam/api/v1beta2/*|exp/ipam/api/v1alpha1/*|exp/ipam/api/v1beta1/*" | ||
| text: "field Prefix should not use an int, int8 or int16. Use int32 or int64 depending on bounding requirements" | ||
| linters: | ||
| - kubeapilinter | ||
| # clusterctl and Runtime Hooks can be fixed once we bump their apiVersion. | ||
| - path: "cmd/clusterctl/api/v1alpha3|exp/runtime/hooks/api/v1alpha1" | ||
| text: "maxlength" | ||
| linters: | ||
| - kubeapilinter | ||
| # controller-gen does not allow to add MaxItems to Schemaless fields | ||
| - path: "api/v1beta2/*|api/v1beta1/*" | ||
| text: "maxlength: field (AllOf|OneOf|AnyOf) must have a maximum items, add kubebuilder:validation:MaxItems marker" | ||
| linters: | ||
| - kubeapilinter | ||
| # It does not make sense to add a maxItems marker on the *List structs as they are not used to generate CRD YAMLs. | ||
| # This exclude will be removed once https://github.com/JoelSpeed/kubeapilinter/issues/38 is resolved. | ||
| - path: "api/v1beta2/*|api/addons/v1beta2/*|api/v1beta1/*|api/v1alpha1/*|api/addons/v1beta1/*" | ||
| text: "maxlength: field Items must have a maximum items, add kubebuilder:validation:MaxItems marker" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "api/v1beta2/*|api/addons/v1beta2/*|api/v1alpha1/*|api/v1beta1/*|api/addons/v1beta1/*" | ||
| text: "nobools" | ||
| linters: | ||
| - kubeapilinter | ||
| # We follow the current CustomResourceDefinition field's json tag pattern. | ||
| - path: "api/v1beta2/*|api/v1beta1/*" | ||
| text: "field (XPreserveUnknownFields|XPreserveUnknownFields|XValidations|XMetadata|XIntOrString) json tag does not match pattern" | ||
| linters: | ||
| - kubeapilinter | ||
| # The following rules are disabled until we migrate to the new API. | ||
| - path: "bootstrap/kubeadm/api/v1beta2/kubeadm_types.go|bootstrap/kubeadm/api/v1beta1/kubeadm_types.go" | ||
| text: "field Token is marked as required, should not be a pointer" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "api/v1beta2/clusterclass_types.go|api/v1beta1/clusterclass_types.go" | ||
| text: "field Ref is marked as required, should not be a pointer" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "api/v1beta2/*|api/addons/v1beta2/*|api/v1alpha1/*|api/v1beta1/*|api/v1alpha3/*|api/addons/v1beta1/*" | ||
| text: "field Items must be marked as optional or required" | ||
| linters: | ||
| - kubeapilinter | ||
| issues: | ||
| exclude-files: | ||
| - "zz_generated.*\\.go$" | ||
| - "vendored_openapi\\.go$" | ||
| # We don't want to invest time to fix new linter findings in old API types. | ||
| - "internal/apis/.*" | ||
| - ".*_test.go" # Exclude test files. | ||
| max-same-issues: 0 | ||
| max-issues-per-linter: 0 | ||
| exclude-rules: | ||
| # KAL should only run on API folders. | ||
| - path-except: "api//*" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "api/v1beta2/*|api/addons/v1beta2/*|api/v1beta1/*|api/v1alpha1/*|api/addons/v1beta1/*" | ||
| text: "Conditions field must be a slice of metav1.Condition" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "api/v1beta2/*|api/v1beta1/*" | ||
| text: "type ClusterIPFamily should not use an int, int8 or int16. Use int32 or int64 depending on bounding requirements" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "exp/ipam/api/v1beta2/*|exp/ipam/api/v1alpha1/*|exp/ipam/api/v1beta1/*" | ||
| text: "field Prefix should not use an int, int8 or int16. Use int32 or int64 depending on bounding requirements" | ||
| linters: | ||
| - kubeapilinter | ||
| # clusterctl and Runtime Hooks can be fixed once we bump their apiVersion. | ||
| - path: "cmd/clusterctl/api/v1alpha3|exp/runtime/hooks/api/v1alpha1" | ||
| text: "maxlength" | ||
| linters: | ||
| - kubeapilinter | ||
| # controller-gen does not allow to add MaxItems to Schemaless fields | ||
| - path: "api/v1beta2/*|api/v1beta1/*" | ||
| text: "maxlength: field (AllOf|OneOf|AnyOf) must have a maximum items, add kubebuilder:validation:MaxItems marker" | ||
| linters: | ||
| - kubeapilinter | ||
| # It does not make sense to add a maxItems marker on the *List structs as they are not used to generate CRD YAMLs. | ||
| # This exclude will be removed once https://github.com/JoelSpeed/kubeapilinter/issues/38 is resolved. | ||
| - path: "api/v1beta2/*|api/addons/v1beta2/*|api/v1beta1/*|api/v1alpha1/*|api/addons/v1beta1/*" | ||
| text: "maxlength: field Items must have a maximum items, add kubebuilder:validation:MaxItems marker" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "api/v1beta2/*|api/addons/v1beta2/*|api/v1alpha1/*|api/v1beta1/*|api/addons/v1beta1/*" | ||
| text: "nobools" | ||
| linters: | ||
| - kubeapilinter | ||
| # We follow the current CustomResourceDefinition field's json tag pattern. | ||
| - path: "api/v1beta2/*|api/v1beta1/*" | ||
| text: "field (XPreserveUnknownFields|XPreserveUnknownFields|XValidations|XMetadata|XIntOrString) json tag does not match pattern" | ||
| linters: | ||
| - kubeapilinter | ||
| # The following rules are disabled until we migrate to the new API. | ||
| - path: "bootstrap/kubeadm/api/v1beta2/kubeadm_types.go|bootstrap/kubeadm/api/v1beta1/kubeadm_types.go" | ||
| text: "field Token is marked as required, should not be a pointer" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "api/v1beta2/clusterclass_types.go|api/v1beta1/clusterclass_types.go" | ||
| text: "field Ref is marked as required, should not be a pointer" | ||
| linters: | ||
| - kubeapilinter | ||
| - path: "api/v1beta2/*|api/addons/v1beta2/*|api/v1alpha1/*|api/v1beta1/*|api/v1alpha3/*|api/addons/v1beta1/*" | ||
| text: "field Items must be marked as optional or required" | ||
| linters: | ||
| - kubeapilinter | ||
      
      Oops, something went wrong.
        
    
  
      
      Oops, something went wrong.
        
    
  
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
Uh oh!
There was an error while loading. Please reload this page.