diff --git a/docs/builtin-objects.md b/docs/builtin-objects.md index c389eb1a..a3039854 100644 --- a/docs/builtin-objects.md +++ b/docs/builtin-objects.md @@ -52,6 +52,7 @@ releases: - `Release.Labels`: The labels to be applied to the release - `Release.Chart`: The chart name of the release - `Release.KubeContext`: The kube context to be used for the release + - `Release.ChartVersion`: The version of the current chart - `Values`: Values passed into the environment. - `StateValues`: alias for `Values`. - `Environment`: The information about the environment. This is set by the diff --git a/pkg/state/state_exec_tmpl.go b/pkg/state/state_exec_tmpl.go index 23684d4b..2a8e3877 100644 --- a/pkg/state/state_exec_tmpl.go +++ b/pkg/state/state_exec_tmpl.go @@ -28,11 +28,12 @@ func (st *HelmState) createReleaseTemplateData(release *ReleaseSpec, vals map[st Chart: st.OverrideChart, Values: vals, Release: releaseTemplateDataRelease{ - Name: release.Name, - Chart: release.Chart, - Namespace: release.Namespace, - Labels: release.Labels, - KubeContext: release.KubeContext, + Name: release.Name, + Chart: release.Chart, + Namespace: release.Namespace, + Labels: release.Labels, + KubeContext: release.KubeContext, + ChartVersion: release.Version, }, } tmplData.StateValues = &tmplData.Values diff --git a/pkg/state/state_exec_tmpl_test.go b/pkg/state/state_exec_tmpl_test.go index 2bb57b0a..33a0a47c 100644 --- a/pkg/state/state_exec_tmpl_test.go +++ b/pkg/state/state_exec_tmpl_test.go @@ -32,8 +32,8 @@ func TestHelmState_executeTemplates(t *testing.T) { Version: "{{ .Release.Name }}-0.1", Name: "test-app", Namespace: "test-namespace-{{ .Release.Name }}", - ValuesTemplate: []any{"config/{{ .Environment.Name }}/{{ .Release.Name }}/values.yaml"}, - Secrets: []any{"config/{{ .Environment.Name }}/{{ .Release.Name }}/secrets.yaml"}, + ValuesTemplate: []any{"config/{{ .Environment.Name }}/{{ .Release.Name }}/{{ .Release.ChartVersion }}/values.yaml"}, + Secrets: []any{"config/{{ .Environment.Name }}/{{ .Release.Name }}/{{ .Release.ChartVersion }}/secrets.yaml"}, Labels: map[string]string{"id": "{{ .Release.Name }}"}, }, want: ReleaseSpec{ @@ -41,8 +41,8 @@ func TestHelmState_executeTemplates(t *testing.T) { Version: "test-app-0.1", Name: "test-app", Namespace: "test-namespace-test-app", - Values: []any{"config/test_env/test-app/values.yaml"}, - Secrets: []any{"config/test_env/test-app/secrets.yaml"}, + Values: []any{"config/test_env/test-app/test-app-0.1/values.yaml"}, + Secrets: []any{"config/test_env/test-app/test-app-0.1/secrets.yaml"}, Labels: map[string]string{"id": "test-app"}, }, }, @@ -89,20 +89,24 @@ func TestHelmState_executeTemplates(t *testing.T) { Chart: "test-charts/chart", Name: "test-app", Namespace: "dev", + Version: "1.5", SetValuesTemplate: []SetValue{ {Name: "val1", Value: "{{ .Release.Name }}-val1"}, {Name: "val2", File: "{{ .Release.Name }}.yml"}, {Name: "val3", Values: []string{"{{ .Release.Name }}-val2", "{{ .Release.Name }}-val3"}}, + {Name: "val4", Value: "{{ .Release.Chart }}-{{ .Release.ChartVersion}}"}, }, }, want: ReleaseSpec{ Chart: "test-charts/chart", Name: "test-app", Namespace: "dev", + Version: "1.5", SetValues: []SetValue{ {Name: "val1", Value: "test-app-val1"}, {Name: "val2", File: "test-app.yml"}, {Name: "val3", Values: []string{"test-app-val2", "test-app-val3"}}, + {Name: "val4", Value: "test-charts/chart-1.5"}, }, }, }, @@ -146,6 +150,19 @@ func TestHelmState_executeTemplates(t *testing.T) { }, }, }, + { + name: "Version is empty but used in templates (render as empty string)", + input: ReleaseSpec{ + Name: "test-app", + Chart: "test-charts/{{ .Release.Name }}", + ValuesTemplate: []any{"config/values-{{ .Release.ChartVersion }}.yaml"}, + }, + want: ReleaseSpec{ + Name: "test-app", + Chart: "test-charts/test-app", + Values: []any{"config/values-.yaml"}, + }, + }, } for i := range tests { diff --git a/pkg/state/types.go b/pkg/state/types.go index 87fac86d..b6085f48 100644 --- a/pkg/state/types.go +++ b/pkg/state/types.go @@ -64,6 +64,9 @@ type releaseTemplateDataRelease struct { // Chart is ReleaseSpec.Chart Chart string + // ChartVersion is ReleaseSpec.Version + ChartVersion string + // KubeContext is ReleaseSpec.KubeContext KubeContext string }