diff --git a/.github/workflows/validate.yaml b/.github/workflows/validate.yaml index 2b52c1e65..9cb143d8b 100644 --- a/.github/workflows/validate.yaml +++ b/.github/workflows/validate.yaml @@ -7,7 +7,7 @@ on: env: GO_VERSION: 1.19 - GOLANGCI_LINT_VERSION: v1.49.0 + GOLANGCI_LINT_VERSION: v1.50.0 MISSSPELL_VERSION: v0.4.0 IN_DOCKER: "" diff --git a/.golangci.toml b/.golangci.toml deleted file mode 100644 index 6c7e4db25..000000000 --- a/.golangci.toml +++ /dev/null @@ -1,219 +0,0 @@ -[run] - timeout = "10m" - skip-files = [] - skip-dirs = [ - "pkg/provider/kubernetes/crd/generated/", - ] - -[linters-settings] - - [linters-settings.govet] - check-shadowing = false - - [linters-settings.golint] - min-confidence = 0.0 - - [linters-settings.gocyclo] - min-complexity = 14.0 - - [linters-settings.goconst] - min-len = 3.0 - min-occurrences = 4.0 - - [linters-settings.misspell] - locale = "US" - - [linters-settings.funlen] - lines = 230 # default 60 - statements = 120 # default 40 - - [linters-settings.forbidigo] - forbid = [ - '^print(ln)?$', - '^spew\.Print(f|ln)?$', - '^spew\.Dump$', - ] - - [linters-settings.depguard] - list-type = "blacklist" - include-go-root = false - packages = ["github.com/pkg/errors"] - - [linters-settings.godox] - keywords = ["FIXME"] - - [linters-settings.importas] - corev1 = "k8s.io/api/core/v1" - networkingv1beta1 = "k8s.io/api/networking/v1beta1" - extensionsv1beta1 = "k8s.io/api/extensions/v1beta1" - metav1 = "k8s.io/apimachinery/pkg/apis/meta/v1" - kubeerror = "k8s.io/apimachinery/pkg/api/errors" - composeapi = "github.com/docker/compose/v2/pkg/api" - - [linters-settings.revive] - [[linters-settings.revive.rules]] - name = "struct-tag" - [[linters-settings.rules]] - name = "blank-imports" - [[linters-settings.rules]] - name = "context-as-argument" - [[linters-settings.rules]] - name = "context-keys-type" - [[linters-settings.rules]] - name = "dot-imports" - [[linters-settings.rules]] - name = "error-return" - [[linters-settings.rules]] - name = "error-strings" - [[linters-settings.rules]] - name = "error-naming" - [[linters-settings.rules]] - name = "exported" - [[linters-settings.rules]] - name = "if-return" - [[linters-settings.rules]] - name = "increment-decrement" - [[linters-settings.rules]] - name = "var-naming" - [[linters-settings.rules]] - name = "var-declaration" - [[linters-settings.rules]] - name = "package-comments" - [[linters-settings.rules]] - name = "range" - [[linters-settings.rules]] - name = "receiver-naming" - [[linters-settings.rules]] - name = "time-naming" - [[linters-settings.rules]] - name = "unexported-return" - [[linters-settings.rules]] - name = "indent-error-flow" - [[linters-settings.rules]] - name = "errorf" - [[linters-settings.rules]] - name = "empty-block" - [[linters-settings.rules]] - name = "superfluous-else" - [[linters-settings.rules]] - name = "unused-parameter" - [[linters-settings.rules]] - name = "unreachable-code" - [[linters-settings.rules]] - name = "redefines-builtin-id" - - [linters-settings.gomoddirectives] - replace-allow-list = [ - "github.com/abbot/go-http-auth", - "github.com/go-check/check", - "github.com/gorilla/mux", - "github.com/mailgun/minheap", - "github.com/mailgun/multibuf", - "github.com/jaguilar/vt100", - "github.com/BurntSushi/toml", - ] - -[linters] - enable-all = true - disable = [ - "scopelint", # Deprecated - "interfacer", # Deprecated - "maligned", # Deprecated - "golint", # Deprecated - "exhaustivestruct",# Deprecated - "nosnakecase", # Deprecated - "ifshort", # Deprecated - "structcheck", # Deprecated - "varcheck", # Deprecated - "deadcode", # Deprecated - "execinquery", # Not relevant (SQL) - "sqlclosecheck", # Not relevant (SQL) - "rowserrcheck", # Not relevant (SQL) - "lll", # Not relevant - "gocyclo", # FIXME must be fixed - "cyclop", # Duplicate of gocyclo - "gocognit", # Too strict - "nestif", # Too many false-positive. - "prealloc", # Too many false-positive. - "makezero", # Not relevant - "dupl", # Too strict - "gosec", # Too strict - "gochecknoinits", - "gochecknoglobals", - "wsl", # Too strict - "nlreturn", # Not relevant - "gomnd", # Too strict - "stylecheck", # skip because report issues related to some generated files. - "testpackage", # Too strict - "tparallel", # Not relevant - "paralleltest", # Not relevant - "exhaustive", # Not relevant - "exhaustruct", # duplicate of exhaustivestruct - "goerr113", # Too strict - "wrapcheck", # Too strict - "noctx", # Too strict - "bodyclose", # Too many false-positive and panics. - "forcetypeassert", # Too strict - "tagliatelle", # Not compatible with current tags. - "varnamelen", # not relevant - "nilnil", # not relevant - "ireturn", # not relevant - "contextcheck", # too many false-positive - "containedctx", # too many false-positive - "maintidx", # kind of duplicate of gocyclo - "nonamedreturns", # not relevant - ] - -[issues] - exclude-use-default = false - max-per-linter = 0 - max-same-issues = 0 - exclude = [ - "Error return value of .((os\\.)?std(out|err)\\..*|.*Close|.*Flush|os\\.Remove(All)?|.*printf?|os\\.(Un)?Setenv). is not checked", - "should have a package comment, unless it's in another file for this package", - "SA1019: http.CloseNotifier has been deprecated", # FIXME must be fixed - "SA1019: cfg.SSLRedirect is deprecated", - "SA1019: cfg.SSLTemporaryRedirect is deprecated", - "SA1019: cfg.SSLHost is deprecated", - "SA1019: cfg.SSLForceHost is deprecated", - "SA1019: cfg.FeaturePolicy is deprecated", - "SA1019: c.Providers.ConsulCatalog.Namespace is deprecated", - "SA1019: c.Providers.Consul.Namespace is deprecated", - ] - [[issues.exclude-rules]] - path = "(.+)_test.go" - linters = ["goconst", "funlen", "godot"] - [[issues.exclude-rules]] - path = "(.+)_test.go" - text = " always receives " - linters = [ "unparam" ] - [[issues.exclude-rules]] - path = "pkg/server/service/bufferpool.go" - text = "SA6002: argument should be pointer-like to avoid allocations" - [[issues.exclude-rules]] - path = "pkg/server/middleware/middlewares.go" - text = "Function 'buildConstructor' has too many statements" - [[issues.exclude-rules]] - path = "pkg/tracing/haystack/logger.go" - linters = ["goprintffuncname"] - [[issues.exclude-rules]] - path = "pkg/tracing/tracing.go" - text = "printf-like formatting function 'SetErrorWithEvent' should be named 'SetErrorWithEventf'" - [[issues.exclude-rules]] - path = "(.+)\\.go" - text = "struct-tag: unknown option 'inline' in JSON tag" - [[issues.exclude-rules]] - path = "pkg/server/router/tcp/manager.go" - text = "Function 'buildEntryPointHandler' is too long (.+)" - [[issues.exclude-rules]] - path = "pkg/tls/tlsmanager_test.go" - text = "SA1019: config.ClientCAs.Subjects has been deprecated since Go 1.18" - [[issues.exclude-rules]] - path = "pkg/types/tls_test.go" - text = "SA1019: tlsConfig.RootCAs.Subjects has been deprecated since Go 1.18" - [[issues.exclude-rules]] - path = "pkg/provider/kubernetes/(crd|gateway)/client.go" - linters = ["interfacebloat"] - [[issues.exclude-rules]] - path = "pkg/metrics/metrics.go" - linters = ["interfacebloat"] diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 000000000..8267a2b94 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,190 @@ +run: + timeout: 10m + skip-files: [] + skip-dirs: + - pkg/provider/kubernetes/crd/generated/ + +linters-settings: + govet: + check-shadowing: false + golint: + min-confidence: 0 + gocyclo: + min-complexity: 14 + goconst: + min-len: 3 + min-occurrences: 4 + misspell: + locale: US + funlen: + lines: -1 + statements: 120 + forbidigo: + forbid: + - ^print(ln)?$ + - ^spew\.Print(f|ln)?$ + - ^spew\.Dump$ + depguard: + list-type: denylist + include-go-root: false + packages: + - github.com/pkg/errors + godox: + keywords: + - FIXME + importas: + corev1: k8s.io/api/core/v1 + networkingv1beta1: k8s.io/api/networking/v1beta1 + extensionsv1beta1: k8s.io/api/extensions/v1beta1 + metav1: k8s.io/apimachinery/pkg/apis/meta/v1 + kubeerror: k8s.io/apimachinery/pkg/api/errors + composeapi: github.com/docker/compose/v2/pkg/api + revive: + rules: + - name: struct-tag + rules: + - name: blank-imports + - name: context-as-argument + - name: context-keys-type + - name: dot-imports + - name: error-return + - name: error-strings + - name: error-naming + - name: exported + - name: if-return + - name: increment-decrement + - name: var-naming + - name: var-declaration + - name: package-comments + - name: range + - name: receiver-naming + - name: time-naming + - name: unexported-return + - name: indent-error-flow + - name: errorf + - name: empty-block + - name: superfluous-else + - name: unused-parameter + - name: unreachable-code + - name: redefines-builtin-id + gomoddirectives: + replace-allow-list: + - github.com/abbot/go-http-auth + - github.com/go-check/check + - github.com/gorilla/mux + - github.com/mailgun/minheap + - github.com/mailgun/multibuf + - github.com/jaguilar/vt100 + - github.com/BurntSushi/toml + +linters: + enable-all: true + disable: + - deadcode # deprecated + - exhaustivestruct # deprecated + - golint # deprecated + - ifshort # deprecated + - interfacer # deprecated + - maligned # deprecated + - nosnakecase # deprecated + - scopelint # deprecated + - scopelint # deprecated + - structcheck # deprecated + - varcheck # deprecated + - sqlclosecheck # not relevant (SQL) + - rowserrcheck # not relevant (SQL) + - execinquery # not relevant (SQL) + - cyclop # duplicate of gocyclo + - lll # Not relevant + - gocyclo # FIXME must be fixed + - gocognit # Too strict + - nestif # Too many false-positive. + - prealloc # Too many false-positive. + - makezero # Not relevant + - dupl # Too strict + - gosec # Too strict + - gochecknoinits + - gochecknoglobals + - wsl # Too strict + - nlreturn # Not relevant + - gomnd # Too strict + - stylecheck # skip because report issues related to some generated files. + - testpackage # Too strict + - tparallel # Not relevant + - paralleltest # Not relevant + - exhaustive # Not relevant + - exhaustruct # Not relevant + - goerr113 # Too strict + - wrapcheck # Too strict + - noctx # Too strict + - bodyclose # too many false-positive + - forcetypeassert # Too strict + - tagliatelle # Too strict + - varnamelen # Not relevant + - nilnil # Not relevant + - ireturn # Not relevant + - contextcheck # too many false-positive + - containedctx # too many false-positive + - maintidx # kind of duplicate of gocyclo + - nonamedreturns # Too strict + +issues: + exclude-use-default: false + max-per-linter: 0 + max-same-issues: 0 + exclude: + - 'Error return value of .((os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*printf?|os\.(Un)?Setenv). is not checked' + - "should have a package comment, unless it's in another file for this package" + - 'SA1019: http.CloseNotifier has been deprecated' # FIXME must be fixed + - 'SA1019: cfg.SSLRedirect is deprecated' + - 'SA1019: cfg.SSLTemporaryRedirect is deprecated' + - 'SA1019: cfg.SSLHost is deprecated' + - 'SA1019: cfg.SSLForceHost is deprecated' + - 'SA1019: cfg.FeaturePolicy is deprecated' + - 'SA1019: c.Providers.ConsulCatalog.Namespace is deprecated' + - 'SA1019: c.Providers.Consul.Namespace is deprecated' + exclude-rules: + - path: '(.+)_test.go' + linters: + - goconst + - funlen + - godot + - path: '(.+)_test.go' + text: ' always receives ' + linters: + - unparam + - path: '(.+)\.go' + text: 'struct-tag: unknown option ''inline'' in JSON tag' + linters: + - revive + - path: pkg/server/service/bufferpool.go + text: 'SA6002: argument should be pointer-like to avoid allocations' + - path: pkg/server/middleware/middlewares.go + text: "Function 'buildConstructor' has too many statements" + linters: + - funlen + - path: pkg/tracing/haystack/logger.go + linters: + - goprintffuncname + - path: pkg/tracing/tracing.go + text: "printf-like formatting function 'SetErrorWithEvent' should be named 'SetErrorWithEventf'" + linters: + - goprintffuncname + - path: pkg/tls/tlsmanager_test.go + text: 'SA1019: config.ClientCAs.Subjects has been deprecated since Go 1.18' + - path: pkg/types/tls_test.go + text: 'SA1019: tlsConfig.RootCAs.Subjects has been deprecated since Go 1.18' + - path: pkg/provider/kubernetes/(crd|gateway)/client.go + linters: + - interfacebloat + - path: pkg/metrics/metrics.go + linters: + - interfacebloat + - path: integration/healthcheck_test.go + text: 'Duplicate words \(wsp2,\) found' + linters: + - dupword + - path: pkg/types/domain_test.go + text: 'Duplicate words \(sub\) found' + linters: + - dupword