Skip to content

Commit c449507

Browse files
chore: more lint (#387)
Try to slowly converge towards what exists on argo-cd. Signed-off-by: Blake Pettersson <[email protected]>
1 parent 5c48c01 commit c449507

File tree

23 files changed

+200
-123
lines changed

23 files changed

+200
-123
lines changed

.golangci.yml

Lines changed: 88 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,29 @@ formatters:
99

1010
issues:
1111
max-issues-per-linter: 0
12+
1213
max-same-issues: 0
1314

1415
linters:
1516
enable:
1617
- errorlint
18+
- exptostd
19+
- gocritic
1720
- gomodguard
21+
- govet
22+
- importas
1823
- misspell
19-
- testifylint
24+
- staticcheck
2025
- thelper
26+
- tparallel
27+
- unparam
2128
- usestdlibvars
29+
- usetesting
2230
- whitespace
2331
disable:
24-
- staticcheck
32+
- perfsprint # Performance optimizations cause many changes
33+
- testifylint # Test assertion order changes cause large diffs
34+
- revive # Too many style changes (265+ issues)
2535

2636
exclusions:
2737
rules:
@@ -39,12 +49,23 @@ linters:
3949

4050
settings:
4151
gocritic:
52+
enable-all: true
53+
# Most of these should probably be enabled one-by-one.
4254
disabled-checks:
4355
- appendAssign
44-
- assignOp
56+
- appendCombine # Leave disabled, multi-line assigns can be more readable.
57+
- assignOp # Leave disabled, assign operations can be more confusing than helpful.
58+
- commentedOutCode
59+
- deferInLoop
4560
- exitAfterDefer
46-
- mapKey
47-
- typeSwitchVar
61+
- exposedSyncMutex
62+
- hugeParam
63+
- importShadow
64+
- paramTypeCombine # Leave disabled, there are too many failures to be worth fixing.
65+
- rangeValCopy
66+
- tooManyResultsChecker
67+
- unnamedResult
68+
- whyNoLint
4869

4970
gomodguard:
5071
blocked:
@@ -62,24 +83,38 @@ linters:
6283
recommendations:
6384
- errors
6485

86+
govet:
87+
disable:
88+
- fieldalignment
89+
- shadow
90+
enable-all: true
91+
6592
importas:
6693
alias:
6794
- pkg: github.com/golang-jwt/jwt/v5
6895
alias: jwtgo
96+
6997
- pkg: k8s.io/api/apps/v1
7098
alias: appsv1
99+
71100
- pkg: k8s.io/api/core/v1
72101
alias: corev1
102+
73103
- pkg: k8s.io/api/rbac/v1
74104
alias: rbacv1
105+
75106
- pkg: k8s.io/apimachinery/pkg/api/errors
76107
alias: apierrors
108+
77109
- pkg: k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1
78110
alias: apiextensionsv1
111+
79112
- pkg: k8s.io/apimachinery/pkg/apis/meta/v1
80113
alias: metav1
114+
81115
- pkg: k8s.io/client-go/informers/core/v1
82116
alias: informersv1
117+
83118
- pkg: errors
84119
alias: stderrors
85120

@@ -102,52 +137,93 @@ linters:
102137
# https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md
103138
rules:
104139
- name: bool-literal-in-expr
140+
105141
- name: blank-imports
106142
disabled: true
143+
107144
- name: context-as-argument
108145
arguments:
109146
- allowTypesBefore: '*testing.T,testing.TB'
147+
110148
- name: context-keys-type
111149
disabled: true
150+
112151
- name: dot-imports
113152
disabled: true
153+
114154
- name: duplicated-imports
155+
156+
- name: early-return
157+
arguments:
158+
- preserveScope
159+
115160
- name: empty-block
116161
disabled: true
162+
117163
- name: error-naming
118164
disabled: true
165+
119166
- name: error-return
167+
120168
- name: error-strings
121169
disabled: true
170+
122171
- name: errorf
172+
123173
- name: identical-branches
174+
124175
- name: if-return
176+
125177
- name: increment-decrement
178+
126179
- name: indent-error-flow
127180
arguments:
128181
- preserveScope
182+
129183
- name: modifies-parameter
184+
130185
- name: optimize-operands-order
186+
131187
- name: range
188+
132189
- name: receiver-naming
190+
133191
- name: redefines-builtin-id
134192
disabled: true
193+
135194
- name: redundant-import-alias
195+
136196
- name: superfluous-else
137197
arguments:
138198
- preserveScope
199+
139200
- name: time-equal
201+
140202
- name: time-naming
141203
disabled: true
204+
142205
- name: unexported-return
143206
disabled: true
207+
144208
- name: unnecessary-stmt
209+
145210
- name: unreachable-code
211+
146212
- name: unused-parameter
213+
147214
- name: use-any
215+
148216
- name: useless-break
217+
149218
- name: var-declaration
150219

220+
- name: var-naming
221+
arguments:
222+
- - ID
223+
- - VM
224+
- - skipPackageNameChecks: true
225+
upperCaseConst: true
226+
151227
staticcheck:
152228
checks:
153229
- all
@@ -157,17 +233,18 @@ linters:
157233

158234
testifylint:
159235
enable-all: true
236+
160237
disable:
161238
- go-require
162-
- expected-actual
163-
- require-error
164-
- len
165-
- empty
166-
- error-nil
167-
- bool-compare
239+
240+
unused:
241+
field-writes-are-uses: false
242+
exported-fields-are-used: false
168243

169244
usetesting:
170245
os-mkdir-temp: false
246+
171247
output:
172248
show-stats: false
249+
173250
version: "2"

examples/certmanager/cli/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"github.com/argoproj/notifications-engine/pkg/cmd"
99
"github.com/argoproj/notifications-engine/pkg/services"
1010

11-
v1 "k8s.io/api/core/v1"
11+
corev1 "k8s.io/api/core/v1"
1212
"k8s.io/apimachinery/pkg/runtime/schema"
1313

1414
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
@@ -20,7 +20,7 @@ func main() {
2020
}, api.Settings{
2121
ConfigMapName: "cert-manager-notifications-cm",
2222
SecretName: "cert-manager-notifications-secret",
23-
InitGetVars: func(cfg *api.Config, configMap *v1.ConfigMap, secret *v1.Secret) (api.GetVars, error) {
23+
InitGetVars: func(cfg *api.Config, configMap *corev1.ConfigMap, secret *corev1.Secret) (api.GetVars, error) {
2424
return func(obj map[string]interface{}, dest services.Destination) map[string]interface{} {
2525
return map[string]interface{}{"cert": obj}
2626
}, nil

examples/certmanager/controller/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/argoproj/notifications-engine/pkg/services"
1313

1414
"github.com/spf13/cobra"
15-
v1 "k8s.io/api/core/v1"
15+
corev1 "k8s.io/api/core/v1"
1616
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1717
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
1818
"k8s.io/apimachinery/pkg/runtime"
@@ -59,7 +59,7 @@ func main() {
5959
notificationsFactory := api.NewFactory(api.Settings{
6060
ConfigMapName: "cert-manager-notifications-cm",
6161
SecretName: "cert-manager-notifications-secret",
62-
InitGetVars: func(cfg *api.Config, configMap *v1.ConfigMap, secret *v1.Secret) (api.GetVars, error) {
62+
InitGetVars: func(cfg *api.Config, configMap *corev1.ConfigMap, secret *corev1.Secret) (api.GetVars, error) {
6363
return func(obj map[string]interface{}, dest services.Destination) map[string]interface{} {
6464
return map[string]interface{}{"cert": obj}
6565
}, nil

pkg/api/config.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111

1212
log "github.com/sirupsen/logrus"
1313
yaml3 "gopkg.in/yaml.v3"
14-
v1 "k8s.io/api/core/v1"
14+
corev1 "k8s.io/api/core/v1"
1515
"k8s.io/apimachinery/pkg/fields"
1616
"sigs.k8s.io/yaml"
1717
)
@@ -57,7 +57,7 @@ func (cfg Config) GetGlobalDestinations(labels map[string]string) services.Desti
5757
return dests
5858
}
5959

60-
var keyPattern = regexp.MustCompile(`[$][\w-_]+`)
60+
var keyPattern = regexp.MustCompile(`[$][\w-]+`)
6161

6262
// replaceStringSecret checks if given string is a secret key reference ( starts with $ ) and returns corresponding value from provided map
6363
func replaceStringSecret(val string, secretValues map[string][]byte) string {
@@ -72,7 +72,7 @@ func replaceStringSecret(val string, secretValues map[string][]byte) string {
7272
}
7373

7474
// ParseConfig retrieves Config from given ConfigMap and Secret
75-
func ParseConfig(configMap *v1.ConfigMap, secret *v1.Secret) (*Config, error) {
75+
func ParseConfig(configMap *corev1.ConfigMap, secret *corev1.Secret) (*Config, error) {
7676
cfg := Config{
7777
Services: map[string]ServiceFactory{},
7878
Triggers: map[string][]triggers.Condition{},
@@ -106,11 +106,12 @@ func ParseConfig(configMap *v1.ConfigMap, secret *v1.Secret) (*Config, error) {
106106
name := ""
107107
serviceType := ""
108108
parts := strings.Split(k, ".")
109-
if len(parts) == 3 {
109+
switch len(parts) {
110+
case 3:
110111
serviceType, name = parts[1], parts[2]
111-
} else if len(parts) == 2 {
112+
case 2:
112113
serviceType, name = parts[1], parts[1]
113-
} else {
114+
default:
114115
return nil, fmt.Errorf("invalid service key; expected 'service.<type>(.<name>)' but got '%s'", k)
115116
}
116117

@@ -141,7 +142,7 @@ func ParseConfig(configMap *v1.ConfigMap, secret *v1.Secret) (*Config, error) {
141142
return &cfg, nil
142143
}
143144

144-
func replaceServiceConfigSecrets(inputYaml string, secret *v1.Secret) ([]byte, error) {
145+
func replaceServiceConfigSecrets(inputYaml string, secret *corev1.Secret) ([]byte, error) {
145146
var node yaml3.Node
146147
err := yaml3.Unmarshal([]byte(inputYaml), &node)
147148
if err != nil {

pkg/api/config_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ import (
77
"github.com/argoproj/notifications-engine/pkg/subscriptions"
88

99
"github.com/stretchr/testify/assert"
10-
v1 "k8s.io/api/core/v1"
10+
corev1 "k8s.io/api/core/v1"
1111
"k8s.io/apimachinery/pkg/labels"
1212
)
1313

1414
var (
15-
emptySecret = &v1.Secret{Data: map[string][]byte{}}
15+
emptySecret = &corev1.Secret{Data: map[string][]byte{}}
1616
)
1717

1818
func TestParseConfig_Services(t *testing.T) {
19-
cfg, err := ParseConfig(&v1.ConfigMap{Data: map[string]string{
19+
cfg, err := ParseConfig(&corev1.ConfigMap{Data: map[string]string{
2020
"service.slack": `
2121
token: my-token
2222
`}}, emptySecret)
@@ -29,7 +29,7 @@ token: my-token
2929
}
3030

3131
func TestParseConfig_Templates(t *testing.T) {
32-
cfg, err := ParseConfig(&v1.ConfigMap{Data: map[string]string{
32+
cfg, err := ParseConfig(&corev1.ConfigMap{Data: map[string]string{
3333
"template.my-template": `
3434
message: hello world
3535
`}}, emptySecret)
@@ -44,7 +44,7 @@ message: hello world
4444
}
4545

4646
func TestParseConfig_DefaultServiceTriggers(t *testing.T) {
47-
cfg, err := ParseConfig(&v1.ConfigMap{Data: map[string]string{
47+
cfg, err := ParseConfig(&corev1.ConfigMap{Data: map[string]string{
4848
"defaultTriggers.slack": `
4949
- trigger-a
5050
- trigger-b
@@ -85,7 +85,7 @@ headers:
8585
value: Bearer $secret-value
8686
`
8787

88-
secrets := v1.Secret{
88+
secrets := corev1.Secret{
8989
Data: map[string][]byte{
9090
"endpoint": []byte("https://example.com"),
9191
"secret-value": []byte("token"),
@@ -111,7 +111,7 @@ apiKeys:
111111
second-team: $second-team-secret
112112
`
113113

114-
secrets := v1.Secret{
114+
secrets := corev1.Secret{
115115
Data: map[string][]byte{
116116
"first-team-secret": []byte("first-token"),
117117
"second-team-secret": []byte("second-token"),
@@ -136,7 +136,7 @@ privateKey: $github-privateKey
136136
installationID: 67890
137137
`
138138

139-
secrets := v1.Secret{
139+
secrets := corev1.Secret{
140140
Data: map[string][]byte{
141141
"github-privateKey": []byte("A\nValue\nOn\nMultiple\nLines"),
142142
},
@@ -159,7 +159,7 @@ installationID: 67890
159159
}
160160

161161
func TestParseConfig_DefaultTriggers(t *testing.T) {
162-
cfg, err := ParseConfig(&v1.ConfigMap{
162+
cfg, err := ParseConfig(&corev1.ConfigMap{
163163
Data: map[string]string{
164164
"defaultTriggers": `[trigger1, trigger2]`,
165165
},
@@ -172,7 +172,7 @@ func TestParseConfig_DefaultTriggers(t *testing.T) {
172172
}
173173

174174
func TestParseConfig_Subscriptions(t *testing.T) {
175-
cfg, err := ParseConfig(&v1.ConfigMap{
175+
cfg, err := ParseConfig(&corev1.ConfigMap{
176176
Data: map[string]string{
177177
"subscriptions": `
178178
- selector: test=true

0 commit comments

Comments
 (0)