diff options
author | Elizabeth Hunt <me@liz.coffee> | 2025-07-01 10:12:55 -0700 |
---|---|---|
committer | Elizabeth Hunt <me@liz.coffee> | 2025-07-01 10:12:55 -0700 |
commit | 8fbbe6396f400a9a50d4686c39969470edf2a246 (patch) | |
tree | 4832c535816d59b30bbf7eb059259194a3bfc46c | |
parent | fd5fb8b5e19bb6b09ed6e2a6050ba6c4a375d520 (diff) | |
download | ci-8fbbe6396f400a9a50d4686c39969470edf2a246.tar.gz ci-8fbbe6396f400a9a50d4686c39969470edf2a246.zip |
Lift all utility functions in runner scripts
-rwxr-xr-x | worker/scripts/ansible_playbook.ts | 5 | ||||
-rwxr-xr-x | worker/scripts/build_docker_image.ts | 26 | ||||
-rwxr-xr-x | worker/scripts/checkout_ci.ts | 44 |
3 files changed, 40 insertions, 35 deletions
diff --git a/worker/scripts/ansible_playbook.ts b/worker/scripts/ansible_playbook.ts index fb4b801..4ec3ffa 100755 --- a/worker/scripts/ansible_playbook.ts +++ b/worker/scripts/ansible_playbook.ts @@ -90,11 +90,12 @@ await LogMetricTraceable.ofLogTraceable(_logJob) }) .get(); -const saveToTempFile = (text: string): Promise<IEither<Error, string>> => - Either.fromFailableAsync(() => +function saveToTempFile(text: string): Promise<IEither<Error, string>> { + return Either.fromFailableAsync(() => mkdtemp(join(tmpdir(), 'ci-')).then(async (dir) => { const filePath = join(dir, 'temp-file'); await writeFile(filePath, text); return filePath; }), ); +} diff --git a/worker/scripts/build_docker_image.ts b/worker/scripts/build_docker_image.ts index 5dd5b4e..1783e7c 100755 --- a/worker/scripts/build_docker_image.ts +++ b/worker/scripts/build_docker_image.ts @@ -7,6 +7,7 @@ import { LogMetricTraceable, Metric, TraceUtil, + Command, } from '@emprespresso/pengueno'; import type { BuildDockerImageJob, BuildDockerImageJobProps } from '@emprespresso/ci_model'; import { Bitwarden, type LoginItem } from '@emprespresso/ci_worker'; @@ -26,7 +27,7 @@ const eitherJob = getRequiredEnvVars([ arguments: baseArgs, }, ); -console.log(eitherJob); + const eitherVault = Bitwarden.getConfigFromEnvironment().mapRight((config) => new Bitwarden(config)); const buildImageMetric = Metric.fromName('dockerImage.build').asResult(); @@ -105,19 +106,14 @@ await LogMetricTraceable.ofLogTraceable(_logJob) }) .get(); -const getDockerLoginCommand = (username: string, registry: string) => - `docker login --username ${username} --password $REGISTRY_PASSWORD ${registry}`.split(' '); +function getDockerLoginCommand(username: string, registry: string): Command { + return `docker login --username ${username} --password $REGISTRY_PASSWORD ${registry}`.split(' '); +} -const getBuildCommand = ({ buildTarget, imageTag, dockerfile, context }: BuildDockerImageJobProps) => [ - 'docker', - 'build', - '--target', - buildTarget, - '-t', - imageTag, - '-f', - dockerfile, - context, -]; +function getBuildCommand({ buildTarget, imageTag, dockerfile, context }: BuildDockerImageJobProps): Command { + return ['docker', 'build', '--target', buildTarget, '-t', imageTag, '-f', dockerfile, context]; +} -const getPushCommand = (tag: string) => ['docker', 'push', tag]; +function getPushCommand(tag: string): Command { + return ['docker', 'push', tag]; +} diff --git a/worker/scripts/checkout_ci.ts b/worker/scripts/checkout_ci.ts index 337aae1..dade7c4 100755 --- a/worker/scripts/checkout_ci.ts +++ b/worker/scripts/checkout_ci.ts @@ -119,34 +119,42 @@ await LogMetricTraceable.ofLogTraceable(_logJob) }) .get(); -const getWorkingDirectoryForCiJob = (job: CheckoutCiJob) => `${job.arguments.returnPath}/${job.arguments.run}`; +function getWorkingDirectoryForCiJob(job: CheckoutCiJob) { + return `${job.arguments.returnPath}/${job.arguments.run}`; +} -const getSrcDirectoryForCiJob = (job: CheckoutCiJob) => `${job.arguments.returnPath}/${job.arguments.run}/src`; +function getSrcDirectoryForCiJob(job: CheckoutCiJob) { + return `${job.arguments.returnPath}/${job.arguments.run}/src`; +} const _runFlags = ('--rm --network none --cap-drop ALL' + '--security-opt no-new-privileges').split(' '); const _image = 'oci.liz.coffee/img/ci-worker:release'; -const getPipelineGenerationCommand = ( +function getPipelineGenerationCommand( job: CheckoutCiJob, pipelineGeneratorPath: string, image = _image, runFlags = _runFlags, -): Command => [ - 'docker', - 'run', - ...runFlags, - ...prependWith( - Object.entries(job.arguments).map(([key, val]) => `"${key}"="${val}"`), - '-e', - ), - '-v', - `${getSrcDirectoryForCiJob(job)}/${pipelineGeneratorPath}:/pipeline_generator`, - image, - '/pipeline_generator', -]; +): Command { + return [ + 'docker', + 'run', + ...runFlags, + ...prependWith( + Object.entries(job.arguments).map(([key, val]) => `"${key}"="${val}"`), + '-e', + ), + '-v', + `${getSrcDirectoryForCiJob(job)}/${pipelineGeneratorPath}:/pipeline_generator`, + image, + '/pipeline_generator', + ]; +} export interface CiWorkflow { workflow: string; } -export const isCiWorkflow = (t: unknown): t is CiWorkflow => - isObject(t) && 'workflow' in t && typeof t.workflow === 'string' && !t.workflow.includes('..'); +export function isCiWorkflow(t: unknown): t is CiWorkflow { + return isObject(t) && 'workflow' in t && typeof t.workflow === 'string' && !t.workflow.includes('..'); +} + const CI_WORKFLOW_FILE = '.ci/ci.json'; |