diff --git a/charts/gha-runner-scale-set-dev/templates/_helpers.tpl b/charts/gha-runner-scale-set-dev/templates/_helpers.tpl index 251455a1..4bda9298 100644 --- a/charts/gha-runner-scale-set-dev/templates/_helpers.tpl +++ b/charts/gha-runner-scale-set-dev/templates/_helpers.tpl @@ -22,15 +22,16 @@ The name of the GitHub secret used for authentication. {{- end }} {{- end }} + {{/* Create the labels for the autoscaling runner set. */}} {{- define "autoscaling-runner-set.labels" -}} {{- $resourceLabels := dict "app.kubernetes.io/component" "autoscaling-runner-set" -}} -{{- $commonLabels := include "gha-common-labels" .Values | fromYaml -}} -{{- $userLabels := include "gha-process-labels" .Values.resource.autoscalingRunnerSet.metadata.labels | fromYaml -}} -{{- $global := include "gha-process-labels" .Values.resource.all.metadata.labels | fromYaml -}} -{{- mergeOverwrite $global $userLabels $resourceLabels $commonLabels -}} +{{- $commonLabels := include "gha-common-labels" . | fromYaml -}} +{{- $userLabels := include "gha-process-labels" (.Values.resource.autoscalingRunnerSet.metadata.labels | default (dict)) | fromYaml -}} +{{- $global := include "gha-process-labels" (.Values.resource.all.metadata.labels | default (dict)) | fromYaml -}} +{{- toYaml (mergeOverwrite $global $userLabels $resourceLabels $commonLabels) }} {{- end }} {{/* @@ -47,6 +48,7 @@ actions.github.com/scale-set-name: {{ include "autoscaling-runner-set.name" . }} actions.github.com/scale-set-namespace: {{ include "autoscaling-runner-set.namespace" . }} {{- end }} + {{/* Takes a map of user labels and removes the ones with "actions.github.com/" prefix */}} @@ -58,12 +60,28 @@ Takes a map of user labels and removes the ones with "actions.github.com/" prefi {{- $_ := set $processed $key $value -}} {{- end -}} {{- end -}} -{{- $processed -}} +{{- $processed | toYaml -}} {{- end }} {{/* Create chart name and version as used by the chart label. */}} {{- define "gha-runner-scale-set.chart" -}} -{{- printf "%s-%s" (include "gha-base-name" .) .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- printf "gha-rs-%s" .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} {{- end }} + +{{/* +Container spec that is expanded for the runner container +*/}} +{{- define "container-spec.runner" -}} + +{{- if not .Values.runner.container }} +{{ fail "You must provide a runner container specification in values.runner.container" }} +{{- end }} + +{{- $tlsConfig := (default (dict) .Values.githubServerTLS) -}} +name: runner +image: {{ .Values.runner.container.image | default "ghcr.io/actions/runner:latest" }} +command: {{ toJson (default (list "/home/runner/run.sh") .Values.runner.container.command) }} +{{- end }} + diff --git a/charts/gha-runner-scale-set-dev/templates/autoscalingrunnserset.yaml b/charts/gha-runner-scale-set-dev/templates/autoscalingrunnserset.yaml index 5d4ac168..efb23393 100644 --- a/charts/gha-runner-scale-set-dev/templates/autoscalingrunnserset.yaml +++ b/charts/gha-runner-scale-set-dev/templates/autoscalingrunnserset.yaml @@ -3,7 +3,8 @@ kind: AutoscalingRunnerSet metadata: name: {{ include "autoscaling-runner-set.name" . | quote }} namespace: {{ include "autoscaling-runner-set.namespace" . | quote }} - labels: {{ include "autoscaling-runner-set.labels" . | nindent 4 }} + labels: + {{- include "autoscaling-runner-set.labels" . | nindent 4 }} spec: githubConfigUrl: {{ required ".Values.auth.url is required" (trimSuffix "/" .Values.auth.url) | quote }} @@ -92,5 +93,4 @@ spec: template: spec: containers: - - name: runner - {{- include "runner-container-spec" . | nindent 10 }} + # {{- include "container-spec.runner" . | nindent 8 }} diff --git a/charts/gha-runner-scale-set-dev/tests/autoscaling_runner_set_test.yaml b/charts/gha-runner-scale-set-dev/tests/autoscaling_runner_set_test.yaml index 3d9c5ded..d9d0ec67 100644 --- a/charts/gha-runner-scale-set-dev/tests/autoscaling_runner_set_test.yaml +++ b/charts/gha-runner-scale-set-dev/tests/autoscaling_runner_set_test.yaml @@ -1,4 +1,4 @@ -suite: "AutoscalingRunnerSet" +suite: "Test AutoscalingRunnerSet" templates: - autoscalingrunnserset.yaml tests: @@ -12,7 +12,284 @@ 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" + - equal: + path: metadata.labels["app.kubernetes.io/instance"] + value: "test-name" + - equal: + path: metadata.labels["app.kubernetes.io/component"] + value: "autoscaling-runner-set" + - equal: + path: metadata.labels["app.kubernetes.io/managed-by"] + value: "Helm" + - equal: + path: metadata.labels["app.kubernetes.io/part-of"] + value: "gha-rs" + - equal: + path: metadata.labels["app.kubernetes.io/version"] + value: "0.14.0" + - equal: + path: metadata.labels["actions.github.com/scale-set-name"] + value: "test-name" + - equal: + path: metadata.labels["actions.github.com/scale-set-namespace"] + value: "test-namespace" + + - it: should include user-defined labels + set: + scaleset.name: "test" + auth.url: "https://github.com/org" + auth.githubToken: "gh_token12345" + controllerServiceAccount.name: "arc" + controllerServiceAccount.namespace: "arc-system" + resource: + autoscalingRunnerSet: + metadata: + labels: + team: "backend" + environment: "production" + release: + name: "test-name" + namespace: "test-namespace" + asserts: + - equal: + path: metadata.labels["team"] + value: "backend" + - 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" + - equal: + path: metadata.labels["app.kubernetes.io/instance"] + value: "test-name" + - equal: + path: metadata.labels["app.kubernetes.io/component"] + value: "autoscaling-runner-set" + - equal: + path: metadata.labels["app.kubernetes.io/managed-by"] + value: "Helm" + - equal: + path: metadata.labels["app.kubernetes.io/part-of"] + value: "gha-rs" + - equal: + path: metadata.labels["app.kubernetes.io/version"] + value: "0.14.0" + - equal: + path: metadata.labels["actions.github.com/scale-set-name"] + value: "test-name" + - equal: + path: metadata.labels["actions.github.com/scale-set-namespace"] + value: "test-namespace" + + - it: should include global labels + set: + scaleset.name: "test" + auth.url: "https://github.com/org" + auth.githubToken: "gh_token12345" + controllerServiceAccount.name: "arc" + controllerServiceAccount.namespace: "arc-system" + resource: + all: + metadata: + labels: + global-team: "platform" + owner: "devops" + release: + name: "test-name" + namespace: "test-namespace" + asserts: + - equal: + path: metadata.labels["global-team"] + value: "platform" + - 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" + - equal: + path: metadata.labels["app.kubernetes.io/instance"] + value: "test-name" + - equal: + path: metadata.labels["app.kubernetes.io/component"] + value: "autoscaling-runner-set" + - equal: + path: metadata.labels["app.kubernetes.io/managed-by"] + value: "Helm" + - equal: + path: metadata.labels["app.kubernetes.io/part-of"] + value: "gha-rs" + - equal: + path: metadata.labels["app.kubernetes.io/version"] + value: "0.14.0" + - equal: + path: metadata.labels["actions.github.com/scale-set-name"] + value: "test-name" + - equal: + path: metadata.labels["actions.github.com/scale-set-namespace"] + value: "test-namespace" + + - it: should merge both user and global labels + set: + scaleset.name: "test" + auth.url: "https://github.com/org" + auth.githubToken: "gh_token12345" + controllerServiceAccount.name: "arc" + controllerServiceAccount.namespace: "arc-system" + resource: + autoscalingRunnerSet: + metadata: + labels: + team: "backend" + environment: "staging" + all: + metadata: + labels: + global-team: "platform" + environment: "production" + release: + name: "test-name" + namespace: "test-namespace" + asserts: + - equal: + path: metadata.labels["team"] + value: "backend" + - equal: + path: metadata.labels["global-team"] + value: "platform" + - 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" + - equal: + path: metadata.labels["app.kubernetes.io/instance"] + value: "test-name" + - equal: + path: metadata.labels["app.kubernetes.io/component"] + value: "autoscaling-runner-set" + - equal: + path: metadata.labels["app.kubernetes.io/managed-by"] + value: "Helm" + - equal: + path: metadata.labels["app.kubernetes.io/part-of"] + value: "gha-rs" + - equal: + path: metadata.labels["app.kubernetes.io/version"] + value: "0.14.0" + - equal: + path: metadata.labels["actions.github.com/scale-set-name"] + value: "test-name" + - equal: + path: metadata.labels["actions.github.com/scale-set-namespace"] + value: "test-namespace" + + - it: should allow user labels to override global labels + set: + scaleset.name: "test" + auth.url: "https://github.com/org" + auth.githubToken: "gh_token12345" + controllerServiceAccount.name: "arc" + controllerServiceAccount.namespace: "arc-system" + resource: + autoscalingRunnerSet: + metadata: + labels: + tier: "frontend" + cost-center: "100" + all: + metadata: + labels: + tier: "backend" + environment: "staging" + cost-center: "200" + release: + name: "test-name" + namespace: "test-namespace" + asserts: + - equal: + path: metadata.labels["tier"] + value: "frontend" + - equal: + path: metadata.labels["cost-center"] + value: "100" + - equal: + path: metadata.labels["environment"] + value: "staging" + - equal: + path: metadata.labels["app.kubernetes.io/name"] + value: "test-name" + + - it: should preserve actions.github.com custom labels from user config + set: + scaleset.name: "test" + auth.url: "https://github.com/org" + auth.githubToken: "gh_token12345" + controllerServiceAccount.name: "arc" + controllerServiceAccount.namespace: "arc-system" + resource: + autoscalingRunnerSet: + metadata: + labels: + team: "backend" + actions.github.com/custom-label: "user-value" + release: + name: "test-name" + namespace: "test-namespace" + asserts: + - equal: + path: metadata.labels["team"] + value: "backend" + - equal: + path: metadata.labels["actions.github.com/custom-label"] + value: "user-value" + - equal: + path: metadata.labels["actions.github.com/scale-set-name"] + value: "test-name" + + - it: should preserve actions.github.com custom labels from global config + set: + scaleset.name: "test" + auth.url: "https://github.com/org" + auth.githubToken: "gh_token12345" + controllerServiceAccount.name: "arc" + controllerServiceAccount.namespace: "arc-system" + resource: + all: + metadata: + labels: + owner: "devops" + actions.github.com/global-custom: "global-value" + release: + name: "test-name" + namespace: "test-namespace" + asserts: + - equal: + path: metadata.labels["owner"] + value: "devops" + - equal: + path: metadata.labels["actions.github.com/global-custom"] + value: "global-value" + - equal: + path: metadata.labels["actions.github.com/scale-set-name"] + value: "test-name" \ No newline at end of file