From d26d909a5e83e5b6807367676d59cae8ef958946 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Mar 2025 07:52:06 +0800 Subject: [PATCH] build(deps): bump golangci/golangci-lint-action from 6 to 7 (#1975) * 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] * refactor(.github/workflows/ci.yaml): update golangci-lint version to v2.0.2 Signed-off-by: yxxhero --------- Signed-off-by: dependabot[bot] Signed-off-by: yxxhero Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: yxxhero --- .github/workflows/ci.yaml | 4 +- .golangci.yaml | 466 +++++++++-------------------------- pkg/app/app.go | 2 +- pkg/app/ask.go | 5 +- pkg/app/two_pass_renderer.go | 2 +- pkg/config/apply.go | 2 +- pkg/config/diff.go | 2 +- pkg/config/global.go | 16 +- pkg/errors/errors_test.go | 2 +- pkg/policy/checker.go | 4 +- pkg/policy/checker_test.go | 2 +- pkg/state/state.go | 2 +- 12 files changed, 141 insertions(+), 368 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index fb1477b6..5621f6e6 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -18,9 +18,9 @@ jobs: with: go-version-file: go.mod cache: false - - uses: golangci/golangci-lint-action@v6 + - uses: golangci/golangci-lint-action@v7 with: - version: v1.64.5 + version: v2.0.2 tests: runs-on: ubuntu-latest diff --git a/.golangci.yaml b/.golangci.yaml index e828a482..99add513 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -1,374 +1,146 @@ -# 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 dirs to skip: issues from them won't be reported; - # can use regexp here: generated.*, regexp is applied on full path; - # default value is empty list, but default dirs are skipped independently - # from this option's value (see skip-dirs-use-default). - # skip-dirs: - # - src/external_libs - # - autogenerated_by_my_lib - - # 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 - - # by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules": - # If invoked with -mod=readonly, the go command is disallowed from the implicit - # automatic updating of go.mod described above. Instead, it fails when any changes - # to go.mod are needed. This setting is most useful to check that go.mod does - # not need updates, such as in a continuous integration and testing system. - # If invoked with -mod=vendor, the go command assumes that the vendor - # directory holds the correct copies of dependencies and ignores - # the dependency descriptions in go.mod. - # modules-download-mode: readonly|release|vendor - -# output configuration options output: - # The formats used to render issues. - # Formats: - # - `colored-line-number` - # - `line-number` - # - `json` - # - `colored-tab` - # - `tab` - # - `html` - # - `checkstyle` - # - `code-climate` - # - `junit-xml` - # - `junit-xml-extended` - # - `github-actions` - # - `teamcity` - # - `sarif` - # Output path can be either `stdout`, `stderr` or path to the file to write to. - # - # For the CLI flag (`--out-format`), multiple formats can be specified by separating them by comma. - # The output can be specified for each of them by separating format name and path by colon symbol. - # Example: "--out-format=checkstyle:report.xml,json:stdout,colored-line-number" - # The CLI flag (`--out-format`) override the configuration file. - # - # Default: - # formats: - # - format: colored-line-number - # path: stdout formats: - - format: line-number + text: path: stdout - - # 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/helmfile/helmfile) - - 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: - # report about shadowed variables - 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 - # goimports: - # put imports beginning with prefix after 3rd-party packages; - # it's a comma-separated list of prefixes - # local-prefixes: github.com/org/project - 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: - # list-type: blacklist - # include-go-root: false - # packages: - # - github.com/sirupsen/logrus - # packages-with-error-messages: - # # specify an error message to output when a blacklisted package is used - # github.com/sirupsen/logrus: "logging is allowed only by logutils.Log" - 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: 50 - 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 - + 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 - - usestdlibvars - - reassign + - copyloopvar - errcheck - funlen - gocognit - goconst - - gofmt - - goimports - - revive - - gosimple - govet - ineffassign - misspell - nakedret - - copyloopvar + - reassign + - revive - staticcheck - - typecheck - unconvert - unparam - unused + - usestdlibvars - whitespace - - gci - # don't enable: - # - depguard - # - deadcode - # - gochecknoglobals - # - gochecknoinits - # - gocyclo - # - lll - # - maligned - # - prealloc - # - varcheck - # - gocritic - # - godox - # - gosec - # - interfacer - # - stylecheck - # - dogsled - # - dupl + settings: + staticcheck: + checks: ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022", "-ST1005", "-QF1001", "-QF1008"] + 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: 50 + 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/helmfile/helmfile) + gofmt: + simplify: true + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/pkg/app/app.go b/pkg/app/app.go index d5db95fb..6529291d 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -1005,7 +1005,7 @@ func printDAG(batches [][]state.Release) string { for i, batch := range batches { for _, r := range batch { id := state.ReleaseToID(&r.ReleaseSpec) - needs := r.ReleaseSpec.Needs + needs := r.Needs _, _ = fmt.Fprintf(w, "%d\t%s\t%s\n", i+1, id, strings.Join(needs, ", ")) } } diff --git a/pkg/app/ask.go b/pkg/app/ask.go index ad3425d9..52161a1c 100644 --- a/pkg/app/ask.go +++ b/pkg/app/ask.go @@ -24,9 +24,10 @@ func AskForConfirmation(s string) bool { response = strings.ToLower(strings.TrimSpace(response)) - if response == "y" || response == "yes" { + switch response { + case "y", "yes": return true - } else if response == "n" || response == "no" { + case "n", "no": return false } } diff --git a/pkg/app/two_pass_renderer.go b/pkg/app/two_pass_renderer.go index fddfa307..637f99be 100644 --- a/pkg/app/two_pass_renderer.go +++ b/pkg/app/two_pass_renderer.go @@ -14,7 +14,7 @@ func prependLineNumbers(text string) string { buf := bytes.NewBufferString("") lines := strings.Split(text, "\n") for i, line := range lines { - buf.WriteString(fmt.Sprintf("%2d: %s\n", i, line)) + fmt.Fprintf(buf, "%2d: %s\n", i, line) } return buf.String() } diff --git a/pkg/config/apply.go b/pkg/config/apply.go index d6f670a7..837359b9 100644 --- a/pkg/config/apply.go +++ b/pkg/config/apply.go @@ -119,7 +119,7 @@ func (a *ApplyImpl) StripTrailingCR() bool { // DiffOutput returns the diff output. func (a *ApplyImpl) DiffOutput() string { - return a.ApplyOptions.Output + return a.Output } // IncludeNeeds returns the include needs. diff --git a/pkg/config/diff.go b/pkg/config/diff.go index c2717b89..ac8018b9 100644 --- a/pkg/config/diff.go +++ b/pkg/config/diff.go @@ -126,7 +126,7 @@ func (a *DiffImpl) StripTrailingCR() bool { // Output returns the output func (t *DiffImpl) DiffOutput() string { - return t.DiffOptions.Output + return t.Output } // IncludeTests returns the include tests diff --git a/pkg/config/global.go b/pkg/config/global.go index 719d2132..fe906195 100644 --- a/pkg/config/global.go +++ b/pkg/config/global.go @@ -133,7 +133,7 @@ func (g *GlobalImpl) Chart() string { // FileOrDir returns the path to the Helmfile. func (g *GlobalImpl) FileOrDir() string { - file := g.GlobalOptions.File + file := g.File if file == "" { file = os.Getenv(envvar.FilePath) } @@ -143,7 +143,7 @@ func (g *GlobalImpl) FileOrDir() string { // Selectors returns the selectors to use. func (g *GlobalImpl) Selectors() []string { - return g.GlobalOptions.Selector + return g.Selector } // StateValuesSet returns the set @@ -158,12 +158,12 @@ func (g *GlobalImpl) RawStateValuesSet() []string { // RawStateValuesSetString returns the set func (g *GlobalImpl) RawStateValuesSetString() []string { - return g.GlobalOptions.StateValuesSetString + return g.StateValuesSetString } // StateValuesFiles returns the state values files func (g *GlobalImpl) StateValuesFiles() []string { - return g.GlobalOptions.StateValuesFile + return g.StateValuesFile } // EnableLiveOutput return when to pipe the stdout and stderr from Helm live to the helmfile stdout @@ -193,7 +193,7 @@ func (g *GlobalImpl) DisableForceUpdate() bool { // Logger returns the logger func (g *GlobalImpl) Logger() *zap.SugaredLogger { - return g.GlobalOptions.logger + return g.logger } func (g *GlobalImpl) Color() bool { @@ -226,8 +226,8 @@ func (g *GlobalImpl) Env() string { var env string switch { - case g.GlobalOptions.Environment != "": - env = g.GlobalOptions.Environment + case g.Environment != "": + env = g.Environment case os.Getenv("HELMFILE_ENVIRONMENT") != "": env = os.Getenv("HELMFILE_ENVIRONMENT") default: @@ -255,7 +255,7 @@ func (g *GlobalImpl) Interactive() bool { // Args returns the args to use for helm func (g *GlobalImpl) Args() string { args := g.GlobalOptions.Args - enableHelmDebug := g.GlobalOptions.Debug + enableHelmDebug := g.Debug if enableHelmDebug { args = fmt.Sprintf("%s %s", args, "--debug") diff --git a/pkg/errors/errors_test.go b/pkg/errors/errors_test.go index f8541d93..d147deb0 100644 --- a/pkg/errors/errors_test.go +++ b/pkg/errors/errors_test.go @@ -43,7 +43,7 @@ var ( func expect(t *testing.T, a any, b any) { _, fn, line, _ := runtime.Caller(1) - fn = strings.Replace(fn, wd+"/", "", -1) + fn = strings.ReplaceAll(fn, wd+"/", "") require.Equalf(t, a, b, "(%s:%d) Expected %v (type %v) - Got %v (type %v)", fn, line, b, reflect.TypeOf(b), a, reflect.TypeOf(a)) } diff --git a/pkg/policy/checker.go b/pkg/policy/checker.go index 28db5d70..a609b8fa 100644 --- a/pkg/policy/checker.go +++ b/pkg/policy/checker.go @@ -12,7 +12,7 @@ import ( ) var ( - EnvironmentsAndReleasesWithinSameYamlPartErr = errors.New("environments and releases cannot be defined within the same YAML part. Use --- to extract the environments into a dedicated part") + ErrEnvironmentsAndReleasesWithinSameYamlPart = errors.New("environments and releases cannot be defined within the same YAML part. Use --- to extract the environments into a dedicated part") topConfigKeysRegex = regexp.MustCompile(`^[a-zA-Z]+:`) separatorRegex = regexp.MustCompile(`^--- *$`) topkeysPriority = map[string]int{ @@ -49,7 +49,7 @@ func forbidEnvironmentsWithReleases(filePath string, content []byte) (bool, erro } for i := 0; i < len(result)-1; i++ { if result[i] != "---" && result[i+1] != "---" { - return true, EnvironmentsAndReleasesWithinSameYamlPartErr + return true, ErrEnvironmentsAndReleasesWithinSameYamlPart } } return false, nil diff --git a/pkg/policy/checker_test.go b/pkg/policy/checker_test.go index 0b64081a..b7cd667f 100644 --- a/pkg/policy/checker_test.go +++ b/pkg/policy/checker_test.go @@ -56,7 +56,7 @@ func TestForbidEnvironmentsWithReleases(t *testing.T) { isStrict, err := forbidEnvironmentsWithReleases(tc.filePath, tc.content) require.Equal(t, tc.isStrict, isStrict, "expected isStrict=%v, got=%v", tc.isStrict, isStrict) if tc.expectedErr { - require.ErrorIsf(t, err, EnvironmentsAndReleasesWithinSameYamlPartErr, "expected error=%v, got=%v", EnvironmentsAndReleasesWithinSameYamlPartErr, err) + require.ErrorIsf(t, err, ErrEnvironmentsAndReleasesWithinSameYamlPart, "expected error=%v, got=%v", ErrEnvironmentsAndReleasesWithinSameYamlPart, err) } else { require.NoError(t, err, "expected no error but got error: %v", err) } diff --git a/pkg/state/state.go b/pkg/state/state.go index fc6ce5a2..681c3122 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -584,7 +584,7 @@ func (st *HelmState) SyncRepos(helm RepoUpdater, shouldSkip map[string]bool) ([] func gatherUsernamePassword(repoName string, username string, password string) (string, string) { var user, pass string - replacedRepoName := strings.ToUpper(strings.Replace(repoName, "-", "_", -1)) + replacedRepoName := strings.ToUpper(strings.ReplaceAll(repoName, "-", "_")) if username != "" { user = username } else if u := os.Getenv(fmt.Sprintf("%s_USERNAME", replacedRepoName)); u != "" {