From 3db78851b43b21975bd7f8540a4889d4a907c88e Mon Sep 17 00:00:00 2001
From: Artem <19182088+art-shutter@users.noreply.github.com>
Date: Mon, 20 Jan 2025 13:05:21 +0100
Subject: [PATCH] feat: add buildDependenciesSkipRefresh option to HelmRelease
for skipping refresh of built dependencies
---
docs-v2/content/en/schemas/v4beta12.json | 7 +++++++
pkg/skaffold/render/renderer/helm/helm.go | 6 +++++-
pkg/skaffold/schema/latest/config.go | 6 ++++--
3 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/docs-v2/content/en/schemas/v4beta12.json b/docs-v2/content/en/schemas/v4beta12.json
index 24cd4c39e4d..ac871247196 100755
--- a/docs-v2/content/en/schemas/v4beta12.json
+++ b/docs-v2/content/en/schemas/v4beta12.json
@@ -2365,6 +2365,12 @@
"name"
],
"properties": {
+ "buildDependenciesSkipRefresh": {
+ "type": "boolean",
+ "description": "should the refresh of already built dependencies be skipped. Ignored when `skipBuildDependencies` is `false`.",
+ "x-intellij-html-description": "should the refresh of already built dependencies be skipped. Ignored when skipBuildDependencies
is false
.",
+ "default": "false"
+ },
"chartPath": {
"type": "string",
"description": "local path to a packaged Helm chart or an unpacked Helm chart directory.",
@@ -2494,6 +2500,7 @@
"wait",
"recreatePods",
"skipBuildDependencies",
+ "buildDependenciesSkipRefresh",
"skipTests",
"useHelmSecrets",
"repo",
diff --git a/pkg/skaffold/render/renderer/helm/helm.go b/pkg/skaffold/render/renderer/helm/helm.go
index b442214e5a6..7e04cdd0ad0 100644
--- a/pkg/skaffold/render/renderer/helm/helm.go
+++ b/pkg/skaffold/render/renderer/helm/helm.go
@@ -208,7 +208,11 @@ func (h Helm) generateHelmManifest(ctx context.Context, builds []graph.Artifact,
// Build Chart dependencies, but allow a user to skip it.
if !release.SkipBuildDependencies && release.ChartPath != "" {
log.Entry(ctx).Info("Building helm dependencies...")
- if err := helm.ExecWithStdoutAndStderr(ctx, h, io.Discard, errBuffer, false, env, "dep", "build", release.ChartPath); err != nil {
+ cmdArgs := []string{"dep", "build", release.ChartPath}
+ if release.BuildDependenciesSkipRefresh {
+ cmdArgs = []string{"dep", "build", "--skip-refresh", release.ChartPath}
+ }
+ if err := helm.ExecWithStdoutAndStderr(ctx, h, io.Discard, errBuffer, false, env, cmdArgs...); err != nil {
log.Entry(ctx).Info(errBuffer.String())
return nil, helm.UserErr("building helm dependencies", err)
}
diff --git a/pkg/skaffold/schema/latest/config.go b/pkg/skaffold/schema/latest/config.go
index 90865a21b04..1ba9d05e094 100644
--- a/pkg/skaffold/schema/latest/config.go
+++ b/pkg/skaffold/schema/latest/config.go
@@ -1050,6 +1050,10 @@ type HelmRelease struct {
// Ignored for `remoteChart`.
SkipBuildDependencies bool `yaml:"skipBuildDependencies,omitempty"`
+ // BuildDependenciesSkipRefresh should the refresh of already built dependencies be skipped.
+ // Ignored when `skipBuildDependencies` is `false`.
+ BuildDependenciesSkipRefresh bool `yaml:"buildDependenciesSkipRefresh,omitempty"`
+
// SkipTests should ignore helm test during manifests generation.
// Defaults to `false`
SkipTests bool `yaml:"skipTests,omitempty"`
@@ -1856,7 +1860,6 @@ func (clusterDetails *ClusterDetails) UnmarshalYAML(value *yaml.Node) error {
// Unmarshal the remaining values
aux := (*ClusterDetailsForUnmarshaling)(clusterDetails)
err = yaml.Unmarshal(remaining, aux)
-
if err != nil {
return err
}
@@ -1883,7 +1886,6 @@ func (ka *KanikoArtifact) UnmarshalYAML(value *yaml.Node) error {
// Unmarshal the remaining values
aux := (*KanikoArtifactForUnmarshaling)(ka)
err = yaml.Unmarshal(remaining, aux)
-
if err != nil {
return err
}