From e06abe462017f09c322c3dcd9be0ff909fe77eb7 Mon Sep 17 00:00:00 2001 From: yxxhero <11087727+yxxhero@users.noreply.github.com> Date: Fri, 7 Oct 2022 09:56:32 +0800 Subject: [PATCH] feat: add more clear error message and Environment info for template (#413) * feat: add more clear error message and Environment info for template Signed-off-by: yxxhero * Update pkg/state/state.go Co-authored-by: Yusuke Kuoka Signed-off-by: yxxhero Signed-off-by: yxxhero Co-authored-by: Yusuke Kuoka --- pkg/state/state.go | 10 ++++---- pkg/state/state_test.go | 53 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/pkg/state/state.go b/pkg/state/state.go index 0617bada..bc8bef13 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -3200,7 +3200,7 @@ func (st *HelmState) GenerateOutputFilePath(release *ReleaseSpec, outputFileTemp t, err := template.New("output-file").Parse(outputFileTemplate) if err != nil { - return "", fmt.Errorf("parsing output-file template") + return "", fmt.Errorf("parsing output-file template %q: %w", outputFileTemplate, err) } buf := &bytes.Buffer{} @@ -3213,8 +3213,9 @@ func (st *HelmState) GenerateOutputFilePath(release *ReleaseSpec, outputFileTemp } data := struct { - State state - Release *ReleaseSpec + State state + Release *ReleaseSpec + Environment *environment.Environment }{ State: state{ BaseName: stateFileName, @@ -3222,7 +3223,8 @@ func (st *HelmState) GenerateOutputFilePath(release *ReleaseSpec, outputFileTemp AbsPath: stateAbsPath, AbsPathSHA1: sha1sum, }, - Release: release, + Release: release, + Environment: &st.Env, } if err := t.Execute(buf, data); err != nil { diff --git a/pkg/state/state_test.go b/pkg/state/state_test.go index 7cbb659b..bef732f1 100644 --- a/pkg/state/state_test.go +++ b/pkg/state/state_test.go @@ -8,8 +8,10 @@ import ( "testing" "github.com/Masterminds/semver/v3" + "github.com/stretchr/testify/require" "github.com/variantdev/vals" + "github.com/helmfile/helmfile/pkg/environment" "github.com/helmfile/helmfile/pkg/exectest" "github.com/helmfile/helmfile/pkg/filesystem" "github.com/helmfile/helmfile/pkg/helmexec" @@ -2542,3 +2544,54 @@ func Test_gatherUsernamePassword(t *testing.T) { }) } } + +func TestGenerateOutputFilePath(t *testing.T) { + tests := []struct { + envName string + filePath string + releaseName string + outputFileTemplate string + wantErr bool + expected string + }{ + { + envName: "dev", + releaseName: "release1", + filePath: "/path/to/helmfile.yaml", + outputFileTemplate: "helmfile-{{ .Environment.Name }}.yaml", + expected: "helmfile-dev.yaml", + }, + { + envName: "error", + releaseName: "release2", + filePath: "helmfile.yaml", + outputFileTemplate: "helmfile-{{ .Environment.Name", + wantErr: true, + expected: "", + }, + } + + for _, tt := range tests { + t.Run(tt.envName, func(t *testing.T) { + st := &HelmState{ + FilePath: tt.envName, + ReleaseSetSpec: ReleaseSetSpec{ + Env: environment.Environment{ + Name: tt.envName, + }, + }, + } + ra := &ReleaseSpec{ + Name: tt.releaseName, + } + got, err := st.GenerateOutputFilePath(ra, tt.outputFileTemplate) + + if tt.wantErr { + require.Errorf(t, err, "GenerateOutputFilePath() error = %v, want error", err) + } else { + require.NoError(t, err, "GenerateOutputFilePath() error = %v, want nil", err) + } + require.Equalf(t, got, tt.expected, "GenerateOutputFilePath() got = %v, want %v", got, tt.expected) + }) + } +}