Skip to content

Commit 3ee91d5

Browse files
ci(lint): enable errorlint linter (#1604)
* ci(lint): enable errorlint linter Signed-off-by: Matthieu MOREL <[email protected]> * Apply suggestions from code review Co-authored-by: Manuel de la Peña <[email protected]> --------- Signed-off-by: Matthieu MOREL <[email protected]> Co-authored-by: Manuel de la Peña <[email protected]>
1 parent 30fd5cd commit 3ee91d5

File tree

10 files changed

+38
-18
lines changed

10 files changed

+38
-18
lines changed

.golangci.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
linters:
22
enable:
3+
- errorlint
34
- gci
45
- gocritic
56
- gofumpt
67
- misspell
78

89
linters-settings:
10+
errorlint:
11+
# Check whether fmt.Errorf uses the %w verb for formatting errors.
12+
# See the https://github.com/polyfloyd/go-errorlint for caveats.
13+
errorf: true
14+
# Permit more than 1 %w verb, valid per Go 1.20 (Requires errorf:true)
15+
errorf-multi: true
16+
# Check for plain type assertions and type switches.
17+
asserts: true
18+
# Check for plain error comparisons.
19+
comparison: true
920
gci:
1021
sections:
1122
- standard

docker.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -794,7 +794,8 @@ func (p *DockerProvider) BuildImage(ctx context.Context, img ImageBuildInfo) (st
794794
err = backoff.Retry(func() error {
795795
resp, err = p.client.ImageBuild(ctx, buildContext, buildOptions)
796796
if err != nil {
797-
if _, ok := err.(errdefs.ErrNotFound); ok {
797+
var enf errdefs.ErrNotFound
798+
if errors.As(err, &enf) {
798799
return backoff.Permanent(err)
799800
}
800801
Logger.Printf("Failed to build image: %s, will retry", err)
@@ -1161,7 +1162,8 @@ func (p *DockerProvider) attemptToPullImage(ctx context.Context, tag string, pul
11611162
err = backoff.Retry(func() error {
11621163
pull, err = p.client.ImagePull(ctx, tag, pullOpt)
11631164
if err != nil {
1164-
if _, ok := err.(errdefs.ErrNotFound); ok {
1165+
var enf errdefs.ErrNotFound
1166+
if errors.As(err, &enf) {
11651167
return backoff.Permanent(err)
11661168
}
11671169
Logger.Printf("Failed to pull image: %s, will retry", err)

internal/testcontainersdocker/docker_host.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func extractDockerHost(ctx context.Context) string {
112112
for _, dockerHostFn := range dockerHostFns {
113113
dockerHost, err := dockerHostFn(ctx)
114114
if err != nil {
115-
outerErr = fmt.Errorf("%w: %v", outerErr, err)
115+
outerErr = fmt.Errorf("%w: %w", outerErr, err)
116116
continue
117117
}
118118

internal/testcontainersdocker/docker_rootless.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func rootlessDockerSocketPath(_ context.Context) (string, error) {
5757
for _, socketPathFn := range socketPathFns {
5858
s, err := socketPathFn()
5959
if err != nil {
60-
outerErr = fmt.Errorf("%w: %v", outerErr, err)
60+
outerErr = fmt.Errorf("%w: %w", outerErr, err)
6161
continue
6262
}
6363

parallel_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package testcontainers
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"testing"
78
"time"
@@ -100,10 +101,10 @@ func TestParallelContainers(t *testing.T) {
100101
res, err := ParallelContainers(context.Background(), tc.reqs, ParallelContainersOptions{})
101102
if err != nil {
102103
require.NotZero(t, tc.expErrors)
103-
e, _ := err.(ParallelContainersError)
104-
104+
var e ParallelContainersError
105+
errors.As(err, &e)
105106
if len(e.Errors) != tc.expErrors {
106-
t.Fatalf("expected erorrs: %d, got: %d\n", tc.expErrors, len(e.Errors))
107+
t.Fatalf("expected errors: %d, got: %d\n", tc.expErrors, len(e.Errors))
107108
}
108109
}
109110

@@ -157,7 +158,8 @@ func TestParallelContainersWithReuse(t *testing.T) {
157158

158159
res, err := ParallelContainers(ctx, parallelRequest, ParallelContainersOptions{})
159160
if err != nil {
160-
e, _ := err.(ParallelContainersError)
161+
var e ParallelContainersError
162+
errors.As(err, &e)
161163
t.Fatalf("expected errors: %d, got: %d\n", 0, len(e.Errors))
162164
}
163165
// Container is reused, only terminate first container

wait/errors.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33

44
package wait
55

6-
import "syscall"
6+
import (
7+
"errors"
8+
"syscall"
9+
)
710

811
func isConnRefusedErr(err error) bool {
9-
return err == syscall.ECONNREFUSED
12+
return errors.Is(err, syscall.ECONNREFUSED)
1013
}

wait/exec_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func TestExecStrategyWaitUntilReady_DeadlineExceeded(t *testing.T) {
129129
}
130130
wg := wait.NewExecStrategy([]string{"true"})
131131
err := wg.WaitUntilReady(ctx, target)
132-
if err != context.DeadlineExceeded {
132+
if !errors.Is(err, context.DeadlineExceeded) {
133133
t.Fatal(err)
134134
}
135135
}

wait/host_port.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func (hp *HostPortStrategy) WaitUntilReady(ctx context.Context, target StrategyT
116116

117117
select {
118118
case <-ctx.Done():
119-
return fmt.Errorf("%s:%w", ctx.Err(), err)
119+
return fmt.Errorf("%w: %w", ctx.Err(), err)
120120
case <-time.After(waitInterval):
121121
if err := checkTarget(ctx, target); err != nil {
122122
return err
@@ -155,8 +155,10 @@ func externalCheck(ctx context.Context, ipAddress string, port nat.Port, target
155155
}
156156
conn, err := dialer.DialContext(ctx, proto, address)
157157
if err != nil {
158-
if v, ok := err.(*net.OpError); ok {
159-
if v2, ok := (v.Err).(*os.SyscallError); ok {
158+
var v *net.OpError
159+
if errors.As(err, &v) {
160+
var v2 *os.SyscallError
161+
if errors.As(v.Err, &v2) {
160162
if isConnRefusedErr(v2.Err) {
161163
time.Sleep(waitInterval)
162164
continue

wait/http.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ func (ws *HTTPStrategy) WaitUntilReady(ctx context.Context, target StrategyTarge
150150
for err != nil {
151151
select {
152152
case <-ctx.Done():
153-
return fmt.Errorf("%s:%w", ctx.Err(), err)
153+
return fmt.Errorf("%w: %w", ctx.Err(), err)
154154
case <-time.After(ws.PollInterval):
155155
if err := checkTarget(ctx, target); err != nil {
156156
return err
@@ -177,7 +177,7 @@ func (ws *HTTPStrategy) WaitUntilReady(ctx context.Context, target StrategyTarge
177177
for mappedPort == "" {
178178
select {
179179
case <-ctx.Done():
180-
return fmt.Errorf("%s:%w", ctx.Err(), err)
180+
return fmt.Errorf("%w: %w", ctx.Err(), err)
181181
case <-time.After(ws.PollInterval):
182182
if err := checkTarget(ctx, target); err != nil {
183183
return err

wait/sql.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func (w *waitForSql) WaitUntilReady(ctx context.Context, target StrategyTarget)
8787
for port == "" {
8888
select {
8989
case <-ctx.Done():
90-
return fmt.Errorf("%s:%w", ctx.Err(), err)
90+
return fmt.Errorf("%w: %w", ctx.Err(), err)
9191
case <-ticker.C:
9292
if err := checkTarget(ctx, target); err != nil {
9393
return err
@@ -98,7 +98,7 @@ func (w *waitForSql) WaitUntilReady(ctx context.Context, target StrategyTarget)
9898

9999
db, err := sql.Open(w.Driver, w.URL(host, port))
100100
if err != nil {
101-
return fmt.Errorf("sql.Open: %v", err)
101+
return fmt.Errorf("sql.Open: %w", err)
102102
}
103103
defer db.Close()
104104
for {

0 commit comments

Comments
 (0)