mirror of
https://github.com/helm/helm.git
synced 2026-06-30 19:57:48 +00:00
Merge branch 'helm:main' into feature/rollback-revision-history
This commit is contained in:
@@ -49,7 +49,7 @@ type Chart struct {
|
||||
// Schema is an optional JSON schema for imposing structure on Values
|
||||
Schema []byte `json:"schema"`
|
||||
// SchemaModTime the schema was last modified
|
||||
SchemaModTime time.Time `json:"schemamodtime,omitempty"`
|
||||
SchemaModTime time.Time `json:"schemamodtime"`
|
||||
// Files are miscellaneous files in a chart archive,
|
||||
// e.g. README, LICENSE, etc.
|
||||
Files []*common.File `json:"files"`
|
||||
|
||||
@@ -231,7 +231,7 @@ func TestMalformedTemplate(t *testing.T) {
|
||||
}()
|
||||
select {
|
||||
case <-c:
|
||||
t.Fatalf("lint malformed template timeout")
|
||||
t.Fatal("lint malformed template timeout")
|
||||
case <-ch:
|
||||
if len(m) != 1 {
|
||||
t.Fatalf("All didn't fail with expected errors, got %#v", m)
|
||||
|
||||
@@ -152,7 +152,7 @@ func validateChartVersion(cf *chart.Metadata) error {
|
||||
valid, msg := c.Validate(version)
|
||||
|
||||
if !valid && len(msg) > 0 {
|
||||
return fmt.Errorf("version %v", msg[0])
|
||||
return fmt.Errorf("version %w", msg[0])
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@@ -19,7 +19,6 @@ package rules
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/fs"
|
||||
"os"
|
||||
@@ -102,14 +101,14 @@ func validateCrdsDir(crdsPath string) error {
|
||||
|
||||
func validateCrdAPIVersion(obj *k8sYamlStruct) error {
|
||||
if !strings.HasPrefix(obj.APIVersion, "apiextensions.k8s.io") {
|
||||
return fmt.Errorf("apiVersion is not in 'apiextensions.k8s.io'")
|
||||
return errors.New("apiVersion is not in 'apiextensions.k8s.io'")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func validateCrdKind(obj *k8sYamlStruct) error {
|
||||
if obj.Kind != "CustomResourceDefinition" {
|
||||
return fmt.Errorf("object kind is not 'CustomResourceDefinition'")
|
||||
return errors.New("object kind is not 'CustomResourceDefinition'")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ limitations under the License.
|
||||
package rules
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -47,7 +48,7 @@ func ValuesWithOverrides(linter *support.Linter, valueOverrides map[string]any,
|
||||
func validateValuesFileExistence(valuesPath string) error {
|
||||
_, err := os.Stat(valuesPath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("file does not exist")
|
||||
return errors.New("file does not exist")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ func LoadFile(name string) (*chart.Chart, error) {
|
||||
c, err := LoadArchive(raw)
|
||||
if err != nil {
|
||||
if errors.Is(err, gzip.ErrHeader) {
|
||||
return nil, fmt.Errorf("file '%s' does not appear to be a valid chart file (details: %s)", name, err)
|
||||
return nil, fmt.Errorf("file '%s' does not appear to be a valid chart file (details: %w)", name, err)
|
||||
}
|
||||
}
|
||||
return c, err
|
||||
|
||||
@@ -16,6 +16,7 @@ limitations under the License.
|
||||
package v3
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -181,7 +182,7 @@ func TestValidate(t *testing.T) {
|
||||
|
||||
for _, tt := range tests {
|
||||
result := tt.md.Validate()
|
||||
if result != tt.err {
|
||||
if !errors.Is(result, tt.err) {
|
||||
t.Errorf("expected %q, got %q in test %q", tt.err, result, tt.name)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ func TestLoadChartfile(t *testing.T) {
|
||||
|
||||
func verifyChartfile(t *testing.T, f *chart.Metadata, name string) {
|
||||
t.Helper()
|
||||
if f == nil { //nolint:staticcheck
|
||||
if f == nil {
|
||||
t.Fatal("Failed verifyChartfile because f is nil")
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ func verifyChartfile(t *testing.T, f *chart.Metadata, name string) {
|
||||
}
|
||||
|
||||
if len(f.Sources) != 1 {
|
||||
t.Fatalf("Unexpected number of sources")
|
||||
t.Fatal("Unexpected number of sources")
|
||||
}
|
||||
|
||||
if f.Sources[0] != "https://example.com/foo/bar" {
|
||||
@@ -84,7 +84,7 @@ func verifyChartfile(t *testing.T, f *chart.Metadata, name string) {
|
||||
}
|
||||
|
||||
if len(f.Annotations) != 2 {
|
||||
t.Fatalf("Unexpected annotations")
|
||||
t.Fatal("Unexpected annotations")
|
||||
}
|
||||
|
||||
if want, got := "extravalue", f.Annotations["extrakey"]; want != got {
|
||||
|
||||
@@ -63,7 +63,7 @@ func TestLoadDependency(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDependencyEnabled(t *testing.T) {
|
||||
type M = map[string]interface{}
|
||||
type M = map[string]any
|
||||
tests := []struct {
|
||||
name string
|
||||
v M
|
||||
@@ -385,7 +385,7 @@ func TestGetAliasDependency(t *testing.T) {
|
||||
req := c.Metadata.Dependencies
|
||||
|
||||
if len(req) == 0 {
|
||||
t.Fatalf("there are no dependencies to test")
|
||||
t.Fatal("there are no dependencies to test")
|
||||
}
|
||||
|
||||
// Success case
|
||||
@@ -403,7 +403,7 @@ func TestGetAliasDependency(t *testing.T) {
|
||||
|
||||
if req[0].Version != "" {
|
||||
if !IsCompatibleRange(req[0].Version, aliasChart.Metadata.Version) {
|
||||
t.Fatalf("dependency chart version is not in the compatible range")
|
||||
t.Fatal("dependency chart version is not in the compatible range")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -415,7 +415,7 @@ func TestGetAliasDependency(t *testing.T) {
|
||||
|
||||
req[0].Version = "something else which is not in the compatible range"
|
||||
if IsCompatibleRange(req[0].Version, aliasChart.Metadata.Version) {
|
||||
t.Fatalf("dependency chart version which is not in the compatible range should cause a failure other than a success ")
|
||||
t.Fatal("dependency chart version outside the compatible range should not be considered compatible")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,8 +21,8 @@ import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path"
|
||||
@@ -87,7 +87,7 @@ func TestSave(t *testing.T) {
|
||||
t.Fatalf("Schema data did not match.\nExpected:\n%s\nActual:\n%s", formattedExpected, formattedActual)
|
||||
}
|
||||
if _, err := Save(&chartWithInvalidJSON, dest); err == nil {
|
||||
t.Fatalf("Invalid JSON was not caught while saving chart")
|
||||
t.Fatal("Invalid JSON was not caught while saving chart")
|
||||
}
|
||||
|
||||
c.Metadata.APIVersion = chart.APIVersionV3
|
||||
@@ -153,7 +153,7 @@ func TestSavePreservesTimestamps(t *testing.T) {
|
||||
Version: "1.2.3",
|
||||
},
|
||||
ModTime: initialCreateTime,
|
||||
Values: map[string]interface{}{
|
||||
Values: map[string]any{
|
||||
"imageName": "testimage",
|
||||
"imageId": 42,
|
||||
},
|
||||
@@ -353,5 +353,5 @@ func sha256Sum(filePath string) (string, error) {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%x", h.Sum(nil)), nil
|
||||
return hex.EncodeToString(h.Sum(nil)), nil
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ package installer // import "helm.sh/helm/v4/internal/plugin/installer"
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
@@ -143,7 +144,7 @@ func (i *HTTPInstaller) Install() error {
|
||||
// Update updates a local repository
|
||||
// Not implemented for now since tarball most likely will be packaged by version
|
||||
func (i *HTTPInstaller) Update() error {
|
||||
return fmt.Errorf("method Update() not implemented for HttpInstaller")
|
||||
return errors.New("method Update() not implemented for HttpInstaller")
|
||||
}
|
||||
|
||||
// Path is overridden because we want to join on the plugin name not the file name
|
||||
@@ -163,7 +164,7 @@ func (i *HTTPInstaller) SupportsVerification() bool {
|
||||
// GetVerificationData returns cached plugin and provenance data for verification
|
||||
func (i *HTTPInstaller) GetVerificationData() (archiveData, provData []byte, filename string, err error) {
|
||||
if !i.SupportsVerification() {
|
||||
return nil, nil, "", fmt.Errorf("verification not supported for this source")
|
||||
return nil, nil, "", errors.New("verification not supported for this source")
|
||||
}
|
||||
|
||||
// Download plugin data once and cache it
|
||||
|
||||
@@ -150,7 +150,7 @@ func TestHTTPInstallerNonExistentVersion(t *testing.T) {
|
||||
|
||||
// inject fake http client responding with error
|
||||
httpInstaller.getter = &TestHTTPGetter{
|
||||
MockError: fmt.Errorf("failed to download plugin for some reason"),
|
||||
MockError: errors.New("failed to download plugin for some reason"),
|
||||
}
|
||||
|
||||
// attempt to install the plugin
|
||||
|
||||
@@ -87,7 +87,7 @@ func InstallWithOptions(i Installer, opts Options) (*VerificationResult, error)
|
||||
if opts.Verify {
|
||||
verifier, ok := i.(Verifier)
|
||||
if !ok || !verifier.SupportsVerification() {
|
||||
return nil, fmt.Errorf("--verify is only supported for plugin tarballs (.tgz files)")
|
||||
return nil, errors.New("--verify is only supported for plugin tarballs (.tgz files)")
|
||||
}
|
||||
|
||||
// Get verification data (works for both memory and file-based installers)
|
||||
@@ -137,7 +137,7 @@ func Update(i Installer) error {
|
||||
|
||||
// NewForSource determines the correct Installer for the given source.
|
||||
func NewForSource(source, version string) (installer Installer, err error) {
|
||||
if strings.HasPrefix(source, fmt.Sprintf("%s://", registry.OCIScheme)) {
|
||||
if strings.HasPrefix(source, registry.OCIScheme+"://") {
|
||||
// Source is an OCI registry reference
|
||||
installer, err = NewOCIInstaller(source)
|
||||
} else if isLocalReference(source) {
|
||||
|
||||
@@ -188,7 +188,7 @@ func (i *LocalInstaller) SupportsVerification() bool {
|
||||
// GetVerificationData loads plugin and provenance data from local files for verification
|
||||
func (i *LocalInstaller) GetVerificationData() (archiveData, provData []byte, filename string, err error) {
|
||||
if !i.SupportsVerification() {
|
||||
return nil, nil, "", fmt.Errorf("verification not supported for directories")
|
||||
return nil, nil, "", errors.New("verification not supported for directories")
|
||||
}
|
||||
|
||||
// Read and cache the plugin archive file
|
||||
|
||||
@@ -19,6 +19,7 @@ import (
|
||||
"archive/tar"
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"errors"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
@@ -64,7 +65,7 @@ func TestLocalInstallerNotAFolder(t *testing.T) {
|
||||
if err == nil {
|
||||
t.Fatal("expected error")
|
||||
}
|
||||
if err != ErrPluginNotADirectory {
|
||||
if !errors.Is(err, ErrPluginNotADirectory) {
|
||||
t.Fatalf("expected error to equal: %q", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ func (i *OCIInstaller) Install() error {
|
||||
|
||||
// Check if this is a gzip compressed file
|
||||
if len(i.pluginData) < 2 || i.pluginData[0] != 0x1f || i.pluginData[1] != 0x8b {
|
||||
return fmt.Errorf("plugin data is not a gzip compressed archive")
|
||||
return errors.New("plugin data is not a gzip compressed archive")
|
||||
}
|
||||
|
||||
// Create cache directory
|
||||
|
||||
@@ -82,7 +82,7 @@ command: "$HELM_PLUGIN_DIR/bin/%s"
|
||||
// Add executable
|
||||
execContent := fmt.Sprintf("#!/bin/sh\necho '%s test plugin'", pluginName)
|
||||
execHeader := &tar.Header{
|
||||
Name: fmt.Sprintf("bin/%s", pluginName),
|
||||
Name: "bin/" + pluginName,
|
||||
Mode: 0755,
|
||||
Size: int64(len(execContent)),
|
||||
Typeflag: tar.TypeReg,
|
||||
|
||||
@@ -90,14 +90,14 @@ func TestVCSInstaller(t *testing.T) {
|
||||
|
||||
// Install again to test plugin exists error
|
||||
if err := Install(i); err == nil {
|
||||
t.Fatalf("expected error for plugin exists, got none")
|
||||
t.Fatal("expected error for plugin exists, got none")
|
||||
} else if err.Error() != "plugin already exists" {
|
||||
t.Fatalf("expected error for plugin exists, got (%v)", err)
|
||||
}
|
||||
|
||||
// Testing FindSource method, expect error because plugin code is not a cloned repository
|
||||
if _, err := FindSource(i.Path()); err == nil {
|
||||
t.Fatalf("expected error for inability to find plugin source, got none")
|
||||
t.Fatal("expected error for inability to find plugin source, got none")
|
||||
} else if err.Error() != "cannot get information about plugin source" {
|
||||
t.Fatalf("expected error for inability to find plugin source, got (%v)", err)
|
||||
}
|
||||
@@ -120,7 +120,7 @@ func TestVCSInstallerNonExistentVersion(t *testing.T) {
|
||||
}
|
||||
|
||||
if err := Install(i); err == nil {
|
||||
t.Fatalf("expected error for version does not exists, got none")
|
||||
t.Fatal("expected error for version does not exists, got none")
|
||||
} else if strings.Contains(err.Error(), "Could not resolve host: github.com") {
|
||||
t.Skip("Unable to run test without Internet access")
|
||||
} else if err.Error() != fmt.Sprintf("requested version %q does not exist for plugin %q", version, source) {
|
||||
@@ -181,7 +181,7 @@ func TestVCSInstallerUpdate(t *testing.T) {
|
||||
}
|
||||
// Testing update for error
|
||||
if err := Update(vcsInstaller); err == nil {
|
||||
t.Fatalf("expected error for plugin modified, got none")
|
||||
t.Fatal("expected error for plugin modified, got none")
|
||||
} else if err.Error() != "plugin repo was modified" {
|
||||
t.Fatalf("expected error for plugin modified, got (%v)", err)
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ func TestInstallWithOptions_VerifyWithValidProvenance(t *testing.T) {
|
||||
|
||||
// Should fail due to invalid signature (empty keyring) but we test that it gets past the hash check
|
||||
if err == nil {
|
||||
t.Fatalf("Expected installation to fail with empty keyring")
|
||||
t.Fatal("Expected installation to fail with empty keyring")
|
||||
}
|
||||
if !strings.Contains(err.Error(), "plugin verification failed") {
|
||||
t.Errorf("Expected plugin verification failed error, got: %v", err)
|
||||
@@ -218,7 +218,7 @@ func TestInstallWithOptions_VerifyDirectoryNotSupported(t *testing.T) {
|
||||
|
||||
// Should fail with verification not supported error
|
||||
if err == nil {
|
||||
t.Fatalf("Expected installation to fail with verification not supported error")
|
||||
t.Fatal("Expected installation to fail with verification not supported error")
|
||||
}
|
||||
if !strings.Contains(err.Error(), "--verify is only supported for plugin tarballs") {
|
||||
t.Errorf("Expected verification not supported error, got: %v", err)
|
||||
@@ -257,7 +257,7 @@ func TestInstallWithOptions_VerifyMismatchedProvenance(t *testing.T) {
|
||||
|
||||
// Should fail with verification error
|
||||
if err == nil {
|
||||
t.Fatalf("Expected installation to fail with hash mismatch")
|
||||
t.Fatal("Expected installation to fail with hash mismatch")
|
||||
}
|
||||
if !strings.Contains(err.Error(), "plugin verification failed") {
|
||||
t.Errorf("Expected plugin verification failed error, got: %v", err)
|
||||
@@ -298,7 +298,7 @@ func TestInstallWithOptions_VerifyProvenanceAccessError(t *testing.T) {
|
||||
|
||||
// Should fail with access error (either at stat level or during verification)
|
||||
if err == nil {
|
||||
t.Fatalf("Expected installation to fail with provenance file access error")
|
||||
t.Fatal("Expected installation to fail with provenance file access error")
|
||||
}
|
||||
// The error could be either "failed to access provenance file" or "plugin verification failed"
|
||||
// depending on when the permission error occurs
|
||||
|
||||
@@ -17,7 +17,6 @@ package plugin
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
@@ -71,7 +70,7 @@ func TestLoadDir(t *testing.T) {
|
||||
}
|
||||
return Metadata{
|
||||
APIVersion: apiVersion,
|
||||
Name: fmt.Sprintf("hello-%s", apiVersion),
|
||||
Name: "hello-" + apiVersion,
|
||||
Version: "0.1.0",
|
||||
Type: "cli/v1",
|
||||
Runtime: "subprocess",
|
||||
|
||||
@@ -58,23 +58,23 @@ func (m Metadata) Validate() error {
|
||||
}
|
||||
|
||||
if m.APIVersion == "" {
|
||||
errs = append(errs, fmt.Errorf("empty APIVersion"))
|
||||
errs = append(errs, errors.New("empty APIVersion"))
|
||||
}
|
||||
|
||||
if m.Type == "" {
|
||||
errs = append(errs, fmt.Errorf("empty type field"))
|
||||
errs = append(errs, errors.New("empty type field"))
|
||||
}
|
||||
|
||||
if m.Runtime == "" {
|
||||
errs = append(errs, fmt.Errorf("empty runtime field"))
|
||||
errs = append(errs, errors.New("empty runtime field"))
|
||||
}
|
||||
|
||||
if m.Config == nil {
|
||||
errs = append(errs, fmt.Errorf("missing config field"))
|
||||
errs = append(errs, errors.New("missing config field"))
|
||||
}
|
||||
|
||||
if m.RuntimeConfig == nil {
|
||||
errs = append(errs, fmt.Errorf("missing runtimeConfig field"))
|
||||
errs = append(errs, errors.New("missing runtimeConfig field"))
|
||||
}
|
||||
|
||||
// Validate the config itself
|
||||
|
||||
@@ -16,6 +16,7 @@ limitations under the License.
|
||||
package plugin
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"unicode"
|
||||
@@ -74,11 +75,11 @@ func (m *MetadataLegacy) Validate() error {
|
||||
m.Usage = sanitizeString(m.Usage)
|
||||
|
||||
if len(m.PlatformCommand) > 0 && len(m.Command) > 0 {
|
||||
return fmt.Errorf("both platformCommand and command are set")
|
||||
return errors.New("both platformCommand and command are set")
|
||||
}
|
||||
|
||||
if len(m.PlatformHooks) > 0 && len(m.Hooks) > 0 {
|
||||
return fmt.Errorf("both platformHooks and hooks are set")
|
||||
return errors.New("both platformHooks and hooks are set")
|
||||
}
|
||||
|
||||
// Validate downloader plugins
|
||||
|
||||
@@ -16,6 +16,7 @@ limitations under the License.
|
||||
package plugin
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
@@ -48,7 +49,7 @@ type MetadataV1 struct {
|
||||
|
||||
func (m *MetadataV1) Validate() error {
|
||||
if !validPluginName.MatchString(m.Name) {
|
||||
return fmt.Errorf("invalid plugin `name`")
|
||||
return errors.New("invalid plugin `name`")
|
||||
}
|
||||
|
||||
if m.APIVersion != "v1" {
|
||||
@@ -56,11 +57,11 @@ func (m *MetadataV1) Validate() error {
|
||||
}
|
||||
|
||||
if m.Type == "" {
|
||||
return fmt.Errorf("`type` missing")
|
||||
return errors.New("`type` missing")
|
||||
}
|
||||
|
||||
if m.Runtime == "" {
|
||||
return fmt.Errorf("`runtime` missing")
|
||||
return errors.New("`runtime` missing")
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@@ -117,8 +117,8 @@ func (r *SubprocessPluginRuntime) InvokeWithEnv(main string, argv []string, env
|
||||
cmd.Env = slices.Clone(os.Environ())
|
||||
cmd.Env = append(
|
||||
cmd.Env,
|
||||
fmt.Sprintf("HELM_PLUGIN_NAME=%s", r.metadata.Name),
|
||||
fmt.Sprintf("HELM_PLUGIN_DIR=%s", r.pluginDir))
|
||||
"HELM_PLUGIN_NAME="+r.metadata.Name,
|
||||
"HELM_PLUGIN_DIR="+r.pluginDir)
|
||||
cmd.Env = append(cmd.Env, env...)
|
||||
|
||||
cmd.Stdin = stdin
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
"strconv"
|
||||
|
||||
"helm.sh/helm/v4/internal/plugin/schema"
|
||||
)
|
||||
@@ -63,7 +64,7 @@ func (r *SubprocessPluginRuntime) runGetter(input *Input) (*Output, error) {
|
||||
env["HELM_PLUGIN_DIR"] = r.pluginDir
|
||||
env["HELM_PLUGIN_USERNAME"] = msg.Options.Username
|
||||
env["HELM_PLUGIN_PASSWORD"] = msg.Options.Password
|
||||
env["HELM_PLUGIN_PASS_CREDENTIALS_ALL"] = fmt.Sprintf("%t", msg.Options.PassCredentialsAll)
|
||||
env["HELM_PLUGIN_PASS_CREDENTIALS_ALL"] = strconv.FormatBool(msg.Options.PassCredentialsAll)
|
||||
|
||||
command, args, err := PrepareCommands(d.PlatformCommand, false, []string{}, env)
|
||||
if err != nil {
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
package schema
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
@@ -55,7 +56,7 @@ type ConfigGetterV1 struct {
|
||||
|
||||
func (c *ConfigGetterV1) Validate() error {
|
||||
if len(c.Protocols) == 0 {
|
||||
return fmt.Errorf("getter has no protocols")
|
||||
return errors.New("getter has no protocols")
|
||||
}
|
||||
for i, protocol := range c.Protocols {
|
||||
if protocol == "" {
|
||||
|
||||
@@ -23,7 +23,7 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/ProtonMail/go-crypto/openpgp/clearsign" //nolint
|
||||
"github.com/ProtonMail/go-crypto/openpgp/clearsign"
|
||||
|
||||
"helm.sh/helm/v4/pkg/helmpath"
|
||||
)
|
||||
|
||||
@@ -16,7 +16,7 @@ limitations under the License.
|
||||
package plugin
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"errors"
|
||||
"os"
|
||||
"runtime"
|
||||
"strings"
|
||||
@@ -80,7 +80,7 @@ func getPlatformCommand(cmds []PlatformCommand) ([]string, []string) {
|
||||
func PrepareCommands(cmds []PlatformCommand, expandArgs bool, extraArgs []string, env map[string]string) (string, []string, error) {
|
||||
cmdParts, args := getPlatformCommand(cmds)
|
||||
if len(cmdParts) == 0 || cmdParts[0] == "" {
|
||||
return "", nil, fmt.Errorf("no plugin command is applicable")
|
||||
return "", nil, errors.New("no plugin command is applicable")
|
||||
}
|
||||
envMappingFunc := func(key string) string {
|
||||
return env[key]
|
||||
|
||||
@@ -210,7 +210,7 @@ func TestPrepareCommandsNoMatch(t *testing.T) {
|
||||
|
||||
env := map[string]string{}
|
||||
if _, _, err := PrepareCommands(cmds, true, []string{}, env); err == nil {
|
||||
t.Fatalf("Expected error to be returned")
|
||||
t.Fatal("Expected error to be returned")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,7 +219,7 @@ func TestPrepareCommandsNoCommands(t *testing.T) {
|
||||
|
||||
env := map[string]string{}
|
||||
if _, _, err := PrepareCommands(cmds, true, []string{}, env); err == nil {
|
||||
t.Fatalf("Expected error to be returned")
|
||||
t.Fatal("Expected error to be returned")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ type Hook struct {
|
||||
// Events are the events that this hook fires on.
|
||||
Events []HookEvent `json:"events,omitempty"`
|
||||
// LastRun indicates the date/time this was last run.
|
||||
LastRun HookExecution `json:"last_run,omitempty"`
|
||||
LastRun HookExecution `json:"last_run"`
|
||||
// Weight indicates the sort order for execution among similar Hook type
|
||||
Weight int `json:"weight,omitempty"`
|
||||
// DeletePolicies are the policies that indicate when to delete the hook
|
||||
@@ -133,7 +133,7 @@ type hookExecutionJSON struct {
|
||||
// It handles empty string time fields by treating them as zero values.
|
||||
func (h *HookExecution) UnmarshalJSON(data []byte) error {
|
||||
// First try to unmarshal into a map to handle empty string time fields
|
||||
var raw map[string]interface{}
|
||||
var raw map[string]any
|
||||
if err := json.Unmarshal(data, &raw); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -220,7 +220,7 @@ func TestHookExecutionEmptyStringRoundTrip(t *testing.T) {
|
||||
data, err := json.Marshal(&exec)
|
||||
require.NoError(t, err)
|
||||
|
||||
var result map[string]interface{}
|
||||
var result map[string]any
|
||||
err = json.Unmarshal(data, &result)
|
||||
require.NoError(t, err)
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ type infoJSON struct {
|
||||
// It handles empty string time fields by treating them as zero values.
|
||||
func (i *Info) UnmarshalJSON(data []byte) error {
|
||||
// First try to unmarshal into a map to handle empty string time fields
|
||||
var raw map[string]interface{}
|
||||
var raw map[string]any
|
||||
if err := json.Unmarshal(data, &raw); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -272,7 +272,7 @@ func TestInfoEmptyStringRoundTrip(t *testing.T) {
|
||||
data, err := json.Marshal(&info)
|
||||
require.NoError(t, err)
|
||||
|
||||
var result map[string]interface{}
|
||||
var result map[string]any
|
||||
err = json.Unmarshal(data, &result)
|
||||
require.NoError(t, err)
|
||||
|
||||
|
||||
@@ -17,8 +17,8 @@ limitations under the License.
|
||||
package v2
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
v3 "helm.sh/helm/v4/internal/chart/v3"
|
||||
@@ -57,7 +57,7 @@ func Mock(opts *MockReleaseOptions) *Release {
|
||||
|
||||
name := opts.Name
|
||||
if name == "" {
|
||||
name = "testrelease-" + fmt.Sprint(rand.Intn(100))
|
||||
name = "testrelease-" + strconv.Itoa(rand.Intn(100))
|
||||
}
|
||||
|
||||
version := 1
|
||||
@@ -124,7 +124,7 @@ func Mock(opts *MockReleaseOptions) *Release {
|
||||
Name: name,
|
||||
Info: info,
|
||||
Chart: ch,
|
||||
Config: map[string]interface{}{"name": "value"},
|
||||
Config: map[string]any{"name": "value"},
|
||||
Version: version,
|
||||
Namespace: namespace,
|
||||
Hooks: []*Hook{
|
||||
|
||||
@@ -36,7 +36,7 @@ type Release struct {
|
||||
Chart *chart.Chart `json:"chart,omitempty"`
|
||||
// Config is the set of extra Values added to the chart.
|
||||
// These values override the default values inside of the chart.
|
||||
Config map[string]interface{} `json:"config,omitempty"`
|
||||
Config map[string]any `json:"config,omitempty"`
|
||||
// Manifest is the string representation of the rendered template.
|
||||
Manifest string `json:"manifest,omitempty"`
|
||||
// Hooks are all of the hooks declared for this release.
|
||||
|
||||
@@ -137,7 +137,7 @@ func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.H
|
||||
return h
|
||||
}
|
||||
|
||||
func lessByKind(_ interface{}, _ interface{}, kindA string, kindB string, o KindSortOrder) bool {
|
||||
func lessByKind(_ any, _ any, kindA string, kindB string, o KindSortOrder) bool {
|
||||
ordering := make(map[string]int, len(o))
|
||||
for v, k := range o {
|
||||
ordering[k] = v
|
||||
|
||||
@@ -149,7 +149,7 @@ func (r *Resolver) Resolve(reqs []*chart.Dependency, repoNames map[string]string
|
||||
|
||||
} else {
|
||||
// Retrieve list of tags for repository
|
||||
ref := fmt.Sprintf("%s/%s", strings.TrimPrefix(d.Repository, fmt.Sprintf("%s://", registry.OCIScheme)), d.Name)
|
||||
ref := fmt.Sprintf("%s/%s", strings.TrimPrefix(d.Repository, registry.OCIScheme+"://"), d.Name)
|
||||
tags, err := r.registryClient.Tags(ref)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not retrieve list of tags for repository %s: %w", d.Repository, err)
|
||||
|
||||
@@ -112,7 +112,7 @@ func NewTLSConfig(options ...TLSConfigOption) (*tls.Config, error) {
|
||||
if len(to.caPEMBlock) > 0 {
|
||||
cp := x509.NewCertPool()
|
||||
if !cp.AppendCertsFromPEM(to.caPEMBlock) {
|
||||
return nil, fmt.Errorf("failed to append certificates from pem block")
|
||||
return nil, errors.New("failed to append certificates from pem block")
|
||||
}
|
||||
|
||||
config.RootCAs = cp
|
||||
|
||||
@@ -58,10 +58,10 @@ func TestNewTLSConfig(t *testing.T) {
|
||||
t.Fatalf("expecting 1 client certificates, got %d", got)
|
||||
}
|
||||
if cfg.InsecureSkipVerify {
|
||||
t.Fatalf("insecure skip verify mismatch, expecting false")
|
||||
t.Fatal("insecure skip verify mismatch, expecting false")
|
||||
}
|
||||
if cfg.RootCAs == nil {
|
||||
t.Fatalf("mismatch tls RootCAs, expecting non-nil")
|
||||
t.Fatal("mismatch tls RootCAs, expecting non-nil")
|
||||
}
|
||||
}
|
||||
{
|
||||
@@ -77,10 +77,10 @@ func TestNewTLSConfig(t *testing.T) {
|
||||
t.Fatalf("expecting 0 client certificates, got %d", got)
|
||||
}
|
||||
if cfg.InsecureSkipVerify {
|
||||
t.Fatalf("insecure skip verify mismatch, expecting false")
|
||||
t.Fatal("insecure skip verify mismatch, expecting false")
|
||||
}
|
||||
if cfg.RootCAs == nil {
|
||||
t.Fatalf("mismatch tls RootCAs, expecting non-nil")
|
||||
t.Fatal("mismatch tls RootCAs, expecting non-nil")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,10 +97,10 @@ func TestNewTLSConfig(t *testing.T) {
|
||||
t.Fatalf("expecting 1 client certificates, got %d", got)
|
||||
}
|
||||
if cfg.InsecureSkipVerify {
|
||||
t.Fatalf("insecure skip verify mismatch, expecting false")
|
||||
t.Fatal("insecure skip verify mismatch, expecting false")
|
||||
}
|
||||
if cfg.RootCAs != nil {
|
||||
t.Fatalf("mismatch tls RootCAs, expecting nil")
|
||||
t.Fatal("mismatch tls RootCAs, expecting nil")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ limitations under the License.
|
||||
package version
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"errors"
|
||||
"runtime/debug"
|
||||
"slices"
|
||||
|
||||
@@ -27,7 +27,7 @@ import (
|
||||
func K8sIOClientGoModVersion() (string, error) {
|
||||
info, ok := debug.ReadBuildInfo()
|
||||
if !ok {
|
||||
return "", fmt.Errorf("failed to read build info")
|
||||
return "", errors.New("failed to read build info")
|
||||
}
|
||||
|
||||
idx := slices.IndexFunc(info.Deps, func(m *debug.Module) bool {
|
||||
@@ -35,7 +35,7 @@ func K8sIOClientGoModVersion() (string, error) {
|
||||
})
|
||||
|
||||
if idx == -1 {
|
||||
return "", fmt.Errorf("k8s.io/client-go not found in build info")
|
||||
return "", errors.New("k8s.io/client-go not found in build info")
|
||||
}
|
||||
|
||||
m := info.Deps[idx]
|
||||
|
||||
Reference in New Issue
Block a user