diff --git a/.github/workflows/gha-validate-chart.yaml b/.github/workflows/gha-validate-chart.yaml index 5fb36576..46d7b065 100644 --- a/.github/workflows/gha-validate-chart.yaml +++ b/.github/workflows/gha-validate-chart.yaml @@ -140,3 +140,7 @@ jobs: run: go test ./charts/gha-runner-scale-set/... - name: Test gha-runner-scale-set-controller run: go test ./charts/gha-runner-scale-set-controller/... + - name: Test gha-runner-scale-set-experimental + run: go test ./charts/gha-runner-scale-set-experimental/... + - name: Test gha-runner-scale-set-controller-experimental + run: go test ./charts/gha-runner-scale-set-controller-experimental/... diff --git a/charts/gha-runner-scale-set-controller-experimental/tests/template_test.go b/charts/gha-runner-scale-set-controller-experimental/tests/template_test.go new file mode 100644 index 00000000..80870ec3 --- /dev/null +++ b/charts/gha-runner-scale-set-controller-experimental/tests/template_test.go @@ -0,0 +1,52 @@ +package tests + +import ( + "os" + "path/filepath" + "strings" + "testing" + + "github.com/gruntwork-io/terratest/modules/helm" + "github.com/gruntwork-io/terratest/modules/k8s" + "github.com/gruntwork-io/terratest/modules/logger" + "github.com/gruntwork-io/terratest/modules/random" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "gopkg.in/yaml.v2" + appsv1 "k8s.io/api/apps/v1" +) + +type Chart struct { + Version string `yaml:"version"` + AppVersion string `yaml:"appVersion"` +} + +func TestTemplate_RenderedDeployment_UsesChartMetadataLabels(t *testing.T) { + t.Parallel() + + helmChartPath, err := filepath.Abs("../../gha-runner-scale-set-controller-experimental") + require.NoError(t, err) + + chartContent, err := os.ReadFile(filepath.Join(helmChartPath, "Chart.yaml")) + require.NoError(t, err) + + chart := new(Chart) + err = yaml.Unmarshal(chartContent, chart) + require.NoError(t, err) + + releaseName := "test-arc" + namespaceName := "test-" + strings.ToLower(random.UniqueId()) + + options := &helm.Options{ + Logger: logger.Discard, + KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName), + } + + output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/deployment.yaml"}) + + var deployment appsv1.Deployment + helm.UnmarshalK8SYaml(t, output, &deployment) + + assert.Equal(t, "gha-rs-controller-"+chart.Version, deployment.Labels["helm.sh/chart"]) + assert.Equal(t, chart.AppVersion, deployment.Labels["app.kubernetes.io/version"]) +} diff --git a/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_labels_test.yaml b/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_labels_test.yaml index 63b5d0d1..2b7a19ed 100644 --- a/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_labels_test.yaml +++ b/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_labels_test.yaml @@ -12,12 +12,7 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - - equal: - path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -33,9 +28,9 @@ tests: - equal: path: metadata.labels["app.kubernetes.io/part-of"] value: "gha-rs" - - equal: + - notEqual: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "" - equal: path: metadata.labels["actions.github.com/scale-set-name"] value: "test-name" @@ -66,9 +61,6 @@ tests: - equal: path: metadata.labels["environment"] value: "production" - - equal: - path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -84,9 +76,9 @@ tests: - equal: path: metadata.labels["app.kubernetes.io/part-of"] value: "gha-rs" - - equal: + - notEqual: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "" - equal: path: metadata.labels["actions.github.com/scale-set-name"] value: "test-name" @@ -117,9 +109,6 @@ tests: - equal: path: metadata.labels["owner"] value: "devops" - - equal: - path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -135,9 +124,9 @@ tests: - equal: path: metadata.labels["app.kubernetes.io/part-of"] value: "gha-rs" - - equal: + - notEqual: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "" - equal: path: metadata.labels["actions.github.com/scale-set-name"] value: "test-name" @@ -176,9 +165,6 @@ tests: - equal: path: metadata.labels["environment"] value: "staging" - - equal: - path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -194,9 +180,9 @@ tests: - equal: path: metadata.labels["app.kubernetes.io/part-of"] value: "gha-rs" - - equal: + - notEqual: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "" - equal: path: metadata.labels["actions.github.com/scale-set-name"] value: "test-name" diff --git a/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_runner_pod_metadata_test.yaml b/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_runner_pod_metadata_test.yaml index 2c5c9ddb..37bdd7bd 100644 --- a/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_runner_pod_metadata_test.yaml +++ b/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_runner_pod_metadata_test.yaml @@ -26,8 +26,6 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - equal: path: spec.template.metadata.labels["purpose"] @@ -35,12 +33,12 @@ tests: - equal: path: spec.template.metadata.labels["team"] value: "platform" - - equal: - path: spec.template.metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" - equal: path: spec.template.metadata.labels["app.kubernetes.io/name"] value: "test-name" + - notEqual: + path: spec.template.metadata.labels["app.kubernetes.io/version"] + value: "" - equal: path: spec.template.metadata.labels["app.kubernetes.io/managed-by"] value: "Helm" diff --git a/charts/gha-runner-scale-set-experimental/tests/github_secret_labels_test.yaml b/charts/gha-runner-scale-set-experimental/tests/github_secret_labels_test.yaml index 9e60a70c..a3dd08a8 100644 --- a/charts/gha-runner-scale-set-experimental/tests/github_secret_labels_test.yaml +++ b/charts/gha-runner-scale-set-experimental/tests/github_secret_labels_test.yaml @@ -10,12 +10,7 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - - equal: - path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -31,9 +26,9 @@ tests: - equal: path: metadata.labels["app.kubernetes.io/part-of"] value: "gha-rs" - - equal: + - notEqual: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "" - equal: path: metadata.labels["actions.github.com/scale-set-name"] value: "test-name" @@ -109,9 +104,9 @@ tests: name: "test-name" namespace: "test-namespace" asserts: - - equal: + - notEqual: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "bad" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" diff --git a/charts/gha-runner-scale-set-experimental/tests/kube_mode_role_binding_test.yaml b/charts/gha-runner-scale-set-experimental/tests/kube_mode_role_binding_test.yaml index 1d915603..4374dc13 100644 --- a/charts/gha-runner-scale-set-experimental/tests/kube_mode_role_binding_test.yaml +++ b/charts/gha-runner-scale-set-experimental/tests/kube_mode_role_binding_test.yaml @@ -12,8 +12,6 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - equal: path: apiVersion @@ -159,12 +157,10 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - - equal: + - notEqual: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "bad" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" diff --git a/charts/gha-runner-scale-set-experimental/tests/kube_mode_role_test.yaml b/charts/gha-runner-scale-set-experimental/tests/kube_mode_role_test.yaml index 8657d5a5..fcebc013 100644 --- a/charts/gha-runner-scale-set-experimental/tests/kube_mode_role_test.yaml +++ b/charts/gha-runner-scale-set-experimental/tests/kube_mode_role_test.yaml @@ -12,8 +12,6 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - equal: path: apiVersion diff --git a/charts/gha-runner-scale-set-experimental/tests/kube_mode_serviceaccount_test.yaml b/charts/gha-runner-scale-set-experimental/tests/kube_mode_serviceaccount_test.yaml index 8cf23d59..8508f176 100644 --- a/charts/gha-runner-scale-set-experimental/tests/kube_mode_serviceaccount_test.yaml +++ b/charts/gha-runner-scale-set-experimental/tests/kube_mode_serviceaccount_test.yaml @@ -12,8 +12,6 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - equal: path: apiVersion @@ -144,12 +142,10 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - - equal: + - notEqual: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "bad" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" diff --git a/charts/gha-runner-scale-set-experimental/tests/manager_role_binding_labels_test.yaml b/charts/gha-runner-scale-set-experimental/tests/manager_role_binding_labels_test.yaml index 9734387f..08b402a9 100644 --- a/charts/gha-runner-scale-set-experimental/tests/manager_role_binding_labels_test.yaml +++ b/charts/gha-runner-scale-set-experimental/tests/manager_role_binding_labels_test.yaml @@ -9,12 +9,7 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - - equal: - path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -30,9 +25,9 @@ tests: - equal: path: metadata.labels["app.kubernetes.io/part-of"] value: "gha-rs" - - equal: + - notEqual: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "" - equal: path: metadata.labels["actions.github.com/scale-set-name"] value: "test-name" @@ -58,8 +53,6 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - equal: path: metadata.labels["owner"] @@ -83,8 +76,6 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - equal: path: metadata.labels["actions.github.com/scale-set-name"] diff --git a/charts/gha-runner-scale-set-experimental/tests/manager_role_extra_rules_test.yaml b/charts/gha-runner-scale-set-experimental/tests/manager_role_extra_rules_test.yaml index 259563ae..83904cc9 100644 --- a/charts/gha-runner-scale-set-experimental/tests/manager_role_extra_rules_test.yaml +++ b/charts/gha-runner-scale-set-experimental/tests/manager_role_extra_rules_test.yaml @@ -6,8 +6,6 @@ tests: release: name: "test-name" namespace: "test-namespace" - chart: - appVersion: "0.14.0" asserts: - equal: path: apiVersion diff --git a/charts/gha-runner-scale-set-experimental/tests/template_test.go b/charts/gha-runner-scale-set-experimental/tests/template_test.go new file mode 100644 index 00000000..2a1aa615 --- /dev/null +++ b/charts/gha-runner-scale-set-experimental/tests/template_test.go @@ -0,0 +1,61 @@ +package tests + +import ( + "os" + "path/filepath" + "strings" + "testing" + + v1alpha1 "github.com/actions/actions-runner-controller/apis/actions.github.com/v1alpha1" + "github.com/gruntwork-io/terratest/modules/helm" + "github.com/gruntwork-io/terratest/modules/k8s" + "github.com/gruntwork-io/terratest/modules/logger" + "github.com/gruntwork-io/terratest/modules/random" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "gopkg.in/yaml.v2" +) + +type Chart struct { + Version string `yaml:"version"` + AppVersion string `yaml:"appVersion"` +} + +func TestTemplate_RenderedAutoscalingRunnerSet_UsesChartMetadataLabels(t *testing.T) { + t.Parallel() + + helmChartPath, err := filepath.Abs("../../gha-runner-scale-set-experimental") + require.NoError(t, err) + + chartContent, err := os.ReadFile(filepath.Join(helmChartPath, "Chart.yaml")) + require.NoError(t, err) + + chart := new(Chart) + err = yaml.Unmarshal(chartContent, chart) + require.NoError(t, err) + + releaseName := "test-runners" + namespaceName := "test-" + strings.ToLower(random.UniqueId()) + + options := &helm.Options{ + Logger: logger.Discard, + SetValues: map[string]string{ + "scaleset.name": "test", + "auth.url": "https://github.com/actions", + "auth.githubToken": "gh_token12345", + "controllerServiceAccount.name": "arc", + "controllerServiceAccount.namespace": "arc-system", + }, + KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName), + } + + output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/autoscalingrunnserset.yaml"}) + + var autoscalingRunnerSet v1alpha1.AutoscalingRunnerSet + helm.UnmarshalK8SYaml(t, output, &autoscalingRunnerSet) + + assert.Equal(t, "gha-rs-"+chart.Version, autoscalingRunnerSet.Labels["helm.sh/chart"]) + assert.Equal(t, chart.AppVersion, autoscalingRunnerSet.Labels["app.kubernetes.io/version"]) + assert.Equal(t, "gha-rs-"+chart.Version, autoscalingRunnerSet.Spec.Template.Labels["helm.sh/chart"]) + assert.Equal(t, chart.AppVersion, autoscalingRunnerSet.Spec.Template.Labels["app.kubernetes.io/version"]) +}