From 11eda66eaaef46f904a4465882dfa325eb11204f Mon Sep 17 00:00:00 2001 From: sgandon Date: Tue, 11 Jun 2019 14:52:54 +0200 Subject: [PATCH] feat: make release version templatized (#671) Allows the release version to be a Go template. Resolves #669 --- pkg/state/release.go | 9 +++++++++ pkg/state/state_exec_tmpl_test.go | 7 +++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pkg/state/release.go b/pkg/state/release.go index f3ee680f..39ab4eef 100644 --- a/pkg/state/release.go +++ b/pkg/state/release.go @@ -2,6 +2,7 @@ package state import ( "fmt" + "github.com/roboll/helmfile/pkg/tmpl" "gopkg.in/yaml.v2" ) @@ -39,6 +40,14 @@ func (r ReleaseSpec) ExecuteTemplateExpressions(renderer *tmpl.FileRenderer) (*R } } + { + ts := result.Version + result.Version, err = renderer.RenderTemplateContentToString([]byte(ts)) + if err != nil { + return nil, fmt.Errorf("failed executing template expressions in release \"%s\".version = \"%s\": %v", r.Name, ts, err) + } + } + for i, t := range result.Values { switch ts := t.(type) { case string: diff --git a/pkg/state/state_exec_tmpl_test.go b/pkg/state/state_exec_tmpl_test.go index 220e6fb8..61187cfe 100644 --- a/pkg/state/state_exec_tmpl_test.go +++ b/pkg/state/state_exec_tmpl_test.go @@ -16,7 +16,7 @@ func TestHelmState_executeTemplates(t *testing.T) { name: "Has template expressions in chart, values, and secrets", input: ReleaseSpec{ Chart: "test-charts/{{ .Release.Name }}", - Version: "0.1", + Version: "{{ .Release.Name }}-0.1", Verify: nil, Name: "test-app", Namespace: "test-namespace-{{ .Release.Name }}", @@ -25,7 +25,7 @@ func TestHelmState_executeTemplates(t *testing.T) { }, want: ReleaseSpec{ Chart: "test-charts/test-app", - Version: "0.1", + Version: "test-app-0.1", Verify: nil, Name: "test-app", Namespace: "test-namespace-test-app", @@ -71,6 +71,9 @@ func TestHelmState_executeTemplates(t *testing.T) { if !reflect.DeepEqual(actual.Secrets, tt.want.Secrets) { t.Errorf("expected %+v, got %+v", tt.want.Secrets, actual.Secrets) } + if !reflect.DeepEqual(actual.Version, tt.want.Version) { + t.Errorf("expected %+v, got %+v", tt.want.Version, actual.Version) + } }) } }