diff --git a/charts/gha-runner-scale-set-controller/tests/template_test.go b/charts/gha-runner-scale-set-controller/tests/template_test.go index c1efe293..548faba4 100644 --- a/charts/gha-runner-scale-set-controller/tests/template_test.go +++ b/charts/gha-runner-scale-set-controller/tests/template_test.go @@ -1078,3 +1078,42 @@ func TestDeployment_excludeLabelPropagationPrefixes(t *testing.T) { assert.Contains(t, container.Args, "--exclude-label-propagation-prefix=prefix.com/") assert.Contains(t, container.Args, "--exclude-label-propagation-prefix=complete.io/label") } +func TestNamespaceOverride(t *testing.T) { + t.Parallel() + + chartPath := "../../gha-runner-scale-set-controller" + + releaseName := "test" + releaseNamespace := "test-" + strings.ToLower(random.UniqueId()) + namespaceOverride := "test-" + strings.ToLower(random.UniqueId()) + + options := &helm.Options{ + Logger: logger.Discard, + SetValues: map[string]string{ + "namespaceOverride": namespaceOverride, + }, + KubectlOptions: k8s.NewKubectlOptions("", "", releaseNamespace), + } + templateFiles, err := os.ReadDir(filepath.Join(chartPath, "templates")) + require.NoError(t, err) + + for _, f := range templateFiles { + if filepath.Ext(f.Name()) != ".yaml" && filepath.Ext(f.Name()) != ".yml" { + continue + } + templateFile := filepath.Join("templates", f.Name()) + output, err := helm.RenderTemplateE(t, options, chartPath, releaseName, []string{templateFile}) + + if err != nil { + // template is conditional or has dependencies, skip + continue + } + + var renderedObject map[string]interface{} + helm.UnmarshalK8SYaml(t, output, &renderedObject) + + if renderedObject["metadata"].(map[string]interface{})["namespace"] != nil { + assert.Equal(t, namespaceOverride, renderedObject["metadata"].(map[string]interface{})["namespace"], fmt.Sprintf("template %s from chart %s should have namespace %s", f.Name(), chartPath, namespaceOverride)) + } + } +} diff --git a/charts/gha-runner-scale-set-controller/values.yaml b/charts/gha-runner-scale-set-controller/values.yaml index be1a4758..fb54ed99 100644 --- a/charts/gha-runner-scale-set-controller/values.yaml +++ b/charts/gha-runner-scale-set-controller/values.yaml @@ -136,7 +136,7 @@ flags: # excludeLabelPropagationPrefixes: # - "argocd.argoproj.io/instance" -# Add the option to deploy in another namespace rather than .Release.Namespace. +# Overrides the default `.Release.Namespace` for all resources in this chart. namespaceOverride: "" ## Defines the K8s client rate limiter parameters. diff --git a/charts/gha-runner-scale-set/tests/template_test.go b/charts/gha-runner-scale-set/tests/template_test.go index 8f5a833e..7beac6bc 100644 --- a/charts/gha-runner-scale-set/tests/template_test.go +++ b/charts/gha-runner-scale-set/tests/template_test.go @@ -2,6 +2,7 @@ package tests import ( "fmt" + "os" "path/filepath" "strings" "testing" @@ -2143,3 +2144,43 @@ func TestAutoscalingRunnerSetAnnotationValuesHash(t *testing.T) { assert.NotEqual(t, firstHash, secondHash) assert.LessOrEqual(t, len(secondHash), 63) } + +func TestNamespaceOverride(t *testing.T) { + t.Parallel() + + chartPath := "../../gha-runner-scale-set" + + releaseName := "test" + releaseNamespace := "test-" + strings.ToLower(random.UniqueId()) + namespaceOverride := "test-" + strings.ToLower(random.UniqueId()) + + options := &helm.Options{ + Logger: logger.Discard, + SetValues: map[string]string{ + "namespaceOverride": namespaceOverride, + }, + KubectlOptions: k8s.NewKubectlOptions("", "", releaseNamespace), + } + templateFiles, err := os.ReadDir(filepath.Join(chartPath, "templates")) + require.NoError(t, err) + + for _, f := range templateFiles { + if filepath.Ext(f.Name()) != ".yaml" && filepath.Ext(f.Name()) != ".yml" { + continue + } + templateFile := filepath.Join("templates", f.Name()) + output, err := helm.RenderTemplateE(t, options, chartPath, releaseName, []string{templateFile}) + + if err != nil { + // template is conditional or has dependencies, skip + continue + } + + var renderedObject map[string]interface{} + helm.UnmarshalK8SYaml(t, output, &renderedObject) + + if renderedObject["metadata"].(map[string]interface{})["namespace"] != nil { + assert.Equal(t, namespaceOverride, renderedObject["metadata"].(map[string]interface{})["namespace"], fmt.Sprintf("template %s from chart %s should have namespace %s", f.Name(), chartPath, namespaceOverride)) + } + } +}