run: timeout: 10m linters-settings: govet: enable-all: true disable: - shadow - fieldalignment 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: rules: main: deny: - pkg: "github.com/instana/testify" desc: not allowed - pkg: "github.com/pkg/errors" desc: Should be replaced by standard lib errors package - pkg: "k8s.io/api/networking/v1beta1" desc: This API is deprecated - pkg: "k8s.io/api/extensions/v1beta1" desc: This API is deprecated godox: keywords: - FIXME importas: no-unaliased: true alias: - alias: composeapi pkg: github.com/docker/compose/v2/pkg/api # Standard Kubernetes rewrites: - alias: corev1 pkg: "k8s.io/api/core/v1" - alias: netv1 pkg: "k8s.io/api/networking/v1" - alias: admv1 pkg: "k8s.io/api/admission/v1" - alias: admv1beta1 pkg: "k8s.io/api/admission/v1beta1" - alias: metav1 pkg: "k8s.io/apimachinery/pkg/apis/meta/v1" - alias: ktypes pkg: "k8s.io/apimachinery/pkg/types" - alias: kerror pkg: "k8s.io/apimachinery/pkg/api/errors" - alias: kclientset pkg: "k8s.io/client-go/kubernetes" - alias: kinformers pkg: "k8s.io/client-go/informers" - alias: ktesting pkg: "k8s.io/client-go/testing" - alias: kschema pkg: "k8s.io/apimachinery/pkg/runtime/schema" - alias: kscheme pkg: "k8s.io/client-go/kubernetes/scheme" - alias: kversion pkg: "k8s.io/apimachinery/pkg/version" - alias: kubefake pkg: "k8s.io/client-go/kubernetes/fake" - alias: discoveryfake pkg: "k8s.io/client-go/discovery/fake" # Kubernetes Gateway rewrites: - alias: gateclientset pkg: "sigs.k8s.io/gateway-api/pkg/client/clientset/gateway/versioned" - alias: gateinformers pkg: "sigs.k8s.io/gateway-api/pkg/client/informers/gateway/externalversions" - alias: gatev1alpha2 pkg: "sigs.k8s.io/gateway-api/apis/v1alpha2" # Traefik Kubernetes rewrites: - alias: traefikv1alpha1 pkg: "github.com/traefik/traefik/v3/pkg/provider/kubernetes/crd/traefikio/v1alpha1" - alias: traefikclientset pkg: "github.com/traefik/traefik/v3/pkg/provider/kubernetes/crd/generated/clientset/versioned" - alias: traefikinformers pkg: "github.com/traefik/traefik/v3/pkg/provider/kubernetes/crd/generated/informers/externalversions" - alias: traefikscheme pkg: "github.com/traefik/traefik/v3/pkg/provider/kubernetes/crd/generated/clientset/versioned/scheme" - alias: traefikcrdfake pkg: "github.com/traefik/traefik/v3/pkg/provider/kubernetes/crd/generated/clientset/versioned/fake" tagalign: align: false sort: true order: - description - json - toml - yaml - yml - label - label-slice-as-struct - file - kv - export revive: rules: - name: struct-tag - 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 disabled: true - name: if-return - name: increment-decrement - name: var-naming - name: var-declaration - name: package-comments disabled: true - 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 disabled: true - name: unreachable-code - name: redefines-builtin-id gomoddirectives: replace-allow-list: - github.com/abbot/go-http-auth - github.com/gorilla/mux - github.com/mailgun/minheap - github.com/mailgun/multibuf - github.com/jaguilar/vt100 - github.com/cucumber/godog testifylint: disable: - suite-dont-use-pkg - require-error - go-require staticcheck: checks: - all - -SA1019 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 - gosmopolitan # not relevant - exportloopref # Useless with go1.22 - musttag - intrange # bug (fixed in golangci-lint v1.58) issues: exclude-use-default: false max-issues-per-linter: 0 max-same-issues: 0 exclude-dirs: - pkg/provider/kubernetes/crd/generated/ 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" - 'fmt.Sprintf can be replaced with string' 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/logs/haystack.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/kubernetes.go text: 'SA1019: middleware.Spec.IPWhiteList is deprecated: please use IPAllowList instead.' - path: pkg/server/middleware/tcp/middlewares.go text: 'SA1019: config.IPWhiteList is deprecated: please use IPAllowList instead.' - path: pkg/server/middleware/middlewares.go text: 'SA1019: config.IPWhiteList is deprecated: please use IPAllowList instead.' - 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 - path: pkg/provider/kubernetes/crd/kubernetes.go text: "Function 'loadConfigurationFromCRD' has too many statements" linters: - funlen - path: pkg/provider/kubernetes/gateway/client_mock_test.go text: 'unusedwrite: unused write to field' linters: - govet - path: pkg/cli/deprecation.go linters: - goconst - path: pkg/cli/loader_file.go linters: - goconst