From 286794a8003030233cb14c7e3e9b6ba39c454244 Mon Sep 17 00:00:00 2001 From: Robert Kaussow Date: Mon, 31 Mar 2025 18:55:48 +0200 Subject: [PATCH] Bump golangci-lint to v2 (#5034) --- .golangci.yaml | 382 +++++++++--------- .woodpecker/test.yaml | 2 + Makefile | 2 +- pipeline/backend/kubernetes/pod.go | 1 + server/grpc/filter.go | 6 +- server/grpc/rpc.go | 2 +- server/router/middleware/session/org.go | 4 +- server/router/middleware/session/user.go | 4 +- server/services/config/forge.go | 2 +- server/services/encryption/constants.go | 2 +- .../services/encryption/encryption_builder.go | 8 +- 11 files changed, 216 insertions(+), 199 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index eba69a59a..d77c5aab5 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -1,188 +1,202 @@ -linters-settings: - gofmt: - simplify: true - rewrite-rules: - - pattern: interface{} - replacement: any - misspell: - locale: US - gofumpt: - extra-rules: true - forbidigo: - forbid: - - context\.WithCancel$ - - ^print.*$ - - panic - - ^log.Fatal().*$ - errorlint: - errorf-multi: true - depguard: - rules: - pipeline: - list-mode: lax - files: - - '**/pipeline/**/*.go' - - '**/pipeline/*.go' - - '!**/cli/pipeline/*.go' - - '!**/cli/pipeline/**/*.go' - - '!**/server/pipeline/*.go' - - '!**/server/pipeline/**/*.go' - deny: - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/agent' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cli' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/server' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/web' - shared: - list-mode: lax - files: - - '**/shared/**/*.go' - - '**/shared/*.go' - - '!**/pipeline/shared/*.go' - - '!**/pipeline/shared/**/*.go' - deny: - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/agent' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cli' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/pipeline' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/server' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/web' - woodpecker-go: - list-mode: lax - files: - - '**/woodpecker-go/woodpecker/**/*.go' - - '**/woodpecker-go/woodpecker/*.go' - deny: - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/agent' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cli' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/pipeline' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/server' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/shared' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/web' - agent: - list-mode: lax - files: - - '**/agent/**/*.go' - - '**/agent/*.go' - - '**/cmd/agent/**/*.go' - - '**/cmd/agent/*.go' - deny: - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cli' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/cli' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/server' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/server' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/web' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/woodpecker-go/woodpecker' - cli: - list-mode: lax - files: - - '**/cli/**/*.go' - - '**/cli/*.go' - - '**/cmd/cli/**/*.go' - - '**/cmd/cli/*.go' - deny: - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/agent' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/server' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/agent' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/server' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/web' - server: - list-mode: lax - files: - - '**/server/**/*.go' - - '**/server/*.go' - - '**/cmd/server/**/*.go' - - '**/cmd/server/*.go' - - '**/web/**/*.go' - - '**/web/*.go' - deny: - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/agent' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cli' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/agent' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/cmd/cli' - - pkg: 'go.woodpecker-ci.org/woodpecker/v3/woodpecker-go/woodpecker' - gci: - custom-order: true - sections: - - standard - - default - - prefix(go.woodpecker-ci.org/woodpecker) - mnd: - ignored-numbers: - - '0o600' - - '0o660' - - '0o644' - - '0o755' - - '0o700' - ignored-functions: - - make - - time.* - - strings.Split - - callerName - - securecookie.GenerateRandomKey - godot: - scope: toplevel - period: true - capital: true - exclude: - - '^\s*cSpell:' - - '^\s*TODO:' - -linters: - disable-all: true - enable: - - bidichk - - errcheck - - gofmt - - gosimple - - govet - - ineffassign - - misspell - - revive - - staticcheck - - typecheck - - unused - - gofumpt - - errorlint - - forbidigo - - zerologlint - - depguard - - asciicheck - - bodyclose - - dogsled - - durationcheck - - errchkjson - - gochecknoinits - - goheader - - gomoddirectives - - gomodguard - - goprintffuncname - - importas - - makezero - - rowserrcheck - - sqlclosecheck - - usetesting - - unconvert - - unparam - - wastedassign - - whitespace - - gocritic - - nolintlint - - stylecheck - - contextcheck - - forcetypeassert - - gci - - mnd - - godot - -issues: - exclude-rules: - - path: 'fixtures|cmd/agent/flags.go|cmd/server/flags.go|pipeline/backend/kubernetes/flags.go|_test.go' - linters: - - mnd - +version: '2' run: timeout: 15m build-tags: - test +linters: + default: none + enable: + - asciicheck + - bidichk + - bodyclose + - contextcheck + - depguard + - dogsled + - durationcheck + - errcheck + - errchkjson + - errorlint + - forbidigo + - forcetypeassert + - gochecknoinits + - gocritic + - godot + - goheader + - gomoddirectives + - gomodguard + - goprintffuncname + - govet + - importas + - ineffassign + - makezero + - misspell + - mnd + - nolintlint + - revive + - rowserrcheck + - sqlclosecheck + - staticcheck + - unconvert + - unparam + - unused + - usetesting + - wastedassign + - whitespace + - zerologlint + settings: + depguard: + rules: + agent: + list-mode: lax + files: + - '**/agent/**/*.go' + - '**/agent/*.go' + - '**/cmd/agent/**/*.go' + - '**/cmd/agent/*.go' + deny: + - pkg: go.woodpecker-ci.org/woodpecker/v3/cli + - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/cli + - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/server + - pkg: go.woodpecker-ci.org/woodpecker/v3/server + - pkg: go.woodpecker-ci.org/woodpecker/v3/web + - pkg: go.woodpecker-ci.org/woodpecker/v3/woodpecker-go/woodpecker + cli: + list-mode: lax + files: + - '**/cli/**/*.go' + - '**/cli/*.go' + - '**/cmd/cli/**/*.go' + - '**/cmd/cli/*.go' + deny: + - pkg: go.woodpecker-ci.org/woodpecker/v3/agent + - pkg: go.woodpecker-ci.org/woodpecker/v3/server + - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/agent + - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/server + - pkg: go.woodpecker-ci.org/woodpecker/v3/web + pipeline: + list-mode: lax + files: + - '**/pipeline/**/*.go' + - '**/pipeline/*.go' + - '!**/cli/pipeline/*.go' + - '!**/cli/pipeline/**/*.go' + - '!**/server/pipeline/*.go' + - '!**/server/pipeline/**/*.go' + deny: + - pkg: go.woodpecker-ci.org/woodpecker/v3/agent + - pkg: go.woodpecker-ci.org/woodpecker/v3/cli + - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd + - pkg: go.woodpecker-ci.org/woodpecker/v3/server + - pkg: go.woodpecker-ci.org/woodpecker/v3/web + server: + list-mode: lax + files: + - '**/server/**/*.go' + - '**/server/*.go' + - '**/cmd/server/**/*.go' + - '**/cmd/server/*.go' + - '**/web/**/*.go' + - '**/web/*.go' + deny: + - pkg: go.woodpecker-ci.org/woodpecker/v3/agent + - pkg: go.woodpecker-ci.org/woodpecker/v3/cli + - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/agent + - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/cli + - pkg: go.woodpecker-ci.org/woodpecker/v3/woodpecker-go/woodpecker + shared: + list-mode: lax + files: + - '**/shared/**/*.go' + - '**/shared/*.go' + - '!**/pipeline/shared/*.go' + - '!**/pipeline/shared/**/*.go' + deny: + - pkg: go.woodpecker-ci.org/woodpecker/v3/agent + - pkg: go.woodpecker-ci.org/woodpecker/v3/cli + - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd + - pkg: go.woodpecker-ci.org/woodpecker/v3/pipeline + - pkg: go.woodpecker-ci.org/woodpecker/v3/server + - pkg: go.woodpecker-ci.org/woodpecker/v3/web + woodpecker-go: + list-mode: lax + files: + - '**/woodpecker-go/woodpecker/**/*.go' + - '**/woodpecker-go/woodpecker/*.go' + deny: + - pkg: go.woodpecker-ci.org/woodpecker/v3/agent + - pkg: go.woodpecker-ci.org/woodpecker/v3/cli + - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd + - pkg: go.woodpecker-ci.org/woodpecker/v3/pipeline + - pkg: go.woodpecker-ci.org/woodpecker/v3/server + - pkg: go.woodpecker-ci.org/woodpecker/v3/shared + - pkg: go.woodpecker-ci.org/woodpecker/v3/web + errorlint: + errorf-multi: true + forbidigo: + forbid: + - pattern: context\.WithCancel$ + - pattern: ^print.*$ + - pattern: panic + - pattern: ^log.Fatal().*$ + godot: + scope: toplevel + exclude: + - '^\s*cSpell:' + - '^\s*TODO:' + capital: true + period: true + misspell: + locale: US + mnd: + ignored-numbers: + - '0o600' + - '0o660' + - '0o644' + - '0o755' + - '0o700' + ignored-functions: + - make + - time.* + - strings.Split + - callerName + - securecookie.GenerateRandomKey + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - mnd + path: fixtures|cmd/agent/flags.go|cmd/server/flags.go|pipeline/backend/kubernetes/flags.go|_test.go + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gci + - gofmt + - gofumpt + settings: + gci: + sections: + - standard + - default + - prefix(go.woodpecker-ci.org/woodpecker) + custom-order: true + gofmt: + simplify: true + rewrite-rules: + - pattern: interface{} + replacement: any + gofumpt: + extra-rules: true + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/.woodpecker/test.yaml b/.woodpecker/test.yaml index c9e8e92eb..ed48eba23 100644 --- a/.woodpecker/test.yaml +++ b/.woodpecker/test.yaml @@ -9,6 +9,8 @@ variables: - 'go.*' # schema changes - 'pipeline/schema/**' + # tools updates + - Makefile event: pull_request when: diff --git a/Makefile b/Makefile index b6f2296a4..badadbeb4 100644 --- a/Makefile +++ b/Makefile @@ -129,7 +129,7 @@ check-xgo: ## Check if xgo is installed install-tools: ## Install development tools @hash golangci-lint > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest ; \ + go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest ; \ fi ; \ hash gofumpt > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ go install mvdan.cc/gofumpt@latest; \ diff --git a/pipeline/backend/kubernetes/pod.go b/pipeline/backend/kubernetes/pod.go index 8be51be7d..460ed5bc8 100644 --- a/pipeline/backend/kubernetes/pod.go +++ b/pipeline/backend/kubernetes/pod.go @@ -511,6 +511,7 @@ func containerSecurityContext(sc *SecurityContext, stepPrivileged bool) *v1.Secu return nil } + //nolint:staticcheck privileged := false // if security context privileged is set explicitly diff --git a/server/grpc/filter.go b/server/grpc/filter.go index 4429f3d3b..a235878ac 100644 --- a/server/grpc/filter.go +++ b/server/grpc/filter.go @@ -45,12 +45,12 @@ func createFilterFunc(agentFilter rpc.Filter) queue.FilterFn { return false, 0 } - switch { + switch agentLabelValue { // if agent label has a wildcard - case agentLabelValue == "*": + case "*": score++ // if agent label has an exact match - case agentLabelValue == taskLabelValue: + case taskLabelValue: score += 10 // agent doesn't match default: diff --git a/server/grpc/rpc.go b/server/grpc/rpc.go index 379fa7900..dc576ae1c 100644 --- a/server/grpc/rpc.go +++ b/server/grpc/rpc.go @@ -491,7 +491,7 @@ func (s *RPC) ReportHealth(ctx context.Context, status string) error { } if status != "I am alive!" { - //nolint:stylecheck + //nolint:staticcheck return errors.New("Are you alive?") } diff --git a/server/router/middleware/session/org.go b/server/router/middleware/session/org.go index a02f0e50f..b6be9276c 100644 --- a/server/router/middleware/session/org.go +++ b/server/router/middleware/session/org.go @@ -75,8 +75,8 @@ func SetOrg() gin.HandlerFunc { func MustOrg() gin.HandlerFunc { return func(c *gin.Context) { org := Org(c) - switch { - case org == nil: + switch org { + case nil: c.String(http.StatusNotFound, "Organization not loaded") c.Abort() default: diff --git a/server/router/middleware/session/user.go b/server/router/middleware/session/user.go index 7cc35de66..744f09ddc 100644 --- a/server/router/middleware/session/user.go +++ b/server/router/middleware/session/user.go @@ -110,8 +110,8 @@ func MustRepoAdmin() gin.HandlerFunc { func MustUser() gin.HandlerFunc { return func(c *gin.Context) { user := User(c) - switch { - case user == nil: + switch user { + case nil: c.String(http.StatusUnauthorized, "User not authorized") c.Abort() default: diff --git a/server/services/config/forge.go b/server/services/config/forge.go index 93affef73..6e03e8f3c 100644 --- a/server/services/config/forge.go +++ b/server/services/config/forge.go @@ -146,7 +146,7 @@ func (f *forgeFetcherContext) getFirstAvailableConfig(c context.Context, configs files, err := f.forge.Dir(c, f.user, f.repo, f.pipeline, strings.TrimSuffix(fileOrFolder, "/")) // if folder is not supported we will get a "Not implemented" error and continue if err != nil { - if !(errors.Is(err, types.ErrNotImplemented) || errors.Is(err, &types.ErrConfigNotFound{})) { + if !errors.Is(err, types.ErrNotImplemented) && !errors.Is(err, &types.ErrConfigNotFound{}) { log.Error().Err(err).Str("repo", f.repo.FullName).Str("user", f.user.Login).Msgf("could not get folder from forge: %s", err) forgeErr = append(forgeErr, err) } diff --git a/server/services/encryption/constants.go b/server/services/encryption/constants.go index 93b845839..d3926653c 100644 --- a/server/services/encryption/constants.go +++ b/server/services/encryption/constants.go @@ -29,7 +29,7 @@ const ( keyTypeNone = "none" keyIDAssociatedData = "Primary key id" - AES_GCM_SIV_NonceSize = 12 //nolint:revive,stylecheck + AES_GCM_SIV_NonceSize = 12 //nolint:revive ) var ( diff --git a/server/services/encryption/encryption_builder.go b/server/services/encryption/encryption_builder.go index 2ccf14b8f..7dcea10f9 100644 --- a/server/services/encryption/encryption_builder.go +++ b/server/services/encryption/encryption_builder.go @@ -62,12 +62,12 @@ func (b builder) detectKeyType() (string, error) { } func (b builder) serviceBuilder(keyType string) (types.EncryptionServiceBuilder, error) { - switch { - case keyType == keyTypeTink: + switch keyType { + case keyTypeTink: return newTink(b.c, b.store), nil - case keyType == keyTypeRaw: + case keyTypeRaw: return newAES(b.c, b.store), nil - case keyType == keyTypeNone: + case keyTypeNone: return &noEncryptionBuilder{}, nil } return nil, fmt.Errorf(errMessageTemplateUnsupportedKeyType, keyType)