From 20c19dae27d9e547297554fd243a989b1d4a374e Mon Sep 17 00:00:00 2001 From: Nikola Jokic <97525037+nikola-jokic@users.noreply.github.com> Date: Wed, 22 Jun 2022 06:32:50 -0700 Subject: [PATCH] refactor around job claim name and runner instance labels (#20) * refactor around job claim name, and runner instance labels * repaired failing test --- packages/docker/tests/run-script-step-test.ts | 4 ++- packages/k8s/src/hooks/constants.ts | 8 ++--- packages/k8s/src/k8s/index.ts | 31 ++++++++++--------- packages/k8s/tests/run-script-step-test.ts | 4 ++- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/packages/docker/tests/run-script-step-test.ts b/packages/docker/tests/run-script-step-test.ts index 227657e..bf7c137 100644 --- a/packages/docker/tests/run-script-step-test.ts +++ b/packages/docker/tests/run-script-step-test.ts @@ -52,7 +52,9 @@ describe('run script step', () => { definitions.runScriptStep.args.entryPoint = '/bin/bash' definitions.runScriptStep.args.entryPointArgs = [ '-c', - `if [[ ! $(env | grep "^PATH=") = "PATH=${definitions.runScriptStep.args.prependPath}:"* ]]; then exit 1; fi` + `if [[ ! $(env | grep "^PATH=") = "PATH=${definitions.runScriptStep.args.prependPath.join( + ':' + )}:"* ]]; then exit 1; fi` ] await expect( runScriptStep(definitions.runScriptStep.args, prepareJobResponse.state) diff --git a/packages/k8s/src/hooks/constants.ts b/packages/k8s/src/hooks/constants.ts index 622d4e8..3803531 100644 --- a/packages/k8s/src/hooks/constants.ts +++ b/packages/k8s/src/hooks/constants.ts @@ -44,9 +44,9 @@ const STEP_POD_NAME_SUFFIX_LENGTH = 8 export const JOB_CONTAINER_NAME = 'job' export class RunnerInstanceLabel { - runnerhook: string + private podName: string constructor() { - this.runnerhook = process.env.ACTIONS_RUNNER_POD_NAME as string + this.podName = getRunnerPodName() } get key(): string { @@ -54,10 +54,10 @@ export class RunnerInstanceLabel { } get value(): string { - return this.runnerhook + return this.podName } toString(): string { - return `runner-pod=${this.runnerhook}` + return `runner-pod=${this.podName}` } } diff --git a/packages/k8s/src/k8s/index.ts b/packages/k8s/src/k8s/index.ts index b57217a..b1213fc 100644 --- a/packages/k8s/src/k8s/index.ts +++ b/packages/k8s/src/k8s/index.ts @@ -109,13 +109,14 @@ export async function createPod( export async function createJob( container: k8s.V1Container ): Promise { - const job = new k8s.V1Job() + const runnerInstanceLabel = new RunnerInstanceLabel() + const job = new k8s.V1Job() job.apiVersion = 'batch/v1' job.kind = 'Job' job.metadata = new k8s.V1ObjectMeta() job.metadata.name = getStepPodName() - job.metadata.labels = { 'runner-pod': getRunnerPodName() } + job.metadata.labels = { [runnerInstanceLabel.key]: runnerInstanceLabel.value } job.spec = new k8s.V1JobSpec() job.spec.ttlSecondsAfterFinished = 300 @@ -127,7 +128,7 @@ export async function createJob( job.spec.template.spec.restartPolicy = 'Never' job.spec.template.spec.nodeName = await getCurrentNodeName() - const claimName = `${runnerName()}-work` + const claimName = getVolumeClaimName() job.spec.template.spec.volumes = [ { name: 'work', @@ -240,13 +241,18 @@ export async function createDockerSecret( } } } + + const runnerInstanceLabel = new RunnerInstanceLabel() + const secretName = getSecretName() const secret = new k8s.V1Secret() secret.immutable = true secret.apiVersion = 'v1' secret.metadata = new k8s.V1ObjectMeta() secret.metadata.name = secretName - secret.metadata.labels = { 'runner-pod': getRunnerPodName() } + secret.metadata.labels = { + [runnerInstanceLabel.key]: runnerInstanceLabel.value + } secret.kind = 'Secret' secret.data = { '.dockerconfigjson': Buffer.from( @@ -262,13 +268,18 @@ export async function createDockerSecret( export async function createSecretForEnvs(envs: { [key: string]: string }): Promise { + const runnerInstanceLabel = new RunnerInstanceLabel() + const secret = new k8s.V1Secret() const secretName = getSecretName() secret.immutable = true secret.apiVersion = 'v1' secret.metadata = new k8s.V1ObjectMeta() secret.metadata.name = secretName - secret.metadata.labels = { 'runner-pod': getRunnerPodName() } + + secret.metadata.labels = { + [runnerInstanceLabel.key]: runnerInstanceLabel.value + } secret.kind = 'Secret' secret.data = {} for (const [key, value] of Object.entries(envs)) { @@ -474,16 +485,6 @@ export function namespace(): string { return context.namespace } -function runnerName(): string { - const name = process.env.ACTIONS_RUNNER_POD_NAME - if (!name) { - throw new Error( - 'Failed to determine runner name. "ACTIONS_RUNNER_POD_NAME" env variables should be set.' - ) - } - return name -} - class BackOffManager { private backOffSeconds = 1 totalTime = 0 diff --git a/packages/k8s/tests/run-script-step-test.ts b/packages/k8s/tests/run-script-step-test.ts index 70554ee..12af146 100644 --- a/packages/k8s/tests/run-script-step-test.ts +++ b/packages/k8s/tests/run-script-step-test.ts @@ -94,7 +94,9 @@ describe('Run script step', () => { runScriptStepDefinition.args.entryPoint = '/bin/bash' runScriptStepDefinition.args.entryPointArgs = [ '-c', - `'if [[ ! $(env | grep "^PATH=") = "PATH=${runScriptStepDefinition.args.prependPath}:"* ]]; then exit 1; fi'` + `'if [[ ! $(env | grep "^PATH=") = "PATH=${runScriptStepDefinition.args.prependPath.join( + ':' + )}:"* ]]; then exit 1; fi'` ] await expect(