Make kube mode the actual object

This commit is contained in:
Nikola Jokic
2026-02-07 16:52:49 +01:00
parent 5f0656a642
commit 4e685e4e19
13 changed files with 102 additions and 50 deletions

View File

@@ -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 -}}

View File

@@ -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 -}}

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -13,7 +13,7 @@ tests:
name: "test-name"
namespace: "test-namespace"
chart:
appVersion: "0.14.0"
appVersion: "0.13.1"
asserts:
- equal:
path: apiVersion

View File

@@ -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"

View File

@@ -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"]

View File

@@ -7,7 +7,7 @@ tests:
name: "test-name"
namespace: "test-namespace"
chart:
appVersion: "0.14.0"
appVersion: "0.13.1"
asserts:
- equal:
path: apiVersion

View File

@@ -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