Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions pkg/skaffold/deploy/helm/helm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1614,21 +1614,21 @@ func TestHelmRender(t *testing.T) {
description: "render with remote chart",
shouldErr: false,
commands: testutil.
CmdRunWithOutput("helm version", version31).AndRun("helm --kube-context kubecontext template skaffold-helm-remote stable/chartmuseum --repo https://charts.helm.sh/stable --kubeconfig kubeconfig"),
CmdRun("helm --kube-context kubecontext template skaffold-helm-remote stable/chartmuseum --repo https://charts.helm.sh/stable --kubeconfig kubeconfig"),
helm: testDeployRemoteChart,
},
{
description: "render with remote chart with version",
shouldErr: false,
commands: testutil.
CmdRunWithOutput("helm version", version31).AndRun("helm --kube-context kubecontext template skaffold-helm-remote stable/chartmuseum --version 1.0.0 --repo https://charts.helm.sh/stable --kubeconfig kubeconfig"),
CmdRun("helm --kube-context kubecontext template skaffold-helm-remote stable/chartmuseum --version 1.0.0 --repo https://charts.helm.sh/stable --kubeconfig kubeconfig"),
helm: testDeployRemoteChartVersion,
},
{
description: "render without building chart dependencies",
shouldErr: false,
commands: testutil.
CmdRunWithOutput("helm version", version31).AndRun("helm --kube-context kubecontext template skaffold-helm stable/chartmuseum --kubeconfig kubeconfig"),
CmdRun("helm --kube-context kubecontext template skaffold-helm stable/chartmuseum --kubeconfig kubeconfig"),
helm: testDeploySkipBuildDependencies,
},
// https://github.com/GoogleContainerTools/skaffold/issues/7595
Expand Down Expand Up @@ -1673,7 +1673,7 @@ func TestHelmRender(t *testing.T) {
description: "render with useHelmSecrets",
shouldErr: false,
commands: testutil.
CmdRunWithOutput("helm version", version31).AndRun("helm secrets --kube-context kubecontext template skaffold-helm examples/test --set some.key=somevalue --kubeconfig kubeconfig"),
CmdRun("helm secrets --kube-context kubecontext template skaffold-helm examples/test --set some.key=somevalue --kubeconfig kubeconfig"),
helm: testDeployChartWithUseHelmSecrets,
},
}
Expand Down
43 changes: 29 additions & 14 deletions pkg/skaffold/render/renderer/helm/helm.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"io"
"os"
"strings"
"sync"

"github.com/blang/semver"
"gopkg.in/yaml.v3"
Expand Down Expand Up @@ -61,7 +62,7 @@ type Helm struct {
labels map[string]string
enableDebug bool
overrideProtocols []string
helmVersion semver.Version
helmVersion func(ctx context.Context) (semver.Version, error)

manifestOverrides map[string]string
transformAllowlist map[apimachinery.GroupKind]latest.ResourceFilter
Expand All @@ -81,22 +82,15 @@ func (h Helm) ManifestOverrides() map[string]string {
}

func New(ctx context.Context, cfg render.Config, rCfg latest.RenderConfig, labels map[string]string, configName string, manifestOverrides map[string]string) (Helm, error) {
var helmVersion semver.Version
var err error
if RendererHelmVersionOverride != nil {
helmVersion = *RendererHelmVersionOverride
} else {
helmVersion, err = helm.BinVer(ctx)
if err != nil {
return Helm{}, helm.VersionGetErr(err)
}
}

generator := generate.NewGenerator(cfg.GetWorkingDir(), rCfg.Generate, "")
transformAllowlist, transformDenylist, err := util.ConsolidateTransformConfiguration(cfg)
if err != nil {
return Helm{}, err
}

helmVersionStored := semver.Version{}
helmVersionMutex := sync.Mutex{}

return Helm{
configName: configName,
Generator: generator,
Expand All @@ -110,8 +104,25 @@ func New(ctx context.Context, cfg render.Config, rCfg latest.RenderConfig, label
labels: labels,
namespace: cfg.GetKubeNamespace(),
manifestOverrides: manifestOverrides,
helmVersion: helmVersion,

helmVersion: func(ctx context.Context) (semver.Version, error) {
if RendererHelmVersionOverride != nil {
return *RendererHelmVersionOverride, nil
}

helmVersionMutex.Lock()
defer helmVersionMutex.Unlock()

if !helmVersionStored.Equals(semver.Version{}) {
return helmVersionStored, nil
}
helmVersion, err := helm.BinVer(ctx)
if err != nil {
return semver.Version{}, helm.VersionGetErr(err)
}
helmVersionStored = helmVersion
return helmVersionStored, nil
},
transformAllowlist: transformAllowlist,
transformDenylist: transformDenylist,
}, nil
Expand Down Expand Up @@ -147,7 +158,11 @@ func (h Helm) generateHelmManifests(ctx context.Context, builds []graph.Artifact
helmEnv = append(helmEnv, filterEnv...)

var cleanUpPostRenderer func()
cleanUpPostRenderer, postRendererArgs, err = helm.PreparePostRenderer(ctx, h, skaffoldBinary, h.helmVersion)
helmVersion, err := h.helmVersion(ctx)
if err != nil {
return nil, fmt.Errorf("could not get helm version: %w", err)
}
cleanUpPostRenderer, postRendererArgs, err = helm.PreparePostRenderer(ctx, h, skaffoldBinary, helmVersion)
if err != nil {
return nil, err
}
Expand Down
Loading