mirror of
https://github.com/gravitational/teleport.git
synced 2026-10-11 22:49:54 +00:00
Depends on https://github.com/gravitational/teleport.e/pull/6006. Now that we are compliant, the ignore rule was removed from the golangci-lint config to prevent future regressions.
398 lines
16 KiB
YAML
398 lines
16 KiB
YAML
issues:
|
|
exclude-dirs:
|
|
- (^|/)node_modules/
|
|
- ^api/gen/
|
|
- ^docs/
|
|
- ^gen/
|
|
- ^rfd/
|
|
- ^web/
|
|
exclude-dirs-use-default: false
|
|
exclude-rules:
|
|
- linters:
|
|
- gosimple
|
|
text: 'S1002: should omit comparison to bool constant'
|
|
- linters:
|
|
- revive
|
|
text: 'exported: exported const'
|
|
# TODO(hugoShaka): Remove once https://github.com/dominikh/go-tools/issues/1294 is fixed
|
|
- linters:
|
|
- unused
|
|
path: 'integrations/operator/controllers/resources/(.+)_controller_test\.go'
|
|
# TODO(codingllama): Remove once we move to grpc.NewClient.
|
|
- linters: [staticcheck]
|
|
text: 'grpc.Dial is deprecated'
|
|
- linters: [staticcheck]
|
|
text: 'grpc.DialContext is deprecated'
|
|
# Deprecated gRPC dial options. Related to grpc.NewClient.
|
|
- path: (client/client.go|client/proxy/client_test.go) # api/
|
|
linters: [staticcheck]
|
|
# grpc.FailOnNonTempDialError
|
|
# grpc.WithReturnConnectionError
|
|
text: 'this DialOption is not supported by NewClient'
|
|
- path: lib/kube/grpc/grpc_test.go
|
|
linters: [staticcheck]
|
|
text: 'grpc.WithBlock is deprecated'
|
|
- path: lib/observability/tracing/client.go
|
|
linters: [staticcheck]
|
|
text: 'grpc.WithBlock is deprecated'
|
|
- path: integrations/lib/config.go
|
|
linters: [staticcheck]
|
|
text: 'grpc.WithReturnConnectionError is deprecated'
|
|
- path: lib/service/service_test.go
|
|
linters: [staticcheck]
|
|
# grpc.WithReturnConnectionError
|
|
# grpc.FailOnNonTempDialError
|
|
text: 'this DialOption is not supported by NewClient'
|
|
- path: integration/client_test.go
|
|
linters: [staticcheck]
|
|
text: 'grpc.WithReturnConnectionError is deprecated'
|
|
- path: integration/integration_test.go
|
|
linters: [staticcheck]
|
|
text: 'grpc.WithBlock is deprecated'
|
|
- path: lib/multiplexer/multiplexer_test.go
|
|
linters: [staticcheck]
|
|
text: 'grpc.WithBlock is deprecated'
|
|
- path: provider/provider.go # integrations/terraform
|
|
linters: [staticcheck]
|
|
text: 'grpc.WithReturnConnectionError is deprecated'
|
|
# BlockUntilContext should indeed be favored, this exception exists because
|
|
# at this time there are too many offenders.
|
|
- linters: [staticcheck]
|
|
text: 'BlockUntil is deprecated: New code should prefer BlockUntilContext'
|
|
exclude-use-default: true
|
|
max-same-issues: 0
|
|
max-issues-per-linter: 0
|
|
uniq-by-line: false
|
|
|
|
linters:
|
|
disable-all: true
|
|
enable:
|
|
- bodyclose
|
|
- depguard
|
|
- errorlint
|
|
- gci
|
|
- goimports
|
|
- gosimple
|
|
- govet
|
|
- ineffassign
|
|
- misspell
|
|
- nolintlint
|
|
- revive
|
|
- sloglint
|
|
- staticcheck
|
|
- testifylint
|
|
- unconvert
|
|
- unused
|
|
- forbidigo
|
|
|
|
linters-settings:
|
|
depguard:
|
|
rules:
|
|
main:
|
|
deny:
|
|
- pkg: io/ioutil
|
|
desc: 'use "io" or "os" packages instead'
|
|
- pkg: math/rand$
|
|
desc: 'use "math/rand/v2" or "crypto/rand" instead'
|
|
- pkg: github.com/golang/protobuf
|
|
desc: 'use "google.golang.org/protobuf"'
|
|
- pkg: github.com/hashicorp/go-uuid
|
|
desc: 'use "github.com/google/uuid" instead'
|
|
- pkg: github.com/pborman/uuid
|
|
desc: 'use "github.com/google/uuid" instead'
|
|
- pkg: github.com/tj/assert
|
|
desc: 'use "github.com/stretchr/testify/assert" instead'
|
|
- pkg: go.uber.org/atomic
|
|
desc: 'use "sync/atomic" instead'
|
|
- pkg: golang.design
|
|
desc: 'experimental project, not to be confused with official Go packages'
|
|
- pkg: golang.org/x/exp/slices
|
|
desc: 'use "slices" instead'
|
|
- pkg: github.com/hashicorp/go-version
|
|
desc: 'use "golang.org/x/mod/semver" or "coreos/go-semver/semver" instead'
|
|
- pkg: github.com/microsoftgraph/msgraph-sdk-go
|
|
desc: 'use "github.com/gravitational/teleport/lib/msgraph" instead'
|
|
- pkg: github.com/cloudflare/cfssl
|
|
desc: 'use "crypto" or "x/crypto" instead'
|
|
# Prevent importing any additional logging libraries.
|
|
logging:
|
|
deny:
|
|
- pkg: github.com/sirupsen/logrus
|
|
desc: 'use "log/slog" instead'
|
|
- pkg: github.com/siddontang/go-log/log
|
|
desc: 'use "log/slog" instead'
|
|
- pkg: github.com/siddontang/go/log
|
|
desc: 'use "log/slog" instead'
|
|
- pkg: github.com/mailgun/log
|
|
desc: 'use "log/slog" instead'
|
|
- pkg: github.com/saferwall/pe/log
|
|
desc: 'use "log/slog" instead'
|
|
- pkg: golang.org/x/exp/slog
|
|
desc: 'use "log/slog" instead'
|
|
# Prevent importing testify in production code.
|
|
testify:
|
|
files:
|
|
# Tests can import testify
|
|
- '!$test'
|
|
# Exceptions
|
|
# Remove these once they are complaint.
|
|
- '!**/api/testhelpers/**'
|
|
- '!**/e/lib/auth/ssotestlib.go'
|
|
- '!**/e/lib/aws/identitycenter/test/**'
|
|
- '!**/e/lib/idp/saml/testenv/**'
|
|
- '!**/e/lib/operatortest/**'
|
|
- '!**/e/tests/**'
|
|
- '!**/lib/automaticupgrades/basichttp/servermock.go'
|
|
- '!**/lib/auth/helpers.go'
|
|
- '!**/lib/auth/keystore/testhelpers.go'
|
|
- '!**/lib/auth/test/**'
|
|
- '!**/lib/backend/test/**'
|
|
- '!**/lib/events/athena/test.go'
|
|
- '!**/lib/events/test/**'
|
|
- '!**/lib/kube/proxy/utils_testing.go'
|
|
- '!**/lib/services/suite/**'
|
|
- '!**/lib/srv/mock.go'
|
|
- '!**/lib/srv/db/redis/test.go'
|
|
- '!**/lib/teleterm/gatewaytest/**'
|
|
- '!**/lib/utils/testhelpers.go'
|
|
- '!**/lib/utils/testutils/**'
|
|
- '!**/integration/appaccess/fixtures.go'
|
|
- '!**/integration/appaccess/jwt.go'
|
|
- '!**/integration/appaccess/pack.go'
|
|
- '!**/integration/db/fixture.go'
|
|
- '!**/integration/hsm/helpers.go'
|
|
- '!**/integration/helpers/**'
|
|
- '!**/integration/proxy/proxy_helpers.go'
|
|
- '!**/integrations/access/email/testlib/**'
|
|
- '!**/integrations/access/datadog/testlib/**'
|
|
- '!**/integrations/access/discord/testlib/**'
|
|
- '!**/integrations/access/jira/testlib/**'
|
|
- '!**/integrations/access/mattermost/testlib/**'
|
|
- '!**/integrations/access/msteams/testlib/**'
|
|
- '!**/integrations/access/opsgenie/testlib/**'
|
|
- '!**/integrations/access/pagerduty/testlib/**'
|
|
- '!**/integrations/access/servicenow/testlib/**'
|
|
- '!**/integrations/access/slack/testlib/**'
|
|
- '!**/integrations/lib/testing/integration/accessrequestsuite.go'
|
|
- '!**/integrations/lib/testing/integration/app.go'
|
|
- '!**/integrations/lib/testing/integration/authhelper.go'
|
|
- '!**/integrations/lib/testing/integration/suite.go'
|
|
- '!**/integrations/operator/controllers/resources/testlib/**'
|
|
- '!**/tool/teleport/testenv/**'
|
|
deny:
|
|
- pkg: github.com/stretchr/testify
|
|
desc: 'testify should not be imported outside of test code'
|
|
# Prevent importing integration test helpers in production code.
|
|
integration:
|
|
files:
|
|
# Tests can do anything
|
|
- '!$test'
|
|
- '!**/integration/**'
|
|
- '!**/e/tests/**'
|
|
- '!**/integrations/operator/controllers/resources/testlib/**'
|
|
deny:
|
|
- pkg: github.com/gravitational/teleport/integration
|
|
desc: 'integration test should not be imported outside of intergation tests'
|
|
allow:
|
|
# integrations is explicitly allowed becuase the deny rule above
|
|
# will match both integration and integrations, however only
|
|
# integration should be denied.
|
|
- github.com/gravitational/teleport/integrations
|
|
list-mode: lax
|
|
# Prevent importing testing in production code.
|
|
testing:
|
|
files:
|
|
# Tests can do anything
|
|
- '!$test'
|
|
# Exceptions
|
|
# Remove these once they are complaint.
|
|
- '!**/api/testhelpers/**'
|
|
- '!**/e/lib/auth/ssotestlib.go'
|
|
- '!**/e/lib/aws/identitycenter/test/**'
|
|
- '!**/e/lib/devicetrust/testenv/**'
|
|
- '!**/e/lib/devicetrust/storage/storage.go'
|
|
- '!**/e/lib/idp/saml/testenv/**'
|
|
- '!**/e/lib/jamf/testenv/**'
|
|
- '!**/e/lib/okta/api/oktaapitest/**'
|
|
- '!**/e/lib/operatortest/**'
|
|
- '!**/e/tests/**'
|
|
- '!**/integration/**'
|
|
- '!**/integrations/access/email/testlib/**'
|
|
- '!**/integrations/access/msteams/testlib/**'
|
|
- '!**/integrations/access/slack/testlib/**'
|
|
- '!**/integrations/operator/controllers/resources/testlib/**'
|
|
- '!**/lib/auth/helpers.go'
|
|
- '!**/lib/auth/keystore/testhelpers.go'
|
|
- '!**/lib/auth/test/**'
|
|
- '!**/lib/automaticupgrades/basichttp/servermock.go'
|
|
- '!**/lib/backend/test/**'
|
|
- '!**/lib/cryptosuites/precompute.go'
|
|
- '!**/lib/cryptosuites/internal/rsa/rsa.go'
|
|
- '!**/lib/events/test/**'
|
|
- '!**/lib/events/athena/test.go'
|
|
- '!**/lib/fixtures/**'
|
|
- '!**/lib/kube/proxy/utils_testing.go'
|
|
- '!**/lib/modules/test.go'
|
|
- '!**/lib/service/service.go'
|
|
- '!**/lib/services/local/users.go'
|
|
- '!**/lib/services/suite/**'
|
|
- '!**/lib/srv/mock.go'
|
|
- '!**/lib/srv/db/redis/test.go'
|
|
- '!**/lib/teleterm/gatewaytest/**'
|
|
- '!**/lib/utils/cli.go'
|
|
- '!**/lib/utils/testhelpers.go'
|
|
- '!**/lib/utils/testutils/**'
|
|
- '!**/tool/teleport/testenv/**'
|
|
deny:
|
|
- pkg: testing
|
|
desc: 'testing should not be imported outside of tests'
|
|
# Prevent importing internal packages in client tools or packages containing
|
|
# common interfaces consumed by them that are known to bloat binaries or break builds
|
|
# because they only support a single platform.
|
|
client-tools:
|
|
files:
|
|
# Tests can do anything
|
|
- '!$test'
|
|
- '**/tool/tbot/**'
|
|
- '**/lib/tbot/**'
|
|
- '**/tool/tctl/**'
|
|
- '**/tool/tsh/**'
|
|
- '**/lib/client/**'
|
|
- '**/lib/services/**'
|
|
- '**/lib/service/servicecfg/**'
|
|
- '**/lib/reversetunnelclient/**'
|
|
- '**/lib/auth/authclient/**'
|
|
- '**/lib/cloud/imds/**'
|
|
allow:
|
|
- github.com/gravitational/teleport/lib/cloud/imds
|
|
deny:
|
|
- pkg: github.com/gravitational/teleport/lib/auth$
|
|
desc: 'lib/auth should not be imported to prevent increasing binary size, prefer lib/auth/authclient instead'
|
|
- pkg: github.com/gravitational/teleport/lib/cloud
|
|
desc: 'lib/cloud should not be imported to prevent increasing binary size'
|
|
- pkg: github.com/gravitational/teleport/lib/srv$
|
|
desc: 'lib/srv prevents client tools from build on non-linux platforms'
|
|
- pkg: github.com/gravitational/teleport/lib/web$
|
|
desc: 'lib/web should not be imported to prevent increasing binary size'
|
|
list-mode: lax
|
|
# Prevent importing dependencies that require CGO into tools that are
|
|
# meant to be built with CGO_ENABLED=0
|
|
cgo:
|
|
files:
|
|
# Tests can do anything
|
|
- '!$test'
|
|
- '**/tool/tbot/**'
|
|
- '**/lib/client/**'
|
|
- '!**/lib/integrations/**'
|
|
- '**/integrations/**'
|
|
deny:
|
|
- pkg: github.com/gravitational/teleport/lib/bpf
|
|
desc: '"lib/bpf" requires CGO'
|
|
- pkg: github.com/gravitational/teleport/lib/backend/lite
|
|
desc: '"lib/backend/lite" requires CGO'
|
|
- pkg: github.com/gravitational/teleport/lib/cgroup
|
|
desc: '"lib/cgroup" requires CGO'
|
|
- pkg: github.com/gravitational/teleport/lib/config
|
|
desc: '"lib/config" requires CGO via "lib/pam" and "lib/backend/lite"'
|
|
- pkg: github.com/gravitational/teleport/lib/desktop/rdp/rdpclient
|
|
desc: '"lib/desktop/rdp/rdpclient" requires CGO'
|
|
- pkg: github.com/gravitational/teleport/lib/devicetrust/authn$
|
|
desc: '"lib/devicetrust/authn" requires CGO on darwin'
|
|
- pkg: github.com/gravitational/teleport/lib/devicetrust/enroll
|
|
desc: '"lib/devicetrust/enroll" requires CGO on darwin'
|
|
- pkg: github.com/gravitational/teleport/lib/devicetrust/native
|
|
desc: '"lib/devicetrust/native" requires CGO on darwin'
|
|
- pkg: github.com/gravitational/teleport/lib/inventory/metadata
|
|
desc: '"lib/inventory/metadata" requires CGO'
|
|
- pkg: github.com/gravitational/teleport/lib/pam
|
|
desc: '"lib/pam" requires CGO'
|
|
- pkg: github.com/gravitational/teleport/lib/srv/uacc
|
|
desc: '"lib/srv/uacc" requires CGO'
|
|
- pkg: github.com/gravitational/teleport/lib/system/signal
|
|
desc: '"lib/system/signal" requires CGO'
|
|
- pkg: github.com/gravitational/teleport/lib/vnet/daemon
|
|
desc: '"vnet/daemon" requires CGO'
|
|
# Prevent importing go-cmp into production code. From the go-cmp docs:
|
|
# > It is intended to only be used in tests, as performance is not a goal
|
|
# > and it may panic if it cannot compare the values. Its propensity towards
|
|
# > panicking means that its unsuitable for production environments where a
|
|
# > spurious panic may be fatal.
|
|
go-cmp:
|
|
files:
|
|
# Tests can do anything
|
|
- '!$test'
|
|
# Various test helpers defined outside _test.go files are allowed
|
|
- '!**/integration/helpers/**'
|
|
- '!**/integrations/operator/controllers/resources/testlib/**'
|
|
- '!**/lib/auth/test/**'
|
|
- '!**/lib/services/suite/**'
|
|
# Non-compliant legacy code. These should be converted to compare by another mechanism
|
|
# and be removed from this list in the future. Use caution before adding any additional
|
|
# exclusions to this list.
|
|
- '!**/e/lib/accesslist/equal.go'
|
|
- '!**/e/lib/auth/saml.go'
|
|
- '!**lib/services/authority.go'
|
|
- '!**lib/services/compare.go'
|
|
- '!**/lib/services/local/access_list.go'
|
|
- '!**/lib/services/local/users.go'
|
|
- '!**/lib/services/server.go'
|
|
- '!**/lib/services/user.go'
|
|
deny:
|
|
- pkg: github.com/google/go-cmp/cmp
|
|
desc: '"github.com/google/go-cmp/cmp" should only be used in tests'
|
|
- pkg: github.com/google/go-cmp/cmp/cmpopts
|
|
desc: '"github.com/google/go-cmp/cmp/cmpopts" should only be used in tests'
|
|
errorlint:
|
|
comparison: true
|
|
asserts: true
|
|
errorf: true
|
|
gci:
|
|
sections:
|
|
- standard # Standard section: captures all standard packages.
|
|
- default # Default section: contains all imports that could not be matched to another section type.
|
|
- prefix(github.com/gravitational/teleport) # Custom section: groups all imports with the specified Prefix.
|
|
- prefix(github.com/gravitational/teleport/integrations/terraform,github.com/gravitational/teleport/integrations/event-handler)
|
|
skip-generated: true # Skip generated files.
|
|
custom-order: true # Required for "sections" to take effect.
|
|
misspell:
|
|
locale: US
|
|
nolintlint:
|
|
allow-unused: true # Enabled because of conditional builds / build tags.
|
|
require-explanation: true
|
|
require-specific: true
|
|
revive:
|
|
rules:
|
|
- name: unused-parameter
|
|
disabled: true
|
|
sloglint:
|
|
context: all
|
|
key-naming-case: snake
|
|
static-msg: true
|
|
forbidden-keys:
|
|
- level
|
|
- msg
|
|
- source
|
|
- time
|
|
testifylint:
|
|
disable-all: true
|
|
enable:
|
|
- bool-compare
|
|
- compares
|
|
- empty
|
|
- error-is-as
|
|
- error-nil
|
|
- expected-actual
|
|
- float-compare
|
|
- len
|
|
- suite-extra-assert-call
|
|
- suite-thelper
|
|
forbidigo:
|
|
forbid:
|
|
- p: '^rsa\.GenerateKey$'
|
|
msg: 'generating RSA keys is slow, use lib/cryptosuites to generate an appropriate key type'
|
|
|
|
run:
|
|
go: '1.23'
|
|
build-tags: []
|
|
timeout: 15m
|