From b95f74fceb3be7209a728efeb4049e86005c675e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 01:38:28 +0000 Subject: [PATCH 1/2] build(deps): bump golangci/golangci-lint-action from 6 to 7 Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 6 to 7. - [Release notes](https://github.com/golangci/golangci-lint-action/releases) - [Commits](https://github.com/golangci/golangci-lint-action/compare/v6...v7) --- updated-dependencies: - dependency-name: golangci/golangci-lint-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/lint.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 473dcfe0..ec0eb3c7 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -19,6 +19,6 @@ jobs: - uses: actions/setup-go@v5 with: go-version-file: 'go.mod' - - uses: golangci/golangci-lint-action@v6 + - uses: golangci/golangci-lint-action@v7 with: version: v1.64.5 From a235696ec5399eaeffcd8100ed7d6ea233069b57 Mon Sep 17 00:00:00 2001 From: yxxhero Date: Mon, 31 Mar 2025 21:27:01 +0800 Subject: [PATCH 2/2] refactor(.golangci.yaml): Update linters and configurations Signed-off-by: yxxhero --- .github/workflows/lint.yaml | 2 +- .golangci.yaml | 478 ++++++++++++------------------------ diff/diff_test.go | 4 +- 3 files changed, 154 insertions(+), 330 deletions(-) diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index ec0eb3c7..27c7f00b 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -21,4 +21,4 @@ jobs: go-version-file: 'go.mod' - uses: golangci/golangci-lint-action@v7 with: - version: v1.64.5 + version: v2.0.1 diff --git a/.golangci.yaml b/.golangci.yaml index f0452570..13389079 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -1,268 +1,25 @@ -# This file contains all available configuration options -# with their default values. - -# options for analysis running +version: "2" run: - # default concurrency is a available CPU number - # concurrency: 4 - - # timeout for analysis, e.g. 30s, 5m, default is 1m - timeout: 30m - - # exit code when at least one issue was found, default is 1 issues-exit-code: 1 - - # include test files or not, default is true tests: true - - # list of build tags, all linters use it. Default is empty list. - # build-tags: - # - mytag - - # which files to skip: they will be analyzed, but issues from them - # won't be reported. Default value is empty list, but there is - # no need to include all autogenerated files, we confidently recognize - # autogenerated files. If it's not please let us know. - # skip-files: - # - ".*\\.my\\.go$" - # - lib/bad.go - -# output configuration options output: formats: - # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number" - - format: line-number - - # print lines of code with issue, default is true - print-issued-lines: true - - # print linter name in the end of issue text, default is true - print-linter-name: true - -# all available settings of specific linters -linters-settings: - gci: - sections: - - standard - - default - - prefix(github.com/databus23/helm-diff/v3) - - 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 - - # [deprecated] comma-separated list of pairs of the form pkg:regex - # the regex is used to ignore names within pkg. (default "fmt:.*"). - # see https://github.com/kisielk/errcheck#the-deprecated-method for details - # ignore: fmt:.* - - # path to a file containing a list of functions to exclude from checking - # see https://github.com/kisielk/errcheck#excluding-functions for details - # exclude: /path/to/file.txt - - # Disable error checking, as errorcheck detects more errors and is more configurable. - gosec: - excludes: - - "G104" - - govet: - disable: - - shadow - - # settings per analyzer - settings: - printf: # analyzer name, run `go tool vet help` to see all analyzers - funcs: # run `go tool vet help printf` to see available settings for `printf` analyzer - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf - - # enable or disable analyzers by name - # enable: - # - atomicalign - # enable-all: false - # disable: - # - shadow - # disable-all: false - revive: - # minimal confidence for issues, default is 0.8 - confidence: 0.8 - ignore-generated-header: true - severity: warning - gofmt: - # simplify code: gofmt with `-s` option, true by default - simplify: true - gocyclo: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - min-complexity: 30 - gocognit: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - min-complexity: 100 - 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: 8 - depguard: - # Rules to apply. - # Default: Only allow $gostd in all files. - rules: - # Name of a rule. - main: - # List of file globs that will match this list of settings to compare against. - # Default: $all - files: - - $all - # List of allowed packages. - allow: - - $gostd - - github.com/Masterminds/semver/v3 - - github.com/aryann/difflib - - github.com/databus23/helm-diff/v3 - - github.com/evanphx/json-patch/v5 - - github.com/gonvenience/bunt - - github.com/gonvenience/ytbx - - github.com/google/go-cmp/cmp - - github.com/homeport/dyff/pkg/dyff - - github.com/json-iterator/go - - github.com/mgutz/ansi - - github.com/spf13/cobra - - github.com/spf13/pflag - - github.com/stretchr/testify/require - - helm.sh/helm/v3 - - k8s.io/api/core/v1 - - k8s.io/apiextensions-apiserver - - k8s.io/apimachinery - - k8s.io/cli-runtime - - k8s.io/client-go - - sigs.k8s.io/yaml - # Packages that are not allowed where the value is a suggestion. - deny: - - pkg: "github.com/sirupsen/logrus" - desc: not allowed - - pkg: "github.com/pkg/errors" - desc: Should be replaced by standard lib errors package - misspell: - # Correct spellings using locale preferences for US or UK. - # Default is to use a neutral variety of English. - # Setting locale to US will correct the British spelling of 'colour' to 'color'. - locale: US - ignore-words: - - GitLab - lll: - # max line length, lines longer will be reported. Default is 120. - # '\t' is counted as 1 character by default, and can be changed with the tab-width option - line-length: 120 - # 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: - # Which checks should be enabled; can't be combined with 'disabled-checks'; - # See https://go-critic.github.io/overview#checks-overview - # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run` - # By default list of stable checks is used. - # enabled-checks: - # - rangeValCopy - - # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty - # disabled-checks: - # - regexpMust - - # 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 - godox: - # report any comments starting with keywords, this is useful for TODO or FIXME comments that - # might be left in the code accidentally and should be resolved before merging - keywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting - - TODO - - BUG - - FIXME - - NOTE - - OPTIMIZE # marks code that should be optimized before merging - - HACK # marks hack-arounds that should be removed before merging - dogsled: - # checks assignments with too many blank identifiers; default is 2 - max-blank-identifiers: 2 - - whitespace: - multi-if: false # Enforces newlines (or comments) after every multi-line if statement - multi-func: false # Enforces newlines (or comments) after every multi-line function signature - wsl: - # If true append is only allowed to be cuddled if appending value is - # matching variables, fields or types on line above. Default is true. - strict-append: true - # Allow calls and assignments to be cuddled as long as the lines have any - # matching variables, fields or types. Default is true. - allow-assign-and-call: true - # Allow multiline assignments to be cuddled. Default is true. - allow-multiline-assign: true - # Allow declarations (var) to be cuddled. - allow-cuddle-declarations: false - # Allow trailing comments in ending of blocks - allow-trailing-comment: false - # Force newlines in end of case at this limit (0 = never). - force-case-trailing-whitespace: 0 - funlen: - # Checks the number of lines in a function. - # If lower than 0, disable the check. - # Default: 60 - lines: 280 - # Checks the number of statements in a function. - # If lower than 0, disable the check. - # Default: 40 - statements: 140 - + text: + path: stdout + print-linter-name: true + print-issued-lines: true + colors: false linters: - # please, do not use `enable-all`: it's deprecated and will be removed soon. - # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint - disable-all: true + default: none enable: - bodyclose + - copyloopvar - depguard - errcheck - errorlint - - copyloopvar - funlen - - gci - gocognit - goconst - - gofmt - - goimports - - gosimple - govet - ineffassign - misspell @@ -271,88 +28,155 @@ linters: - revive - staticcheck - testifylint - - typecheck - unconvert - unparam - unused - usestdlibvars - whitespace - # - gocritic - # - godox - # - gosec - # - interfacer - # - stylecheck - # - dogsled - # - dupl - # don't enable: - # - deadcode - # - gochecknoglobals - # - gochecknoinits - # - gocyclo - # - lll - # - maligned - # - prealloc - # - varcheck - + settings: + staticcheck: + checks: ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022", "-ST1005", "-QF1001", "-QF1008"] + depguard: + rules: + main: + files: + - $all + allow: + - $gostd + - github.com/Masterminds/semver/v3 + - github.com/aryann/difflib + - github.com/databus23/helm-diff/v3 + - github.com/evanphx/json-patch/v5 + - github.com/gonvenience/bunt + - github.com/gonvenience/ytbx + - github.com/google/go-cmp/cmp + - github.com/homeport/dyff/pkg/dyff + - github.com/json-iterator/go + - github.com/mgutz/ansi + - github.com/spf13/cobra + - github.com/spf13/pflag + - golang.org/x/term + - gopkg.in/yaml.v2 + - github.com/stretchr/testify/require + - helm.sh/helm/v3 + - k8s.io/api/core/v1 + - k8s.io/apiextensions-apiserver + - k8s.io/apimachinery + - k8s.io/cli-runtime + - k8s.io/client-go + - sigs.k8s.io/yaml + deny: + - pkg: github.com/sirupsen/logrus + desc: not allowed + - pkg: github.com/pkg/errors + desc: Should be replaced by standard lib errors package + dogsled: + max-blank-identifiers: 2 + dupl: + threshold: 100 + errcheck: + check-type-assertions: false + check-blank: false + funlen: + lines: 280 + statements: 140 + gocognit: + min-complexity: 100 + goconst: + min-len: 3 + min-occurrences: 8 + gocritic: + settings: + captLocal: + paramsOnly: true + gocyclo: + min-complexity: 30 + godox: + keywords: + - TODO + - BUG + - FIXME + - NOTE + - OPTIMIZE + - HACK + gosec: + excludes: + - G104 + govet: + disable: + - shadow + settings: + printf: + funcs: + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf + lll: + line-length: 120 + tab-width: 1 + misspell: + locale: US + ignore-rules: + - GitLab + nakedret: + max-func-lines: 30 + prealloc: + simple: true + range-loops: true + for-loops: false + revive: + confidence: 0.8 + severity: warning + unparam: + check-exported: false + whitespace: + multi-if: false + multi-func: false + wsl: + strict-append: true + allow-assign-and-call: true + allow-multiline-assign: true + force-case-trailing-whitespace: 0 + allow-trailing-comment: false + allow-cuddle-declarations: false + exclusions: + generated: lax + rules: + - linters: + - dupl + - errcheck + - funlen + - gocyclo + - gosec + path: _test\.go + - linters: + - lll + source: '^//go:generate ' + paths: + - third_party$ + - builtin$ + - examples$ issues: - # List of regexps of issue texts to exclude, empty list by default. - # But independently from this option we use default exclude patterns, - # it can be disabled by `exclude-use-default: false`. To list all - # excluded by default patterns execute `golangci-lint run --help` - # exclude: - # - abcdef - - # Excluding configuration per-path, per-linter, per-text and per-source - exclude-rules: - # Exclude some linters from running on tests files. - - path: _test\.go - linters: - - gocyclo - - errcheck - - dupl - - gosec - - funlen - - # Exclude known linters from partially hard-vendored code, - # which is impossible to exclude via "nolint" comments. - # - path: internal/hmac/ - # text: "weak cryptographic primitive" - # linters: - # - gosec - - # Exclude some staticcheck messages - # - linters: - # - staticcheck - # text: "SA9003:" - - # Exclude lll issues for long lines with go:generate - - linters: - - lll - source: "^//go:generate " - - # 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 - # large codebase. It's not practical to fix all existing issues at the moment - # of integration: much better don't allow issues in new code. - # Default is false. new: false - - # Show only new issues created after git revision `REV` - # This should be passed as flag during individual CI jobs. - # new-from-rev: REV - - # Show only new issues created in git patch with set file path. - # new-from-patch: path/to/patch/file +formatters: + enable: + - gci + - gofmt + - goimports + settings: + gci: + sections: + - standard + - default + - prefix(github.com/databus23/helm-diff/v3) + gofmt: + simplify: true + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/diff/diff_test.go b/diff/diff_test.go index d65d5cbc..d3f4e865 100644 --- a/diff/diff_test.go +++ b/diff/diff_test.go @@ -451,7 +451,7 @@ annotations: t.Error("Unexpected return value from Manifests: Expected the return value to be `false` to indicate that it has NOT seen any change(s), but was `true`") } - require.Equal(t, ``, buf2.String()) + require.Empty(t, buf2.String()) }) t.Run("OnChangeRemoved", func(t *testing.T) { @@ -480,7 +480,7 @@ annotations: t.Error("Unexpected return value from Manifests: Expected the return value to be `false` to indicate that it has NOT seen any change(s), but was `true`") } - require.Equal(t, ``, buf2.String()) + require.Empty(t, buf2.String()) }) t.Run("OnChangeSimple", func(t *testing.T) {