From 4e685e4e19fab688b2deafe2eb04c5470513f37c Mon Sep 17 00:00:00 2001 From: Nikola Jokic Date: Sat, 7 Feb 2026 16:52:49 +0100 Subject: [PATCH] Make kube mode the actual object --- .../templates/_mode_kubernetes.tpl | 40 ++++++++++++++----- .../templates/hook_extension.yaml | 21 +++++++--- ...t_kubernetes_mode_hook_extension_test.yaml | 6 ++- .../autoscaling_runner_set_labels_test.yaml | 18 ++++----- ...g_runner_set_runner_pod_metadata_test.yaml | 4 +- .../tests/github_secret_labels_test.yaml | 8 ++-- .../tests/hook_extension_configmap_test.yaml | 6 +-- .../tests/kube_mode_role_binding_test.yaml | 6 +-- .../tests/kube_mode_role_test.yaml | 2 +- .../tests/kube_mode_serviceaccount_test.yaml | 6 +-- .../manager_role_binding_labels_test.yaml | 10 ++--- .../tests/manager_role_extra_rules_test.yaml | 2 +- .../values.yaml | 23 ++++++++++- 13 files changed, 102 insertions(+), 50 deletions(-) diff --git a/charts/gha-runner-scale-set-experimental/templates/_mode_kubernetes.tpl b/charts/gha-runner-scale-set-experimental/templates/_mode_kubernetes.tpl index 8339c9e8..6c02a67e 100644 --- a/charts/gha-runner-scale-set-experimental/templates/_mode_kubernetes.tpl +++ b/charts/gha-runner-scale-set-experimental/templates/_mode_kubernetes.tpl @@ -4,11 +4,21 @@ {{- $hookPath := (index $kubeMode "hookPath" | default "/home/runner/k8s/index.js") -}} {{- $extensionRef := (index $kubeMode "extensionRef" | default "") -}} {{- $extension := (index $kubeMode "extension" | default dict) -}} -{{- $extensionYaml := "" -}} +{{- $extensionYamlRaw := "" -}} {{- if kindIs "map" $extension -}} - {{- $extensionYaml = (index $extension "yaml" | default "") -}} + {{- if hasKey $extension "yaml" -}} + {{- $extensionYamlRaw = (index $extension "yaml") -}} + {{- end -}} {{- end -}} -{{- $hasExtension := or (not (empty $extensionRef)) (not (empty $extensionYaml)) -}} +{{- $extensionYamlStr := "" -}} +{{- if empty $extensionYamlRaw -}} + {{- $extensionYamlStr = "" -}} +{{- else if kindIs "string" $extensionYamlRaw -}} + {{- $extensionYamlStr = $extensionYamlRaw -}} +{{- else if kindIs "map" $extensionYamlRaw -}} + {{- $extensionYamlStr = toYaml $extensionYamlRaw -}} +{{- end -}} +{{- $hasExtension := or (not (empty $extensionRef)) (not (empty $extensionYamlStr)) -}} {{- $hookTemplatePath := printf "%s/hook-template.yaml" (dir $hookPath) -}} {{- $setHookTemplateEnv := true -}} {{- $userEnv := (.Values.runner.env | default list) -}} @@ -28,8 +38,8 @@ {{- if and (empty $extensionRef) (hasKey $kubeMode "extension") (not (kindIs "map" $extension)) -}} {{- fail "runner.kubernetesMode.extension must be an object when runner.kubernetesMode.extensionRef is empty" -}} {{- end -}} -{{- if and (empty $extensionRef) (not (kindIs "string" $extensionYaml)) -}} - {{- fail "runner.kubernetesMode.extension.yaml must be a string" -}} +{{- if and (empty $extensionRef) (not (empty $extensionYamlRaw)) (not (or (kindIs "string" $extensionYamlRaw) (kindIs "map" $extensionYamlRaw))) -}} + {{- fail "runner.kubernetesMode.extension.yaml must be a string or an object" -}} {{- end -}} {{- $requireJobContainer := true -}} {{- if hasKey $kubeMode "requireJobContainer" -}} @@ -73,11 +83,21 @@ volumeMounts: {{- $kubeMode := (index $runner "kubernetesMode" | default dict) -}} {{- $extensionRef := (index $kubeMode "extensionRef" | default "") -}} {{- $extension := (index $kubeMode "extension" | default dict) -}} -{{- $extensionYaml := "" -}} +{{- $extensionYamlRaw := "" -}} {{- if kindIs "map" $extension -}} - {{- $extensionYaml = (index $extension "yaml" | default "") -}} + {{- if hasKey $extension "yaml" -}} + {{- $extensionYamlRaw = (index $extension "yaml") -}} + {{- end -}} {{- end -}} -{{- $hasExtension := or (not (empty $extensionRef)) (not (empty $extensionYaml)) -}} +{{- $extensionYamlStr := "" -}} +{{- if empty $extensionYamlRaw -}} + {{- $extensionYamlStr = "" -}} +{{- else if kindIs "string" $extensionYamlRaw -}} + {{- $extensionYamlStr = $extensionYamlRaw -}} +{{- else if kindIs "map" $extensionYamlRaw -}} + {{- $extensionYamlStr = toYaml $extensionYamlRaw -}} +{{- end -}} +{{- $hasExtension := or (not (empty $extensionRef)) (not (empty $extensionYamlStr)) -}} {{- $claim := (index $kubeMode "workVolumeClaim" | default dict) -}} {{- if and (not (empty $claim)) (not (kindIs "map" $claim)) -}} {{- fail "runner.kubernetesMode.workVolumeClaim must be a map/object" -}} @@ -88,8 +108,8 @@ volumeMounts: {{- if and (empty $extensionRef) (hasKey $kubeMode "extension") (not (kindIs "map" $extension)) -}} {{- fail "runner.kubernetesMode.extension must be an object when runner.kubernetesMode.extensionRef is empty" -}} {{- end -}} -{{- if and (empty $extensionRef) (not (kindIs "string" $extensionYaml)) -}} - {{- fail "runner.kubernetesMode.extension.yaml must be a string" -}} +{{- if and (empty $extensionRef) (not (empty $extensionYamlRaw)) (not (or (kindIs "string" $extensionYamlRaw) (kindIs "map" $extensionYamlRaw))) -}} + {{- fail "runner.kubernetesMode.extension.yaml must be a string or an object" -}} {{- end -}} {{- $defaultClaim := dict "accessModes" (list "ReadWriteOnce") "storageClassName" "local-path" "resources" (dict "requests" (dict "storage" "1Gi")) -}} {{- $claimSpec := mergeOverwrite $defaultClaim $claim -}} diff --git a/charts/gha-runner-scale-set-experimental/templates/hook_extension.yaml b/charts/gha-runner-scale-set-experimental/templates/hook_extension.yaml index f20426b6..d9b4576a 100644 --- a/charts/gha-runner-scale-set-experimental/templates/hook_extension.yaml +++ b/charts/gha-runner-scale-set-experimental/templates/hook_extension.yaml @@ -14,24 +14,33 @@ {{- $extensionMeta := dict -}} {{- $extensionName := "" -}} - {{- $extensionYaml := "" -}} + {{- $extensionYamlRaw := "" -}} + {{- $extensionYamlStr := "" -}} {{- if kindIs "map" $extension -}} {{- $extensionMeta = (index $extension "metadata" | default dict) -}} {{- if not (kindIs "map" $extensionMeta) -}} {{- fail "runner.kubernetesMode.extension.metadata must be an object" -}} {{- end -}} {{- $extensionName = (index $extensionMeta "name" | default "") -}} - {{- $extensionYaml = (index $extension "yaml" | default "") -}} + {{- if hasKey $extension "yaml" -}} + {{- $extensionYamlRaw = (index $extension "yaml") -}} + {{- end -}} {{- end -}} {{- if not (kindIs "string" $extensionName) -}} {{- fail "runner.kubernetesMode.extension.metadata.name must be a string" -}} {{- end -}} - {{- if not (kindIs "string" $extensionYaml) -}} - {{- fail "runner.kubernetesMode.extension.yaml must be a string" -}} + {{- if empty $extensionYamlRaw -}} + {{- $extensionYamlStr = "" -}} + {{- else if kindIs "string" $extensionYamlRaw -}} + {{- $extensionYamlStr = $extensionYamlRaw -}} + {{- else if kindIs "map" $extensionYamlRaw -}} + {{- $extensionYamlStr = toYaml $extensionYamlRaw -}} + {{- else -}} + {{- fail "runner.kubernetesMode.extension.yaml must be a string or an object" -}} {{- end -}} - {{- if not (empty $extensionYaml) -}} + {{- if not (empty $extensionYamlStr) -}} apiVersion: v1 kind: ConfigMap metadata: @@ -46,6 +55,6 @@ metadata: {{- end }} data: extension: |- -{{ $extensionYaml | indent 4 }} +{{ $extensionYamlStr | indent 4 }} {{- end -}} {{- end -}} diff --git a/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_kubernetes_mode_hook_extension_test.yaml b/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_kubernetes_mode_hook_extension_test.yaml index befb41cc..b963d070 100644 --- a/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_kubernetes_mode_hook_extension_test.yaml +++ b/charts/gha-runner-scale-set-experimental/tests/autoscaling_runner_set_kubernetes_mode_hook_extension_test.yaml @@ -17,7 +17,8 @@ tests: metadata: name: "my-hook-extension" namespace: "test-namespace" - yaml: "foo: bar" + yaml: + foo: bar release: name: "test-name" namespace: "test-namespace" @@ -53,7 +54,8 @@ tests: kubernetesMode: hookPath: "/home/runner/k8s/index.js" extension: - yaml: "foo: bar" + yaml: + foo: bar release: name: "test-name" namespace: "test-namespace" 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 71cbabf5..af3522b8 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 @@ -13,11 +13,11 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" asserts: - equal: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "gha-rs-0.13.1" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -35,7 +35,7 @@ tests: value: "gha-rs" - equal: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "0.13.1" - equal: path: metadata.labels["actions.github.com/scale-set-name"] value: "test-name" @@ -68,7 +68,7 @@ tests: value: "production" - equal: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "gha-rs-0.13.1" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -86,7 +86,7 @@ tests: value: "gha-rs" - equal: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "0.13.1" - equal: path: metadata.labels["actions.github.com/scale-set-name"] value: "test-name" @@ -119,7 +119,7 @@ tests: value: "devops" - equal: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "gha-rs-0.13.1" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -137,7 +137,7 @@ tests: value: "gha-rs" - equal: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "0.13.1" - equal: path: metadata.labels["actions.github.com/scale-set-name"] value: "test-name" @@ -178,7 +178,7 @@ tests: value: "staging" - equal: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "gha-rs-0.13.1" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -196,7 +196,7 @@ tests: value: "gha-rs" - equal: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "0.13.1" - 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..96fe5ce7 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 @@ -27,7 +27,7 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" asserts: - equal: path: spec.template.metadata.labels["purpose"] @@ -37,7 +37,7 @@ tests: value: "platform" - equal: path: spec.template.metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "gha-rs-0.13.1" - equal: path: spec.template.metadata.labels["app.kubernetes.io/name"] value: "test-name" 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..fcd8c31a 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 @@ -11,11 +11,11 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" asserts: - equal: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "gha-rs-0.13.1" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -33,7 +33,7 @@ tests: value: "gha-rs" - equal: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "0.13.1" - equal: path: metadata.labels["actions.github.com/scale-set-name"] value: "test-name" @@ -111,7 +111,7 @@ tests: asserts: - equal: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "gha-rs-0.13.1" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" diff --git a/charts/gha-runner-scale-set-experimental/tests/hook_extension_configmap_test.yaml b/charts/gha-runner-scale-set-experimental/tests/hook_extension_configmap_test.yaml index db243068..610845de 100644 --- a/charts/gha-runner-scale-set-experimental/tests/hook_extension_configmap_test.yaml +++ b/charts/gha-runner-scale-set-experimental/tests/hook_extension_configmap_test.yaml @@ -11,7 +11,7 @@ tests: metadata: name: "my-hook-extension" namespace: "ignored-by-chart" - yaml: | + yaml: foo: bar nested: a: 1 @@ -67,7 +67,7 @@ tests: metadata: name: "my-hook-extension" namespace: "test-namespace" - yaml: "" + yaml: {} release: name: "test-name" namespace: "test-namespace" @@ -85,7 +85,7 @@ tests: metadata: name: "my-hook-extension" namespace: "test-namespace" - yaml: | + yaml: foo: bar release: name: "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..aea4e4df 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 @@ -13,7 +13,7 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" asserts: - equal: path: apiVersion @@ -160,11 +160,11 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" asserts: - equal: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "gha-rs-0.13.1" - 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..a6372808 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 @@ -13,7 +13,7 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" 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..2e5ccd31 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 @@ -13,7 +13,7 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" asserts: - equal: path: apiVersion @@ -145,11 +145,11 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" asserts: - equal: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "gha-rs-0.13.1" - 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..a3f41de5 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 @@ -10,11 +10,11 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" asserts: - equal: path: metadata.labels["helm.sh/chart"] - value: "gha-rs-0.14.0" + value: "gha-rs-0.13.1" - equal: path: metadata.labels["app.kubernetes.io/name"] value: "test-name" @@ -32,7 +32,7 @@ tests: value: "gha-rs" - equal: path: metadata.labels["app.kubernetes.io/version"] - value: "0.14.0" + value: "0.13.1" - equal: path: metadata.labels["actions.github.com/scale-set-name"] value: "test-name" @@ -59,7 +59,7 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" asserts: - equal: path: metadata.labels["owner"] @@ -84,7 +84,7 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" 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..e50b7f4e 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 @@ -7,7 +7,7 @@ tests: name: "test-name" namespace: "test-namespace" chart: - appVersion: "0.14.0" + appVersion: "0.13.1" asserts: - equal: path: apiVersion diff --git a/charts/gha-runner-scale-set-experimental/values.yaml b/charts/gha-runner-scale-set-experimental/values.yaml index e1957018..d4c0cd35 100644 --- a/charts/gha-runner-scale-set-experimental/values.yaml +++ b/charts/gha-runner-scale-set-experimental/values.yaml @@ -196,6 +196,23 @@ runner: serviceAccountName: "" hookPath: "/home/runner/k8s/index.js" requireJobContainer: true + # workVolumeClaim configures the *ephemeral* PVC used for the runner work directory + # (mounted at /home/runner/_work). + # + # This maps directly to `spec.template.spec.volumes[].ephemeral.volumeClaimTemplate.spec`. + # Any fields you set here are merged onto the chart defaults. + # + # Defaults: + # - accessModes: ["ReadWriteOnce"] + # - storageClassName: "local-path" + # - resources.requests.storage: "1Gi" + workVolumeClaim: {} + # workVolumeClaim: + # accessModes: ["ReadWriteOnce"] + # storageClassName: "fast-ssd" + # resources: + # requests: + # storage: 10Gi # extensionRef: "" # extension: ## metadata adds metadata to the config map configured for the hook extension @@ -203,7 +220,11 @@ runner: # metadata: # labels: "" # namespace: "" - # yaml: "" + # yaml: + # metadata: + # annotations: + # spec: + # containers: [] ## A self-signed CA certificate for communication with the GitHub server can be ## provided using a config map key selector. If `runnerMountPath` is set, for