From e619a9c6d0fd9559b2c15bd5ab1565f9bbb39d69 Mon Sep 17 00:00:00 2001 From: somaz Date: Thu, 4 Jun 2026 17:30:55 +0900 Subject: [PATCH] fix: honor --release-name instead of generating a random release name Signed-off-by: somaz --- pkg/chart/chart.go | 21 +++++++++++++-------- pkg/chart/chart_test.go | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/pkg/chart/chart.go b/pkg/chart/chart.go index 5b19bb3ba..0ae6c8763 100644 --- a/pkg/chart/chart.go +++ b/pkg/chart/chart.go @@ -207,24 +207,29 @@ func (c *Chart) HasCIValuesFile(path string) bool { } // CreateInstallParams generates a randomized release name and namespace based on the chart path -// and optional buildID. If release_name is specified, the release name is set to that string instead. +// and optional buildID. If releaseName is non-empty it is used verbatim as the release name +// (Helm validates release-name syntax); otherwise a randomized "-" form is used. // If a buildID is specified, it will be part of the generated namespace. func (c *Chart) CreateInstallParams(buildID string, releaseName string) (release string, namespace string) { release = filepath.Base(c.Path()) if release == "." || release == "/" { - if releaseName != "" { - release = releaseName - } else { - yaml := c.Yaml() - release = yaml.Name - } + yaml := c.Yaml() + release = yaml.Name } namespace = release if buildID != "" { namespace = fmt.Sprintf("%s-%s", namespace, buildID) } randomSuffix := util.RandomString(10) - release = util.SanitizeName(fmt.Sprintf("%s-%s", release, randomSuffix), maxNameLength) + if releaseName != "" { + // An explicit --release-name is used verbatim so the release name is + // stable and predictable. Previously it was honored only when the chart + // path resolved to "." or "/", and a random suffix was appended + // unconditionally, which made --release-name appear to be ignored (#198). + release = releaseName + } else { + release = util.SanitizeName(fmt.Sprintf("%s-%s", release, randomSuffix), maxNameLength) + } namespace = util.SanitizeName(fmt.Sprintf("%s-%s", namespace, randomSuffix), maxNameLength) return } diff --git a/pkg/chart/chart_test.go b/pkg/chart/chart_test.go index b95dd9eec..2b3246fae 100644 --- a/pkg/chart/chart_test.go +++ b/pkg/chart/chart_test.go @@ -569,3 +569,23 @@ func TestChart_AdditionalCommandsAreRun(t *testing.T) { }) } } + +func TestChart_CreateInstallParams(t *testing.T) { + chrt, err := NewChart("test_charts/simple-deployment") + assert.Nil(t, err) + + // An explicit release name (--release-name) must be used verbatim, with no + // random suffix appended, so the resulting release name is stable and + // predictable (#198). + release, namespace := chrt.CreateInstallParams("build-id", "my-release") + assert.Equal(t, "my-release", release) + // The namespace is still derived from the chart directory and randomized, + // independent of --release-name. + assert.True(t, strings.HasPrefix(namespace, "simple-deployment-build-id-")) + assert.NotEqual(t, "my-release", namespace) + + // Without a release name the release keeps its historical randomized form. + release, _ = chrt.CreateInstallParams("", "") + assert.True(t, strings.HasPrefix(release, "simple-deployment-")) + assert.NotEqual(t, "simple-deployment", release) +}