Skip to content

Commit 5293b47

Browse files
committed
chore: enable errorlint
Signed-off-by: Matthieu MOREL <[email protected]>
1 parent 31e22b9 commit 5293b47

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+159
-109
lines changed

.golangci.yml

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ linters:
2020
enable:
2121
- depguard
2222
- dupl
23+
- errorlint
2324
- govet
2425
- ineffassign
2526
- misspell

cmd/helm/helm.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package main // import "helm.sh/helm/v4/cmd/helm"
1818

1919
import (
20+
"errors"
2021
"log/slog"
2122
"os"
2223

@@ -42,8 +43,9 @@ func main() {
4243

4344
if err := cmd.Execute(); err != nil {
4445
slog.Debug("error", slog.Any("error", err))
45-
switch e := err.(type) {
46-
case helmcmd.PluginError:
46+
var e helmcmd.PluginError
47+
switch {
48+
case errors.As(err, &e):
4749
os.Exit(e.Code)
4850
default:
4951
os.Exit(1)

cmd/helm/helm_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package main
1818

1919
import (
2020
"bytes"
21+
"errors"
2122
"os"
2223
"os/exec"
2324
"runtime"
@@ -57,7 +58,8 @@ func TestPluginExitCode(t *testing.T) {
5758
cmd.Stdout = stdout
5859
cmd.Stderr = stderr
5960
err := cmd.Run()
60-
exiterr, ok := err.(*exec.ExitError)
61+
var exiterr *exec.ExitError
62+
ok := errors.As(err, &exiterr)
6163

6264
if !ok {
6365
t.Fatalf("Unexpected error returned by os.Exit: %T", err)

internal/sympath/walk.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ limitations under the License.
2121
package sympath
2222

2323
import (
24+
"errors"
2425
"fmt"
2526
"log/slog"
2627
"os"
@@ -40,7 +41,7 @@ func Walk(root string, walkFn filepath.WalkFunc) error {
4041
} else {
4142
err = symwalk(root, info, walkFn)
4243
}
43-
if err == filepath.SkipDir {
44+
if errors.Is(err, filepath.SkipDir) {
4445
return nil
4546
}
4647
return err
@@ -75,7 +76,7 @@ func symwalk(path string, info os.FileInfo, walkFn filepath.WalkFunc) error {
7576
if info, err = os.Lstat(resolved); err != nil {
7677
return err
7778
}
78-
if err := symwalk(path, info, walkFn); err != nil && err != filepath.SkipDir {
79+
if err := symwalk(path, info, walkFn); err != nil && !errors.Is(err, filepath.SkipDir) {
7980
return err
8081
}
8182
return nil
@@ -98,13 +99,13 @@ func symwalk(path string, info os.FileInfo, walkFn filepath.WalkFunc) error {
9899
filename := filepath.Join(path, name)
99100
fileInfo, err := os.Lstat(filename)
100101
if err != nil {
101-
if err := walkFn(filename, fileInfo, err); err != nil && err != filepath.SkipDir {
102+
if err := walkFn(filename, fileInfo, err); err != nil && !errors.Is(err, filepath.SkipDir) {
102103
return err
103104
}
104105
} else {
105106
err = symwalk(filename, fileInfo, walkFn)
106107
if err != nil {
107-
if (!fileInfo.IsDir() && !IsSymlink(fileInfo)) || err != filepath.SkipDir {
108+
if (!fileInfo.IsDir() && !IsSymlink(fileInfo)) || !errors.Is(err, filepath.SkipDir) {
108109
return err
109110
}
110111
}

internal/third_party/dep/fs/fs.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,8 @@ func copyFile(src, dst string) (err error) {
164164
//
165165
// ERROR_PRIVILEGE_NOT_HELD is 1314 (0x522):
166166
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms681385(v=vs.85).aspx
167-
if lerr, ok := err.(*os.LinkError); ok && lerr.Err != syscall.Errno(1314) {
167+
var lerr *os.LinkError
168+
if errors.As(err, &lerr) && !errors.Is(lerr.Err, syscall.Errno(1314)) {
168169
return err
169170
}
170171
} else {

internal/third_party/dep/fs/fs_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3232
package fs
3333

3434
import (
35+
"errors"
3536
"os"
3637
"path/filepath"
3738
"runtime"
@@ -234,7 +235,7 @@ func TestCopyDirFail_SrcIsNotDir(t *testing.T) {
234235
t.Fatalf("expected error for CopyDir(%s, %s), got none", srcdir, dstdir)
235236
}
236237

237-
if err != errSrcNotDir {
238+
if !errors.Is(err, errSrcNotDir) {
238239
t.Fatalf("expected %v error for CopyDir(%s, %s), got %s", errSrcNotDir, srcdir, dstdir, err)
239240
}
240241

@@ -260,7 +261,7 @@ func TestCopyDirFail_DstExists(t *testing.T) {
260261
t.Fatalf("expected error for CopyDir(%s, %s), got none", srcdir, dstdir)
261262
}
262263

263-
if err != errDstExist {
264+
if !errors.Is(err, errDstExist) {
264265
t.Fatalf("expected %v error for CopyDir(%s, %s), got %s", errDstExist, srcdir, dstdir, err)
265266
}
266267
}

internal/third_party/dep/fs/rename.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3434
package fs
3535

3636
import (
37+
"errors"
3738
"fmt"
3839
"os"
3940
"syscall"
@@ -46,10 +47,11 @@ func renameFallback(err error, src, dst string) error {
4647
// copy if we detect that case. syscall.EXDEV is the common name for the
4748
// cross device link error which has varying output text across different
4849
// operating systems.
49-
terr, ok := err.(*os.LinkError)
50+
var terr *os.LinkError
51+
ok := errors.As(err, &terr)
5052
if !ok {
5153
return err
52-
} else if terr.Err != syscall.EXDEV {
54+
} else if !errors.Is(terr.Err, syscall.EXDEV) {
5355
return fmt.Errorf("link error: cannot rename %s to %s: %w", src, dst, terr)
5456
}
5557

pkg/action/install.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ func (i *Install) performInstall(rel *release.Release, toBeAdopted kube.Resource
457457
// pre-install hooks
458458
if !i.DisableHooks {
459459
if err := i.cfg.execHook(rel, release.HookPreInstall, i.WaitStrategy, i.Timeout); err != nil {
460-
return rel, fmt.Errorf("failed pre-install: %s", err)
460+
return rel, fmt.Errorf("failed pre-install: %w", err)
461461
}
462462
}
463463

@@ -493,7 +493,7 @@ func (i *Install) performInstall(rel *release.Release, toBeAdopted kube.Resource
493493

494494
if !i.DisableHooks {
495495
if err := i.cfg.execHook(rel, release.HookPostInstall, i.WaitStrategy, i.Timeout); err != nil {
496-
return rel, fmt.Errorf("failed post-install: %s", err)
496+
return rel, fmt.Errorf("failed post-install: %w", err)
497497
}
498498
}
499499

pkg/action/package_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package action
1818

1919
import (
20+
"errors"
2021
"os"
2122
"path"
2223
"testing"
@@ -144,7 +145,7 @@ func TestValidateVersion(t *testing.T) {
144145
for _, tt := range tests {
145146
t.Run(tt.name, func(t *testing.T) {
146147
if err := validateVersion(tt.args.ver); err != nil {
147-
if err != tt.wantErr {
148+
if !errors.Is(err, tt.wantErr) {
148149
t.Errorf("Expected {%v}, got {%v}", tt.wantErr, err)
149150
}
150151

pkg/action/upgrade.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ func (u *Upgrade) releasingUpgrade(c chan<- resultMessage, upgradedRelease *rele
422422

423423
if !u.DisableHooks {
424424
if err := u.cfg.execHook(upgradedRelease, release.HookPreUpgrade, u.WaitStrategy, u.Timeout); err != nil {
425-
u.reportToPerformUpgrade(c, upgradedRelease, kube.ResourceList{}, fmt.Errorf("pre-upgrade hooks failed: %s", err))
425+
u.reportToPerformUpgrade(c, upgradedRelease, kube.ResourceList{}, fmt.Errorf("pre-upgrade hooks failed: %w", err))
426426
return
427427
}
428428
} else {
@@ -468,7 +468,7 @@ func (u *Upgrade) releasingUpgrade(c chan<- resultMessage, upgradedRelease *rele
468468
// post-upgrade hooks
469469
if !u.DisableHooks {
470470
if err := u.cfg.execHook(upgradedRelease, release.HookPostUpgrade, u.WaitStrategy, u.Timeout); err != nil {
471-
u.reportToPerformUpgrade(c, upgradedRelease, results.Created, fmt.Errorf("post-upgrade hooks failed: %s", err))
471+
u.reportToPerformUpgrade(c, upgradedRelease, results.Created, fmt.Errorf("post-upgrade hooks failed: %w", err))
472472
return
473473
}
474474
}

pkg/action/validate.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func existingResourceConflict(resources kube.ResourceList, releaseName, releaseN
8080

8181
// Allow adoption of the resource if it is managed by Helm and is annotated with correct release name and namespace.
8282
if err := checkOwnership(existing, releaseName, releaseNamespace); err != nil {
83-
return fmt.Errorf("%s exists and cannot be imported into the current release: %s", resourceString(info), err)
83+
return fmt.Errorf("%s exists and cannot be imported into the current release: %w", resourceString(info), err)
8484
}
8585

8686
requireUpdate.Append(info)
@@ -102,13 +102,13 @@ func checkOwnership(obj runtime.Object, releaseName, releaseNamespace string) er
102102

103103
var errs []error
104104
if err := requireValue(lbls, appManagedByLabel, appManagedByHelm); err != nil {
105-
errs = append(errs, fmt.Errorf("label validation error: %s", err))
105+
errs = append(errs, fmt.Errorf("label validation error: %w", err))
106106
}
107107
if err := requireValue(annos, helmReleaseNameAnnotation, releaseName); err != nil {
108-
errs = append(errs, fmt.Errorf("annotation validation error: %s", err))
108+
errs = append(errs, fmt.Errorf("annotation validation error: %w", err))
109109
}
110110
if err := requireValue(annos, helmReleaseNamespaceAnnotation, releaseNamespace); err != nil {
111-
errs = append(errs, fmt.Errorf("annotation validation error: %s", err))
111+
errs = append(errs, fmt.Errorf("annotation validation error: %w", err))
112112
}
113113

114114
if len(errs) > 0 {
@@ -140,15 +140,15 @@ func setMetadataVisitor(releaseName, releaseNamespace string, force bool) resour
140140

141141
if !force {
142142
if err := checkOwnership(info.Object, releaseName, releaseNamespace); err != nil {
143-
return fmt.Errorf("%s cannot be owned: %s", resourceString(info), err)
143+
return fmt.Errorf("%s cannot be owned: %w", resourceString(info), err)
144144
}
145145
}
146146

147147
if err := mergeLabels(info.Object, map[string]string{
148148
appManagedByLabel: appManagedByHelm,
149149
}); err != nil {
150150
return fmt.Errorf(
151-
"%s labels could not be updated: %s",
151+
"%s labels could not be updated: %w",
152152
resourceString(info), err,
153153
)
154154
}
@@ -158,7 +158,7 @@ func setMetadataVisitor(releaseName, releaseNamespace string, force bool) resour
158158
helmReleaseNamespaceAnnotation: releaseNamespace,
159159
}); err != nil {
160160
return fmt.Errorf(
161-
"%s annotations could not be updated: %s",
161+
"%s annotations could not be updated: %w",
162162
resourceString(info), err,
163163
)
164164
}

pkg/chart/v2/loader/archive.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ func LoadFile(name string) (*chart.Chart, error) {
7272

7373
c, err := LoadArchive(raw)
7474
if err != nil {
75-
if err == gzip.ErrHeader {
76-
return nil, fmt.Errorf("file '%s' does not appear to be a valid chart file (details: %s)", name, err)
75+
if errors.Is(err, gzip.ErrHeader) {
76+
return nil, fmt.Errorf("file '%s' does not appear to be a valid chart file (details: %w)", name, err)
7777
}
7878
}
7979
return c, err
@@ -91,7 +91,7 @@ func ensureArchive(name string, raw *os.File) error {
9191
buffer := make([]byte, 512)
9292
_, err := raw.Read(buffer)
9393
if err != nil && err != io.EOF {
94-
return fmt.Errorf("file '%s' cannot be read: %s", name, err)
94+
return fmt.Errorf("file '%s' cannot be read: %w", name, err)
9595
}
9696

9797
// Helm may identify achieve of the application/x-gzip as application/vnd.ms-fontobject.
@@ -131,7 +131,7 @@ func LoadArchiveFiles(in io.Reader) ([]*BufferedFile, error) {
131131
for {
132132
b := bytes.NewBuffer(nil)
133133
hd, err := tr.Next()
134-
if err == io.EOF {
134+
if errors.Is(err, io.EOF) {
135135
break
136136
}
137137
if err != nil {

pkg/chart/v2/loader/load.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ func LoadValues(data io.Reader) (map[string]interface{}, error) {
218218
currentMap := map[string]interface{}{}
219219
raw, err := reader.Read()
220220
if err != nil {
221-
if err == io.EOF {
221+
if errors.Is(err, io.EOF) {
222222
break
223223
}
224224
return nil, fmt.Errorf("error reading yaml document: %w", err)

pkg/chart/v2/metadata_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ limitations under the License.
1616
package v2
1717

1818
import (
19+
"errors"
1920
"testing"
2021
)
2122

@@ -181,7 +182,7 @@ func TestValidate(t *testing.T) {
181182

182183
for _, tt := range tests {
183184
result := tt.md.Validate()
184-
if result != tt.err {
185+
if !errors.Is(result, tt.err) {
185186
t.Errorf("expected %q, got %q in test %q", tt.err, result, tt.name)
186187
}
187188
}

pkg/chart/v2/util/dependencies.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ limitations under the License.
1616
package util
1717

1818
import (
19+
"errors"
1920
"log/slog"
2021
"strings"
2122

@@ -49,9 +50,12 @@ func processDependencyConditions(reqs []*chart.Dependency, cvals Values, cpath s
4950
break
5051
}
5152
slog.Warn("returned non-bool value", "path", c, "chart", r.Name)
52-
} else if _, ok := err.(ErrNoValue); !ok {
53-
// this is a real error
54-
slog.Warn("the method PathValue returned error", slog.Any("error", err))
53+
} else {
54+
var errNoValue ErrNoValue
55+
if errors.As(err, &errNoValue) {
56+
// this is a real error
57+
slog.Warn("the method PathValue returned error", slog.Any("error", err))
58+
}
5559
}
5660
}
5761
}

pkg/chart/v2/util/dependencies_test.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package util
1616

1717
import (
1818
"encoding/json"
19+
"errors"
1920
"os"
2021
"path/filepath"
2122
"sort"
@@ -265,8 +266,9 @@ func TestProcessDependencyImportValues(t *testing.T) {
265266
if err == nil {
266267
t.Error("expect nil value not found but found it")
267268
}
268-
switch xerr := err.(type) {
269-
case ErrNoValue:
269+
var xerr ErrNoValue
270+
switch {
271+
case errors.As(err, &xerr):
270272
// We found what we expected
271273
default:
272274
t.Errorf("expected an ErrNoValue but got %q instead", xerr)
@@ -477,7 +479,6 @@ func TestDependentChartAliases(t *testing.T) {
477479
if aliasChart := getAliasDependency(c.Dependencies(), req[2]); aliasChart != nil {
478480
t.Fatalf("expected no chart but got %s", aliasChart.Name())
479481
}
480-
481482
}
482483

483484
func TestDependentChartWithSubChartsAbsentInDependency(t *testing.T) {

pkg/cmd/dependency_build.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ limitations under the License.
1616
package cmd
1717

1818
import (
19+
"errors"
1920
"fmt"
2021
"io"
2122
"os"
@@ -75,7 +76,8 @@ func newDependencyBuildCmd(out io.Writer) *cobra.Command {
7576
man.Verify = downloader.VerifyIfPossible
7677
}
7778
err = man.Build()
78-
if e, ok := err.(downloader.ErrRepoNotFound); ok {
79+
var e downloader.ErrRepoNotFound
80+
if errors.As(err, &e) {
7981
return fmt.Errorf("%s. Please add the missing repos via 'helm repo add'", e.Error())
8082
}
8183
return err

pkg/cmd/lint.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func newLintCmd(out io.Writer) *cobra.Command {
6060
if kubeVersion != "" {
6161
parsedKubeVersion, err := chartutil.ParseKubeVersion(kubeVersion)
6262
if err != nil {
63-
return fmt.Errorf("invalid kube version '%s': %s", kubeVersion, err)
63+
return fmt.Errorf("invalid kube version '%s': %w", kubeVersion, err)
6464
}
6565
client.KubeVersion = parsedKubeVersion
6666
}

0 commit comments

Comments
 (0)