-
Notifications
You must be signed in to change notification settings - Fork 578
/
.golangci.yml
327 lines (325 loc) · 10.7 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
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
linters:
disable-all: true
enable:
- asasalint
- asciicheck
- bidichk
- bodyclose
- containedctx
- dogsled
- dupword
- durationcheck
- errcheck
- errchkjson
- exportloopref
- gci
- ginkgolinter
- goconst
- gocritic
- godot
- gofmt
- goimports
- goprintffuncname
- gosec
- gosimple
- govet
- importas
- ineffassign
- loggercheck
- misspell
- nakedret
- nilerr
- noctx
- nolintlint
- nosprintfhostport
- prealloc
- predeclared
- revive
- rowserrcheck
- staticcheck
- stylecheck
- thelper
- typecheck
- unconvert
- unparam
- unused
- usestdlibvars
- whitespace
linters-settings:
gci:
sections:
- standard
- default
- prefix(sigs.k8s.io/cluster-api)
ginkgolinter:
forbid-focus-container: true
suppress-len-assertion: true # Suppress the wrong length assertion warning.
suppress-nil-assertion: false # Suppress the wrong nil assertion warning.
suppress-err-assertion: true # Suppress the wrong error assertion warning.
gocritic:
enabled-tags:
- diagnostic
- experimental
- performance
disabled-checks:
- appendAssign
- dupImport # https://github.com/go-critic/go-critic/issues/845
- evalOrder
- ifElseChain
- octalLiteral
- regexpSimplify
- sloppyReassign
- truncateCmp
- typeDefFirst
- unnamedResult
- unnecessaryDefer
- whyNoLint
- wrapperFunc
- rangeValCopy
- hugeParam
- filepathJoin
- emptyStringTest
godot:
# declarations - for top level declaration comments (default);
# toplevel - for top level comments;
# all - for all comments.
scope: toplevel
exclude:
- '^ \+.*'
- '^ ANCHOR.*'
revive:
rules:
# The following rules are recommended https://github.com/mgechev/revive#recommended-configuration
- 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: unreachable-code
- name: redefines-builtin-id
#
# Rules in addition to the recommended configuration above.
#
- name: bool-literal-in-expr
- name: constant-logical-expr
goconst:
ignore-tests: true
gosec:
excludes:
- G307 # Deferring unsafe method "Close" on type "\*os.File"
- G108 # Profiling endpoint is automatically exposed on /debug/pprof
importas:
no-unaliased: false
alias:
- pkg: k8s.io/api/core/v1
alias: corev1
- pkg: k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1
alias: apiextensionsv1
- pkg: k8s.io/apimachinery/pkg/apis/meta/v1
alias: metav1
- pkg: k8s.io/apimachinery/pkg/util/errors
alias: kerrors
- pkg: sigs.k8s.io/controller-runtime/pkg/conversion
alias: ctrlconversion
- pkg: sigs.k8s.io/cluster-api/util/conversion
alias: utilconversion
- pkg: k8s.io/apimachinery/pkg/conversion
alias: apiconversion
- pkg: sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2
alias: infrav1
- pkg: sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta1
alias: infrav1beta1
- pkg: sigs.k8s.io/cluster-api-provider-aws/v2/exp/api/v1beta1
alias: expinfrav1beta1
- pkg: sigs.k8s.io/cluster-api-provider-aws/v2/exp/api/v1beta2
alias: expinfrav1
- pkg: k8s.io/client-go/kubernetes/scheme
alias: cgscheme
- pkg: k8s.io/client-go/tools/record
alias: cgrecord
- pkg: sigs.k8s.io/cluster-api-provider-aws/v2/bootstrap/eks/api/v1beta1
alias: eksbootstrapv1beta1
- pkg: sigs.k8s.io/cluster-api-provider-aws/v2/bootstrap/eks/api/v1beta2
alias: eksbootstrapv1
- pkg: sigs.k8s.io/cluster-api-provider-aws/v2/controlplane/eks/api/v1beta1
alias: ekscontrolplanev1beta1
- pkg: sigs.k8s.io/cluster-api-provider-aws/v2/controlplane/eks/api/v1beta2
alias: ekscontrolplanev1
- pkg: "sigs.k8s.io/cluster-api-provider-aws/v2/bootstrap/eks/controllers"
alias: eksbootstrapcontrollers
- pkg: "sigs.k8s.io/cluster-api-provider-aws/v2/controlplane/eks/controllers"
alias: ekscontrolplanecontrollers
- pkg: "sigs.k8s.io/cluster-api-provider-aws/v2/exp/controllers"
alias: expcontrollers
- pkg: "k8s.io/apimachinery/pkg/runtime"
alias: runtime
- pkg: "k8s.io/apimachinery/pkg/runtime/serializer"
alias: runtimeserializer
- pkg: "k8s.io/apimachinery/pkg/runtime/serializer/yaml"
alias: yamlserializer
- pkg: "sigs.k8s.io/cluster-api/api/v1beta1"
alias: clusterv1
- pkg: "sigs.k8s.io/cluster-api/util/defaulting"
alias: utildefaulting
- pkg: sigs.k8s.io/controller-runtime
alias: ctrl
- pkg: "k8s.io/apimachinery/pkg/api/errors"
alias: apierrors
- pkg: "sigs.k8s.io/controller-runtime/pkg/log"
alias: logf
- pkg: "github.com/google/gofuzz"
alias: fuzz
- pkg: "sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/logs"
alias: awslogs
- pkg: "sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/metrics"
alias: awsmetrics
- pkg: "sigs.k8s.io/cluster-api/errors"
alias: capierrors
- pkg: "github.com/aws/aws-sdk-go/aws/client"
alias: awsclient
- pkg: "github.com/aws/amazon-vpc-cni-k8s/pkg/apis/crd/v1alpha1"
alias: amazoncni
- pkg: "github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi"
alias: rgapi
- pkg: "crypto/rand"
alias: crand
- pkg: "sigs.k8s.io/controller-runtime/pkg/client"
alias: crclient
- pkg: "k8s.io/apimachinery/pkg/types"
alias: apimachinerytypes
- pkg: "sigs.k8s.io/cluster-api/exp/api/v1beta1"
alias: expclusterv1
nolintlint:
allow-unused: false
allow-leading-space: false
require-specific: true
staticcheck:
go: "1.22"
stylecheck:
go: "1.22"
depguard:
rules:
main:
deny:
- pkg: "io/ioutil"
desc: "ioutil is deprecated starting with Go 1.16"
issues:
max-same-issues: 0
max-issues-per-linter: 0
# We are disabling default golangci exclusions because we want to help reviewers to focus on reviewing the most relevant
# changes in PRs and avoid nitpicking.
exclude-use-default: false
# List of regexps of issue texts to exclude, empty list by default.
exclude:
- (Expect directory permissions to be 0750 or less|Expect file permissions to be 0600 or less)
- "exported: (func|type) name will be used as (.+) by other packages, and that stutters; consider calling this (.+)"
- (G104|G107|G404|G505|ST1000)
- "G108: Profiling endpoint is automatically exposed on /debug/pprof"
# Exclude noctx error for calling http.Get directly.
# See https://pkg.go.dev/github.com/sonatard/noctx#readme-how-to-fix for reasons it breaks and ways to fix it.
# This exclusion should be removed if the decision is made to fix the error.
- "net/http.Get must not be called"
exclude-rules:
# Exclude revive's exported for certain packages and code, e.g. tests and fake.
- linters:
- revive
text: "exported: exported method .*\\.(Reconcile|SetupWithManager|SetupWebhookWithManager) should have comment or be unexported"
- linters:
- errcheck
text: Error return value of .((os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*print(f|ln)?|os\.(Un)?Setenv). is not checked
# Exclude some packages or code to require comments, for example test code, or fake clients.
- linters:
- revive
text: exported (method|function|type|const) (.+) should have comment or be unexported
source: (func|type).*Fake.*
- linters:
- revive
text: exported (method|function|type|const) (.+) should have comment or be unexported
path: fake_\.go
- linters:
- revive
text: exported (method|function|type|const) (.+) should have comment or be unexported
path: .*test/(providers|framework|e2e).*.go
- linters:
- errcheck
text: Error return value is not checked
path: _test\.go
- linters:
- errcheck
text: Error return value of (.+) is not checked
path: _test\.go
- linters:
- gosec
text: "G108: Profiling endpoint is automatically exposed on /debug/pprof"
- linters:
- godot
text: "Comment should end in a period"
path: "(.*)/(v1beta1|v1beta2)/(.*)types.go"
- linters:
- errcheck
text: Error return value of .((os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*print(f|ln)?|os\.(Un)?Setenv). is not checked
# With Go 1.16, the new embed directive can be used with an un-named import,
# revive (previously, golint) only allows these to be imported in a main.go, which wouldn't work for us.
# This directive allows the embed package to be imported with an underscore everywhere.
- linters:
- revive
source: _ "embed"
# This directive allows the variable in defaults.go files to have underscore
- linters:
- revive
text: "var-naming: don't use underscores in Go names; func (.+) should be (.+)"
path: .*/defaults.go
# These directives allow the mock and gc packages to be imported with an underscore everywhere.
- linters:
- revive
text: "var-naming: don't use an underscore in package name"
path: .*/.*(mock|gc_).*/.+\.go
# Disable unparam "always receives" which might not be really
# useful when building libraries.
- linters:
- unparam
text: always receives
# Dot imports for gomega or ginkgo are allowed
# within test files.
- path: _test\.go
text: should not use dot imports
- path: (framework|e2e)/.*.go
text: should not use dot imports
- path: _test\.go
text: cyclomatic complexity
- linters:
- unparam
text: (.+) - (`t`|`g`) is unused
- path: _test\.go
text: cyclomatic complexity
# Append should be able to assign to a different var/slice.
- linters:
- gocritic
text: "appendAssign: append result not assigned to the same slice"
run:
timeout: 10m
build-tags:
- tools
- e2e
skip-files:
- "zz_generated.*\\.go$"
- ".*conversion.*\\.go$"
skip-dirs:
- third_party
allow-parallel-runners: true