Repository: helm/helm
Pull request #13516 (2024-12-10 17:42:00)

chore: fix problems with latest lint


**What this PR does / why we need it**:
Latest version of golangci-lint 1.62.2 has some new complaints that are resolved here. A few more minor fixes thrown in as well.

**Special notes for your reviewer**:

**If applicable**:
- [ ] this PR contains user facing changes (the `docs needed` label should be applied if so)
- [ ] this PR contains unit tests
- [ ] this PR has been tested for backwards compatibility



Patch:
diff --git a/cmd/helm/history.go b/cmd/helm/history.go
index 56383bfca..029e258e9 100644
--- a/cmd/helm/history.go
+++ b/cmd/helm/history.go
@@ -177,22 +177,15 @@ func formatAppVersion(c *chart.Chart) string {
 	return c.AppVersion()
 }
 
-func min(x, y int) int {
-	if x < y {
-		return x
-	}
-	return y
-}
-
 func compListRevisions(_ string, cfg *action.Configuration, releaseName string) ([]string, cobra.ShellCompDirective) {
 	client := action.NewHistory(cfg)
 
 	var revisions []string
 	if hist, err := client.Run(releaseName); err == nil {
-		for _, release := range hist {
-			appVersion := fmt.Sprintf("App: %s", release.Chart.Metadata.AppVersion)
-			chartDesc := fmt.Sprintf("Chart: %s-%s", release.Chart.Metadata.Name, release.Chart.Metadata.Version)
-			revisions = append(revisions, fmt.Sprintf("%s\t%s, %s", strconv.Itoa(release.Version), appVersion, chartDesc))
+		for _, version := range hist {
+			appVersion := fmt.Sprintf("App: %s", version.Chart.Metadata.AppVersion)
+			chartDesc := fmt.Sprintf("Chart: %s-%s", version.Chart.Metadata.Name, version.Chart.Metadata.Version)
+			revisions = append(revisions, fmt.Sprintf("%s\t%s, %s", strconv.Itoa(version.Version), appVersion, chartDesc))
 		}
 		return revisions, cobra.ShellCompDirectiveNoFileComp
 	}
diff --git a/cmd/helm/plugin_uninstall.go b/cmd/helm/plugin_uninstall.go
index 607baab2e..458a92cc8 100644
--- a/cmd/helm/plugin_uninstall.go
+++ b/cmd/helm/plugin_uninstall.go
@@ -78,7 +78,7 @@ func (o *pluginUninstallOptions) run(out io.Writer) error {
 		}
 	}
 	if len(errorPlugins) > 0 {
-		return errors.Errorf(strings.Join(errorPlugins, "\n"))
+		return errors.New(strings.Join(errorPlugins, "\n"))
 	}
 	return nil
 }
diff --git a/cmd/helm/plugin_update.go b/cmd/helm/plugin_update.go
index 3f6d963fb..eb7505696 100644
--- a/cmd/helm/plugin_update.go
+++ b/cmd/helm/plugin_update.go
@@ -81,7 +81,7 @@ func (o *pluginUpdateOptions) run(out io.Writer) error {
 		}
 	}
 	if len(errorPlugins) > 0 {
-		return errors.Errorf(strings.Join(errorPlugins, "\n"))
+		return errors.New(strings.Join(errorPlugins, "\n"))
 	}
 	return nil
 }
diff --git a/cmd/helm/status.go b/cmd/helm/status.go
index 2bee5db44..747b2556b 100644
--- a/cmd/helm/status.go
+++ b/cmd/helm/status.go
@@ -140,7 +140,7 @@ func (s statusPrinter) WriteTable(out io.Writer) error {
 	}
 	_, _ = fmt.Fprintf(out, "DESCRIPTION: %s\n", s.release.Info.Description)
 
-	if s.release.Info.Resources != nil && len(s.release.Info.Resources) > 0 {
+	if len(s.release.Info.Resources) > 0 {
 		buf := new(bytes.Buffer)
 		printFlags := get.NewHumanPrintFlags()
 		typePrinter, _ := printFlags.ToPrinter("")
diff --git a/cmd/helm/template.go b/cmd/helm/template.go
index ff6621a49..ccf537a0b 100644
--- a/cmd/helm/template.go
+++ b/cmd/helm/template.go
@@ -219,7 +219,7 @@ func isTestHook(h *release.Hook) bool {
 // bug introduced by #8156. As part of the todo to refactor renderResources
 // this duplicate code should be removed. It is added here so that the API
 // surface area is as minimally impacted as possible in fixing the issue.
-func writeToFile(outputDir string, name string, data string, append bool) error {
+func writeToFile(outputDir string, name string, data string, appendData bool) error {
 	outfileName := strings.Join([]string{outputDir, name}, string(filepath.Separator))
 
 	err := ensureDirectoryForFile(outfileName)
@@ -227,7 +227,7 @@ func writeToFile(outputDir string, name string, data string, append bool) error
 		return err
 	}
 
-	f, err := createOrOpenFile(outfileName, append)
+	f, err := createOrOpenFile(outfileName, appendData)
 	if err != nil {
 		return err
 	}
@@ -244,8 +244,8 @@ func writeToFile(outputDir string, name string, data string, append bool) error
 	return nil
 }
 
-func createOrOpenFile(filename string, append bool) (*os.File, error) {
-	if append {
+func createOrOpenFile(filename string, appendData bool) (*os.File, error) {
+	if appendData {
 		return os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600)
 	}
 	return os.Create(filename)
diff --git a/pkg/action/hooks.go b/pkg/action/hooks.go
index 4bffb6ae0..e1cbab5e1 100644
--- a/pkg/action/hooks.go
+++ b/pkg/action/hooks.go
@@ -44,7 +44,7 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
 
 	for _, h := range executingHooks {
 		// Set default delete policy to before-hook-creation
-		if h.DeletePolicies == nil || len(h.DeletePolicies) == 0 {
+		if len(h.DeletePolicies) == 0 {
 			// TODO(jlegrone): Only apply before-hook-creation delete policy to run to completion
 			//                 resources. For all other resource types update in place if a
 			//                 resource with the same name already exists and is owned by the
diff --git a/pkg/action/install.go b/pkg/action/install.go
index 6cf5c8839..4d425d563 100644
--- a/pkg/action/install.go
+++ b/pkg/action/install.go
@@ -598,8 +598,8 @@ func (i *Install) replaceRelease(rel *release.Release) error {
 	return i.recordRelease(last)
 }
 
-// write the <data> to <output-dir>/<name>. <append> controls if the file is created or content will be appended
-func writeToFile(outputDir string, name string, data string, append bool) error {
+// write the <data> to <output-dir>/<name>. <appendData> controls if the file is created or content will be appended
+func writeToFile(outputDir string, name string, data string, appendData bool) error {
 	outfileName := strings.Join([]string{outputDir, name}, string(filepath.Separator))
 
 	err := ensureDirectoryForFile(outfileName)
@@ -607,7 +607,7 @@ func writeToFile(outputDir string, name string, data string, append bool) error
 		return err
 	}
 
-	f, err := createOrOpenFile(outfileName, append)
+	f, err := createOrOpenFile(outfileName, appendData)
 	if err != nil {
 		return err
 	}
@@ -624,8 +624,8 @@ func writeToFile(outputDir string, name string, data string, append bool) error
 	return nil
 }
 
-func createOrOpenFile(filename string, append bool) (*os.File, error) {
-	if append {
+func createOrOpenFile(filename string, appendData bool) (*os.File, error) {
+	if appendData {
 		return os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600)
 	}
 	return os.Create(filename)
diff --git a/pkg/engine/engine.go b/pkg/engine/engine.go
index df3a600a3..d8ee313e1 100644
--- a/pkg/engine/engine.go
+++ b/pkg/engine/engine.go
@@ -206,7 +206,7 @@ func (e Engine) initFunMap(t *template.Template) {
 				log.Printf("[INFO] Missing required value: %s", warn)
 				return "", nil
 			}
-			return val, errors.Errorf(warnWrap(warn))
+			return val, errors.New(warnWrap(warn))
 		} else if _, ok := val.(string); ok {
 			if val == "" {
 				if e.LintMode {
@@ -214,7 +214,7 @@ func (e Engine) initFunMap(t *template.Template) {
 					log.Printf("[INFO] Missing required value: %s", warn)
 					return "", nil
 				}
-				return val, errors.Errorf(warnWrap(warn))
+				return val, errors.New(warnWrap(warn))
 			}
 		}
 		return val, nil
diff --git a/pkg/kube/client.go b/pkg/kube/client.go
index 4d93c91b9..5f16f2bfb 100644
--- a/pkg/kube/client.go
+++ b/pkg/kube/client.go
@@ -435,7 +435,7 @@ func (c *Client) Update(original, target ResourceList, force bool) (*Result, err
 	case err != nil:
 		return res, err
 	case len(updateErrors) != 0:
-		return res, errors.Errorf(strings.Join(updateErrors, " && "))
+		return res, errors.New(strings.Join(updateErrors, " && "))
 	}
 
 	for _, info := range original.Difference(target) {
diff --git a/pkg/kube/wait.go b/pkg/kube/wait.go
index 36110d0de..bdafc8255 100644
--- a/pkg/kube/wait.go
+++ b/pkg/kube/wait.go
@@ -153,7 +153,7 @@ func SelectorsForObject(object runtime.Object) (selector labels.Selector, err er
 	case *batchv1.Job:
 		selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
 	case *corev1.Service:
-		if t.Spec.Selector == nil || len(t.Spec.Selector) == 0 {
+		if len(t.Spec.Selector) == 0 {
 			return nil, fmt.Errorf("invalid service '%s': Service is defined without a selector", t.Name)
 		}
 		selector = labels.SelectorFromSet(t.Spec.Selector)
diff --git a/pkg/lint/rules/deprecations.go b/pkg/lint/rules/deprecations.go
index 90e7748a4..0f82a8827 100644
--- a/pkg/lint/rules/deprecations.go
+++ b/pkg/lint/rules/deprecations.go
@@ -73,16 +73,16 @@ func validateNoDeprecations(resource *K8sYamlStruct, kubeVersion *chartutil.Kube
 		return err
 	}
 
-	maj, err := strconv.Atoi(majorVersion)
+	major, err := strconv.Atoi(majorVersion)
 	if err != nil {
 		return err
 	}
-	min, err := strconv.Atoi(minorVersion)
+	minor, err := strconv.Atoi(minorVersion)
 	if err != nil {
 		return err
 	}
 
-	if !deprecation.IsDeprecated(runtimeObject, maj, min) {
+	if !deprecation.IsDeprecated(runtimeObject, major, minor) {
 		return nil
 	}
 	gvk := fmt.Sprintf("%s %s", resource.APIVersion, resource.Kind)
diff --git a/pkg/registry/util.go b/pkg/registry/util.go
index 727cdae03..4454105c9 100644
--- a/pkg/registry/util.go
+++ b/pkg/registry/util.go
@@ -208,7 +208,7 @@ func generateChartOCIAnnotations(meta *chart.Metadata, creationTime string) map[
 		chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationSource, meta.Sources[0])
 	}
 
-	if meta.Maintainers != nil && len(meta.Maintainers) > 0 {
+	if len(meta.Maintainers) > 0 {
 		var maintainerSb strings.Builder
 
 		for maintainerIdx, maintainer := range meta.Maintainers {
diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go
index 0da0688fd..c57fce26c 100644
--- a/pkg/storage/storage.go
+++ b/pkg/storage/storage.go
@@ -161,15 +161,15 @@ func (s *Storage) History(name string) ([]*rspb.Release, error) {
 //
 // We allow max to be set explicitly so that calling functions can "make space"
 // for the new records they are going to write.
-func (s *Storage) removeLeastRecent(name string, max int) error {
-	if max < 0 {
+func (s *Storage) removeLeastRecent(name string, maximum int) error {
+	if maximum < 0 {
 		return nil
 	}
 	h, err := s.History(name)
 	if err != nil {
 		return err
 	}
-	if len(h) <= max {
+	if len(h) <= maximum {
 		return nil
 	}
 
@@ -183,8 +183,8 @@ func (s *Storage) removeLeastRecent(name string, max int) error {
 
 	var toDelete []*rspb.Release
 	for _, rel := range h {
-		// once we have enough releases to delete to reach the max, stop
-		if len(h)-len(toDelete) == max {
+		// once we have enough releases to delete to reach the maximum, stop
+		if len(h)-len(toDelete) == maximum {
 			break
 		}
 		if lastDeployed != nil {
diff --git a/pkg/time/time.go b/pkg/time/time.go
index 1abe8ae3d..13b1211e6 100644
--- a/pkg/time/time.go
+++ b/pkg/time/time.go
@@ -30,7 +30,7 @@ import (
 var emptyString = `""`
 
 // Time is a convenience wrapper around stdlib time, but with different
-// marshalling and unmarshaling for zero values
+// marshalling and unmarshalling for zero values
 type Time struct {
 	time.Time
 }
@@ -70,8 +70,8 @@ func ParseInLocation(layout, value string, loc *time.Location) (Time, error) {
 	return Time{Time: t}, err
 }
 
-func Date(year int, month time.Month, day, hour, min, sec, nsec int, loc *time.Location) Time {
-	return Time{Time: time.Date(year, month, day, hour, min, sec, nsec, loc)}
+func Date(year int, month time.Month, day, hour, minute, second, nanoSecond int, loc *time.Location) Time {
+	return Time{Time: time.Date(year, month, day, hour, minute, second, nanoSecond, loc)}
 }
 
 func Unix(sec int64, nsec int64) Time { return Time{Time: time.Unix(sec, nsec)} }


Test patch:
diff --git a/cmd/helm/repo_index_test.go b/cmd/helm/repo_index_test.go
index 554a3dadf..82e5d1cfe 100644
--- a/cmd/helm/repo_index_test.go
+++ b/cmd/helm/repo_index_test.go
@@ -162,9 +162,9 @@ func TestRepoIndexCmd(t *testing.T) {
 	}
 }
 
-func linkOrCopy(old, new string) error {
-	if err := os.Link(old, new); err != nil {
-		return copyFile(old, new)
+func linkOrCopy(source, target string) error {
+	if err := os.Link(source, target); err != nil {
+		return copyFile(source, target)
 	}
 
 	return nil
diff --git a/internal/sympath/walk_test.go b/internal/sympath/walk_test.go
index 04e0738b9..d4e2ceeaa 100644
--- a/internal/sympath/walk_test.go
+++ b/internal/sympath/walk_test.go
@@ -108,12 +108,12 @@ func checkMarks(t *testing.T, report bool) {
 }
 
 // Assumes that each node name is unique. Good enough for a test.
-// If clear is true, any incoming error is cleared before return. The errors
-// are always accumulated, though.
-func mark(info os.FileInfo, err error, errors *[]error, clear bool) error {
+// If clearIncomingError is true, any incoming error is cleared before
+// return. The errors are always accumulated, though.
+func mark(info os.FileInfo, err error, errors *[]error, clearIncomingError bool) error {
 	if err != nil {
 		*errors = append(*errors, err)
-		if clear {
+		if clearIncomingError {
 			return nil
 		}
 		return err
@@ -130,9 +130,8 @@ func mark(info os.FileInfo, err error, errors *[]error, clear bool) error {
 func TestWalk(t *testing.T) {
 	makeTree(t)
 	errors := make([]error, 0, 10)
-	clear := true
 	markFn := func(_ string, info os.FileInfo, err error) error {
-		return mark(info, err, &errors, clear)
+		return mark(info, err, &errors, true)
 	}
 	// Expect no errors.
 	err := Walk(tree.name, markFn)