diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c4cd436..10b3fb4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,8 +14,8 @@ on: env: # Common versions - GO_VERSION: '1.23.1' - GOLANGCI_VERSION: 'v1.61.0' + GO_VERSION: '1.24.3' + GOLANGCI_VERSION: 'v2.1.6' DOCKER_BUILDX_VERSION: 'v0.24.0' # These environment variables are important to the Crossplane CLI install.sh @@ -49,7 +49,7 @@ jobs: run: go mod tidy && git diff --exit-code go.mod go.sum - name: Lint - uses: golangci/golangci-lint-action@v6 + uses: golangci/golangci-lint-action@v7 with: version: ${{ env.GOLANGCI_VERSION }} diff --git a/.golangci.yml b/.golangci.yml index f5a0ef2..ae8b557 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,196 +1,186 @@ -run: - timeout: 10m +version: "2" output: - # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number" formats: - - format: colored-line-number - -linters-settings: - errcheck: - # report about not checking of errors in type assetions: `a := b.(MyStruct)`; - # default is false: such cases aren't reported by default. - check-type-assertions: false - - # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; - # default is false: such cases aren't reported by default. - check-blank: false - - # List of functions to exclude from checking, where each entry is a single function to exclude. - # See https://github.com/kisielk/errcheck#excluding-functions for details. - exclude-functions: - - io/ioutil.ReadFile - - govet: - # report about shadowed variables - disable: - - shadow - - gofmt: - # simplify code: gofmt with `-s` option, true by default - simplify: true - - gci: - custom-order: true - sections: - - standard - - default - - prefix(github.com/crossplane) - - prefix(github.com/crossplane-contrib) - - blank - - dot - - gocyclo: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - min-complexity: 10 - - dupl: - # tokens count to trigger issue, 150 by default - threshold: 100 - - goconst: - # minimal length of string constant, 3 by default - min-len: 3 - # minimal occurrences count to trigger, 3 by default - min-occurrences: 5 - - lll: - # tab width in spaces. Default to 1. - tab-width: 1 - - unparam: - # Inspect exported functions, default is false. Set to true if no external program/library imports your code. - # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find external interfaces. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: false - - nakedret: - # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 - max-func-lines: 30 - - prealloc: - # XXX: we don't recommend using this linter before doing performance profiling. - # For most programs usage of prealloc will be a premature optimization. - - # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. - # True by default. - simple: true - range-loops: true # Report preallocation suggestions on range loops, true by default - for-loops: false # Report preallocation suggestions on for loops, false by default - - gocritic: - # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint` run to see all tags and checks. - # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". - enabled-tags: - - performance - - settings: # settings passed to gocritic - captLocal: # must be valid enabled check name - paramsOnly: true - rangeValCopy: - sizeThreshold: 32 - - nolintlint: - require-explanation: true - require-specific: true - + text: + path: stdout linters: enable: - - megacheck - - govet - - gocyclo - - gocritic + - asasalint + - asciicheck + - bidichk + - bodyclose + - contextcheck + - durationcheck + - errchkjson + - errorlint + - exhaustive + - gocheckcompilerdirectives + - gochecksumtype - goconst - - gci - - gofmt # We enable this as well as goimports for its simplify mode. - - prealloc - - revive - - unconvert + - gocritic + - gocyclo + - gosec + - gosmopolitan + - loggercheck + - makezero - misspell + - musttag - nakedret + - nilerr + - nilnesserr + - noctx - nolintlint - - disable: - # These linters are all deprecated as of golangci-lint v1.49.0. We disable - # them explicitly to avoid the linter logging deprecation warnings. - - deadcode - - varcheck - - scopelint - - structcheck - - interfacer - - presets: - - bugs - - unused - fast: false - + - prealloc + - protogetter + - reassign + - recvcheck + - revive + - rowserrcheck + - spancheck + - sqlclosecheck + - testifylint + - unconvert + - unparam + - zerologlint + + settings: + dupl: + # tokens count to trigger issue, 150 by default + threshold: 100 + + errcheck: + # report about not checking of errors in type assetions: `a := b.(MyStruct)`; + # default is false: such cases aren't reported by default. + check-type-assertions: false + # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; + # default is false: such cases aren't reported by default. + check-blank: false + # List of functions to exclude from checking, where each entry is a single function to exclude. + # See https://github.com/kisielk/errcheck#excluding-functions for details. + exclude-functions: + - io/ioutil.ReadFile + + goconst: + # minimal length of string constant, 3 by default + min-len: 3 + # minimal occurrences count to trigger, 3 by default + min-occurrences: 5 + + gocritic: + # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint` run to see all tags and checks. + # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". + enabled-tags: + - performance + settings: # settings passed to gocritic + captLocal: # must be valid enabled check name + paramsOnly: true + rangeValCopy: + sizeThreshold: 32 + + gocyclo: + # minimal code complexity to report, 30 by default (but we recommend 10-20) + min-complexity: 10 + + govet: + # report about shadowed variables + disable: + - shadow + + lll: + # tab width in spaces. Default to 1. + tab-width: 1 + + nakedret: + # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 + max-func-lines: 30 + + nolintlint: + require-explanation: true + require-specific: true + + prealloc: + # XXX: we don't recommend using this linter before doing performance profiling. + # For most programs usage of prealloc will be a premature optimization. + + # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. + # True by default. + simple: true + range-loops: true + for-loops: false + + unparam: + # Inspect exported functions, default is false. Set to true if no external program/library imports your code. + # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: + # if it's called for subdir of a project it can't find external interfaces. All text editor integrations + # with golangci-lint call it on a directory with the changed file. + check-exported: false + + exclusions: + generated: lax + rules: + + # Excluding configuration per-path and per-linter + - linters: + - all + path: zz_generated\..+\.go$ + + # Exclude some linters from running on tests files. + - linters: + - dupl + - errcheck + - gocyclo + - gosec + - scopelint + - unparam + path: _test(ing)?\.go + + # Ease some gocritic warnings on test files. + - linters: + - gocritic + path: _test\.go + text: (unnamedResult|exitAfterDefer) + + # These are performance optimisations rather than style issues per se. + # They warn when function arguments or range values copy a lot of memory + # rather than using a pointer. + - linters: + - gocritic + text: '(hugeParam|rangeValCopy):' + + # This "TestMain should call os.Exit to set exit code" warning is not clever + # enough to notice that we call a helper method that calls os.Exit. + - linters: + - staticcheck + text: 'SA3000:' + + # This is a "potential hardcoded credentials" warning. It's triggered by + # any variable with 'secret' in the same, and thus hits a lot of false + # positives in Kubernetes land where a Secret is an object type. + - linters: + - gosec + text: 'G101:' + + # This is an 'errors unhandled' warning that duplicates errcheck. + - linters: + - gosec + text: 'G104:' + + # Some k8s dependencies do not have JSON tags on all fields in structs. + - linters: + - musttag + path: k8s.io/ + paths: + - third_party$ + - builtin$ + - examples$ issues: - # Excluding configuration per-path and per-linter - exclude-rules: - - path: "zz_generated\\..+\\.go$" - linters: ["all"] - - # Exclude some linters from running on tests files. - - path: _test(ing)?\.go - linters: - - gocyclo - - errcheck - - dupl - - gosec - - scopelint - - unparam - - # Ease some gocritic warnings on test files. - - path: _test\.go - text: "(unnamedResult|exitAfterDefer)" - linters: - - gocritic - - # These are performance optimisations rather than style issues per se. - # They warn when function arguments or range values copy a lot of memory - # rather than using a pointer. - - text: "(hugeParam|rangeValCopy):" - linters: - - gocritic - - # This "TestMain should call os.Exit to set exit code" warning is not clever - # enough to notice that we call a helper method that calls os.Exit. - - text: "SA3000:" - linters: - - staticcheck - - - text: "k8s.io/api/core/v1" - linters: - - goimports - - # This is a "potential hardcoded credentials" warning. It's triggered by - # any variable with 'secret' in the same, and thus hits a lot of false - # positives in Kubernetes land where a Secret is an object type. - - text: "G101:" - linters: - - gosec - - gas - - # This is an 'errors unhandled' warning that duplicates errcheck. - - text: "G104:" - linters: - - gosec - - gas - - # Some k8s dependencies do not have JSON tags on all fields in structs. - - path: k8s.io/ - linters: - - musttag - - # Independently from option `exclude` we use default exclude patterns, - # it can be disabled by this option. To list all - # excluded by default patterns execute `golangci-lint run --help`. - # Default value for this option is true. - exclude-use-default: false - + # maximum issues count per one linter. set to 0 to disable. default is 50. + max-issues-per-linter: 0 + # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. + max-same-issues: 0 # Show only new issues: if there are unstaged changes or untracked files, # only those changes are analyzed, else only changes in HEAD~ are analyzed. # It's a super-useful option for integration of golangci-lint into existing @@ -199,8 +189,26 @@ issues: # Default is false. new: false - # Maximum issues count per one linter. Set to 0 to disable. Default is 50. - max-issues-per-linter: 0 - - # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. - max-same-issues: 0 +formatters: + enable: + - gci + - gofmt + settings: + gci: + sections: + - standard + - default + - prefix(github.com/crossplane) + - prefix(github.com/crossplane-contrib) + - blank + - dot + custom-order: true + gofmt: + # simplify code: gofmt with `-s` option, true by default + simplify: true + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$