Skip to content

Commit d291579

Browse files
authored
Enable golangci-lint (#241)
1 parent 04175c6 commit d291579

37 files changed

+1228
-610
lines changed

.github/workflows/tests.yml

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
build:
1212
name: Build
1313
runs-on: ubuntu-latest
14-
timeout-minutes: 5
14+
timeout-minutes: 10
1515

1616
steps:
1717

@@ -24,11 +24,10 @@ jobs:
2424
go-version-file: 'go.mod'
2525
id: go
2626

27-
# TODO: Add linting (in upcoming PR)
28-
# - name: Run linters
29-
# uses: golangci/golangci-lint-action@0ad9a0988b3973e851ab0a07adf248ec2e100376 # v3.3.1
30-
# with:
31-
# version: latest
27+
- name: Run linters
28+
uses: golangci/golangci-lint-action@08e2f20817b15149a52b5b3ebe7de50aff2ba8c5 # v3.4.0
29+
with:
30+
version: v1.51.2
3231

3332
- name: Generate
3433
run: make generate

.golangci.yml

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
issues:
2+
exclude-rules:
3+
- linters:
4+
- paralleltest
5+
text: "Function TestAcc"
6+
- linters:
7+
- tparallel
8+
text: "TestAcc"
9+
- linters:
10+
- unparam
11+
text: "always receives"
12+
- path: _test\.go
13+
linters:
14+
- contextcheck
15+
max-per-linter: 0
16+
max-same-issues: 0
17+
18+
linters:
19+
disable-all: true
20+
enable:
21+
- asasalint
22+
- asciicheck
23+
- containedctx
24+
- contextcheck
25+
- dogsled
26+
- durationcheck
27+
- errcheck
28+
- errname
29+
- errorlint
30+
- exportloopref
31+
- goconst
32+
- gocritic
33+
- gofmt
34+
- gomnd
35+
- gosimple
36+
- govet
37+
- ineffassign
38+
- makezero
39+
- misspell
40+
- nakedret
41+
- nilerr
42+
- nolintlint
43+
- paralleltest
44+
- predeclared
45+
- staticcheck
46+
- stylecheck
47+
- tenv
48+
- tparallel
49+
- typecheck
50+
- unconvert
51+
- unparam
52+
- unused
53+
- vet
54+
- vetshadow
55+
- whitespace
56+
- wsl
57+
58+
linters-settings:
59+
dogsled:
60+
max-blank-identifiers: 3
61+
errcheck:
62+
ignore: github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema:ForceNew|Set,fmt:.*,io:Close
63+
errorlint:
64+
errorf: false
65+
goconst:
66+
ignore-tests: true
67+
min-occurrences: 6
68+
gocritic:
69+
enabled-tags:
70+
- diagnostic
71+
disabled-tags:
72+
- style
73+
- performance
74+
- experimental
75+
- opinionated
76+
gomnd:
77+
settings:
78+
mnd:
79+
checks:
80+
- argument
81+
ignored-functions:
82+
# Terraform Plugin SDK
83+
- resource.Retry
84+
- schema.DefaultTimeout
85+
- validation.*
86+
# Terraform Plugin Framework
87+
- int64validator.*
88+
- listvalidator.*
89+
- stringvalidator.*
90+
- SetDefaultCreateTimeout
91+
- SetDefaultReadTimeout
92+
- SetDefaultUpdateTimeout
93+
- SetDefaultDeleteTimeout
94+
# Go
95+
- make
96+
- strconv.FormatFloat
97+
- strconv.FormatInt
98+
- strconv.ParseFloat
99+
- strconv.ParseInt
100+
- strings.SplitN
101+
nolintlint:
102+
allow-unused: false
103+
allow-leading-space: false
104+
require-explanation: true
105+
require-specific: true
106+
allow-no-explanation:
107+
- gomnd
108+
- paralleltest
109+
- tparallel
110+
- unparam
111+
predeclared:
112+
ignore: cap,close,copy,delete,len,new
113+
staticcheck:
114+
checks: ["all", "-SA1019"]
115+
stylecheck:
116+
checks: ["all", "-ST1005", "-ST1003"]
117+
118+
run:
119+
timeout: 5m

argocd/features.go

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ type ServerInterface struct {
6363
initialized bool
6464
}
6565

66-
func (p *ServerInterface) initClients() error {
66+
func (p *ServerInterface) initClients(ctx context.Context) error {
6767
if p.initialized {
6868
return nil
6969
}
@@ -74,10 +74,11 @@ func (p *ServerInterface) initClients() error {
7474
defer p.Unlock()
7575

7676
if p.ApiClient == nil {
77-
apiClient, err := initApiClient(d)
77+
apiClient, err := initApiClient(ctx, d)
7878
if err != nil {
7979
return err
8080
}
81+
8182
p.ApiClient = &apiClient
8283
}
8384

@@ -86,6 +87,7 @@ func (p *ServerInterface) initClients() error {
8687
if err != nil {
8788
return err
8889
}
90+
8991
p.ClusterClient = &clusterClient
9092
}
9193

@@ -94,6 +96,7 @@ func (p *ServerInterface) initClients() error {
9496
if err != nil {
9597
return err
9698
}
99+
97100
p.CertificateClient = &certClient
98101
}
99102

@@ -102,6 +105,7 @@ func (p *ServerInterface) initClients() error {
102105
if err != nil {
103106
return err
104107
}
108+
105109
p.ApplicationClient = &applicationClient
106110
}
107111

@@ -110,6 +114,7 @@ func (p *ServerInterface) initClients() error {
110114
if err != nil {
111115
return err
112116
}
117+
113118
p.ProjectClient = &projectClient
114119
}
115120

@@ -118,6 +123,7 @@ func (p *ServerInterface) initClients() error {
118123
if err != nil {
119124
return err
120125
}
126+
121127
p.RepositoryClient = &repositoryClient
122128
}
123129

@@ -126,6 +132,7 @@ func (p *ServerInterface) initClients() error {
126132
if err != nil {
127133
return err
128134
}
135+
129136
p.RepoCredsClient = &repoCredsClient
130137
}
131138

@@ -135,33 +142,39 @@ func (p *ServerInterface) initClients() error {
135142
}
136143
defer io.Close(acCloser)
137144

138-
serverVersionMessage, err := versionClient.Version(context.Background(), &empty.Empty{})
145+
serverVersionMessage, err := versionClient.Version(ctx, &empty.Empty{})
139146
if err != nil {
140147
return err
141148
}
149+
142150
if serverVersionMessage == nil {
143151
return fmt.Errorf("could not get server version information")
144152
}
153+
145154
p.ServerVersionMessage = serverVersionMessage
155+
146156
serverVersion, err := semver.NewVersion(serverVersionMessage.Version)
147157
if err != nil {
148158
return fmt.Errorf("could not parse server semantic version: %s", serverVersionMessage.Version)
149159
}
150-
p.ServerVersion = serverVersion
151160

161+
p.ServerVersion = serverVersion
152162
p.initialized = true
163+
153164
return nil
154165
}
155166

156167
// Checks that a specific feature is available for the current ArgoCD server version.
157168
// 'feature' argument must match one of the predefined feature* constants.
158-
func (p ServerInterface) isFeatureSupported(feature int) (bool, error) {
169+
func (p *ServerInterface) isFeatureSupported(feature int) (bool, error) {
159170
versionConstraint, ok := featureVersionConstraintsMap[feature]
160171
if !ok {
161172
return false, fmt.Errorf("feature constraint is not handled by the provider")
162173
}
174+
163175
if i := versionConstraint.Compare(p.ServerVersion); i == 1 {
164176
return false, nil
165177
}
178+
166179
return true, nil
167180
}

argocd/features_test.go

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ package argocd
22

33
import (
44
"fmt"
5+
"math/rand"
6+
"testing"
7+
58
"github.com/Masterminds/semver"
69
"github.com/argoproj/argo-cd/v2/pkg/apiclient/version"
710
"github.com/stretchr/testify/assert"
8-
"math/rand"
911
"modernc.org/mathutil"
10-
"testing"
1112
)
1213

1314
const (
@@ -16,7 +17,7 @@ const (
1617
semverLess
1718
)
1819

19-
func serverInterfaceTestData(t *testing.T, argocdVersion string, semverOperator int) ServerInterface {
20+
func serverInterfaceTestData(t *testing.T, argocdVersion string, semverOperator int) *ServerInterface {
2021
v, err := semver.NewVersion(argocdVersion)
2122
assert.NoError(t, err)
2223

@@ -49,66 +50,71 @@ func serverInterfaceTestData(t *testing.T, argocdVersion string, semverOperator
4950
vm := &version.VersionMessage{
5051
Version: v.String(),
5152
}
52-
return ServerInterface{
53+
54+
return &ServerInterface{
5355
ApiClient: nil,
5456
ServerVersion: v,
5557
ServerVersionMessage: vm,
5658
}
5759
}
5860

5961
func TestServerInterface_isFeatureSupported(t *testing.T) {
62+
t.Parallel()
63+
6064
type args struct {
6165
feature int
6266
}
67+
6368
tests := []struct {
6469
name string
65-
fields ServerInterface
70+
si *ServerInterface
6671
args args
6772
want bool
6873
wantErr bool
6974
}{
7075
{
7176
name: "featureTokenID-1.5.3",
72-
fields: serverInterfaceTestData(t, "1.5.3", semverEquals),
77+
si: serverInterfaceTestData(t, "1.5.3", semverEquals),
7378
args: args{feature: featureTokenIDs},
7479
want: true,
7580
wantErr: false,
7681
},
7782
{
7883
name: "featureTokenID-1.5.3+",
79-
fields: serverInterfaceTestData(t, "1.5.3", semverGreater),
84+
si: serverInterfaceTestData(t, "1.5.3", semverGreater),
8085
args: args{feature: featureTokenIDs},
8186
want: true,
8287
wantErr: false,
8388
},
8489
{
8590
name: "featureTokenID-1.5.3-",
86-
fields: serverInterfaceTestData(t, "1.5.3", semverLess),
91+
si: serverInterfaceTestData(t, "1.5.3", semverLess),
8792
args: args{feature: featureTokenIDs},
8893
want: false,
8994
wantErr: false,
9095
},
9196
}
97+
9298
for _, tt := range tests {
99+
tt := tt
100+
93101
t.Run(tt.name, func(t *testing.T) {
94-
p := ServerInterface{
95-
ApiClient: tt.fields.ApiClient,
96-
ServerVersion: tt.fields.ServerVersion,
97-
ServerVersionMessage: tt.fields.ServerVersionMessage,
98-
}
99-
got, err := p.isFeatureSupported(tt.args.feature)
102+
t.Parallel()
103+
104+
got, err := tt.si.isFeatureSupported(tt.args.feature)
100105
if (err != nil) != tt.wantErr {
101106
t.Errorf("isFeatureSupported() error = %v, wantErr %v",
102107
err,
103108
tt.wantErr,
104109
)
105110
return
106111
}
112+
107113
if got != tt.want {
108114
t.Errorf("isFeatureSupported() got = %v, want %v, version %s",
109115
got,
110116
tt.want,
111-
tt.fields.ServerVersion.String(),
117+
tt.si.ServerVersion.String(),
112118
)
113119
}
114120
})

0 commit comments

Comments
 (0)