Make release template to work on needs (#2099)

It turned out that Helmfile has never had support for release template on `needs`.
This adds that, along with the new end-to-end test suite to verify helmfile template output with snapshot testing involving a real `helmfile build` command.

Ref #2098
This commit is contained in:
Yusuke Kuoka
2022-03-10 18:42:55 +09:00
committed by GitHub
parent 0105ed4df3
commit dbc40f68b8
9 changed files with 123 additions and 3 deletions
@@ -0,0 +1,50 @@
package helmfile
import (
"context"
"os"
"os/exec"
"path/filepath"
"runtime"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestHelmfileTemplateWithBuildCommand(t *testing.T) {
_, filename, _, _ := runtime.Caller(0)
projectRoot := filepath.Join(filepath.Dir(filename), "..", "..", "..", "..")
helmfileBin := filepath.Join(projectRoot, "helmfile")
testdataDir := "testdata"
entries, err := os.ReadDir(testdataDir)
require.NoError(t, err)
for _, e := range entries {
if !e.IsDir() {
t.Fatalf("Unexpected type of entry at %s", e.Name())
}
name := e.Name()
t.Run(name, func(t *testing.T) {
inputFile := filepath.Join(testdataDir, name, "input.yaml")
want, err := os.ReadFile(filepath.Join(testdataDir, name, "output.yaml"))
require.NoError(t, err)
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
cmd := exec.CommandContext(ctx, helmfileBin, "-f", inputFile, "build")
got, err := cmd.CombinedOutput()
if err != nil {
t.Logf("%s", string(got))
}
require.NoError(t, err)
require.Equal(t, string(want), string(got))
})
}
}
@@ -0,0 +1,27 @@
repositories:
- name: aservo
url: https://aservo.github.io/charts
environments:
default:
---
templates:
defaults: &defaults
name: "{{ .Environment.Name }}-{{`{{ .Release.Labels.service }}`}}"
namespace: "{{ .Environment.Name }}"
releases:
- chart: aservo/util
version: 0.0.1
labels:
service: shared-resources
<<: *defaults
- chart: aservo/util
version: 0.0.1
labels:
service: release-resources
<<: *defaults
needs:
- "{{`{{ .Release.Namespace }}`}}-shared-resources"
@@ -0,0 +1,30 @@
---
# Source: input.yaml
filepath: input.yaml
helmBinary: helm
environments:
default: {}
repositories:
- name: aservo
url: https://aservo.github.io/charts
releases:
- chart: aservo/util
version: 0.0.1
name: default-shared-resources
namespace: default
labels:
service: shared-resources
- chart: aservo/util
version: 0.0.1
needs:
- default-shared-resources
name: default-release-resources
namespace: default
labels:
service: release-resources
templates:
defaults:
name: default-{{ .Release.Labels.service }}
namespace: default
renderedvalues: {}