-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
.golangci.yml
278 lines (274 loc) · 10.6 KB
/
.golangci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
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"
- linters: [govet]
text: "non-constant format string in call to github.com/gravitational/trace."
exclude-use-default: true
max-same-issues: 0
max-issues-per-linter: 0
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/siddontang/go-log/log
desc: 'use "github.com/sirupsen/logrus" instead'
- pkg: github.com/siddontang/go/log
desc: 'use "github.com/sirupsen/logrus" 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 logrus from being imported by api and e. Once everything in teleport has been converted
# to use log/slog this should be moved into the main block above.
logrus:
files:
- '**/api/**'
- '**/e/**'
deny:
- pkg: github.com/sirupsen/logrus
desc: 'use "log/slog" instead'
# 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'
output:
uniq-by-line: false
run:
go: '1.23'
build-tags: []
timeout: 15m