diff options
Diffstat (limited to 'worker')
-rw-r--r-- | worker/Dockerfile | 10 | ||||
-rw-r--r-- | worker/deno.json | 2 | ||||
-rw-r--r-- | worker/executor.ts (renamed from worker/executor/pipeline.ts) | 51 | ||||
-rw-r--r-- | worker/executor/job.ts | 42 | ||||
-rw-r--r-- | worker/executor/mod.ts | 2 | ||||
-rw-r--r-- | worker/jobs/ci_pipeline.run | 8 | ||||
-rw-r--r-- | worker/mod.ts | 4 | ||||
-rwxr-xr-x | worker/scripts/ansible_playbook | 4 | ||||
-rwxr-xr-x | worker/scripts/build_docker_image | 10 | ||||
-rw-r--r-- | worker/secret.ts (renamed from worker/secret/bitwarden.ts) | 28 | ||||
-rw-r--r-- | worker/secret/ivault.ts | 24 | ||||
-rw-r--r-- | worker/secret/mod.ts | 2 |
12 files changed, 93 insertions, 94 deletions
diff --git a/worker/Dockerfile b/worker/Dockerfile index d87d67f..24193be 100644 --- a/worker/Dockerfile +++ b/worker/Dockerfile @@ -1,4 +1,4 @@ -# -- <worker_dependencies> -- +# -- <worker.dependencies> -- FROM debian:stable-slim AS worker-dependencies # Define versions as build arguments to improve caching @@ -11,10 +11,10 @@ RUN unzip /bw-linux.zip -d / \ RUN curl -L "https://get.docker.com/builds/$(uname -s)/$(uname -m)/docker-latest.tgz" > /docker.tgz RUN tar -xvzf /docker.tgz -# -- </worker_dependencies> -- +# -- </worker.dependencies> -- -# -- <ci_worker> -- -FROM oci.liz.coffee/emprespresso/ci-base:release AS worker +# -- <ci.worker> -- +FROM oci.liz.coffee/emprespresso/ci.base:release AS worker RUN apt-get update && apt-get install -yqq git jq RUN groupadd docker @@ -36,4 +36,4 @@ HEALTHCHECK --interval=10s --retries=3 --start-period=3s \ CMD [ "/usr/bin/laminarc show-jobs" ] CMD [ "/usr/sbin/laminard" ] -# -- </ci_worker> -- +# -- </ci.worker> -- diff --git a/worker/deno.json b/worker/deno.json index 90f50c9..c908330 100644 --- a/worker/deno.json +++ b/worker/deno.json @@ -1,4 +1,4 @@ { - "name": "@emprespresso/ci-worker", + "name": "@emprespresso/ci_worker", "exports": "./mod.ts" } diff --git a/worker/executor/pipeline.ts b/worker/executor.ts index c8423b1..faa40a6 100644 --- a/worker/executor/pipeline.ts +++ b/worker/executor.ts @@ -1,14 +1,51 @@ import { - Either, - type IEither, + getStdout, type ITraceable, + LogLevel, type LogMetricTraceSupplier, + memoize, Metric, TraceUtil, + validateExecutionEntries, + Either, + type IEither, } from "@emprespresso/pengueno"; -import type { Job, JobArgT, Pipeline } from "@emprespresso/ci-model"; -import { executeJob } from "./mod.ts"; +import type { Job, JobArgT, Pipeline } from "@emprespresso/ci_model"; + +// -- <job.exectuor> -- +const jobTypeMetric = memoize((type: string) => Metric.fromName(`run.${type}`)); +export const executeJob = (tJob: ITraceable<Job, LogMetricTraceSupplier>) => + tJob + .bimap(TraceUtil.withMetricTrace(jobTypeMetric(tJob.get().type))) + .peek((tJob) => + tJob.trace.trace(`let's do this little job ok!! ${tJob.get()}`), + ) + .map((tJob) => + validateExecutionEntries(tJob.get().arguments) + .mapLeft((badEntries) => { + tJob.trace.addTrace(LogLevel.ERROR).trace(badEntries.toString()); + return new Error("invalid job arguments"); + }) + .flatMapAsync((args) => + getStdout(tJob.move(tJob.get().type), { env: args }), + ), + ) + .peek( + TraceUtil.promiseify((q) => + q.trace.trace( + q + .get() + .fold( + (err, _val) => + jobTypeMetric(tJob.get().type)[err ? "failure" : "success"], + ), + ), + ), + ) + .get(); +// -- </job.exectuor> -- +// -- <pipeline.executor> -- const pipelinesMetric = Metric.fromName("pipelines"); export const executePipeline = ( tPipeline: ITraceable<Pipeline, LogMetricTraceSupplier>, @@ -30,7 +67,10 @@ export const executePipeline = ( (tJob) => <Job>{ ...tJob.get(), - arguments: { ...baseEnv, ...tJob.get().arguments }, + arguments: { + ...baseEnv, + ...tJob.get().arguments, + }, }, ) .map(executeJob) @@ -56,3 +96,4 @@ export const executePipeline = ( return Either.right(undefined); }) .get(); +// -- </pipeline.executor> -- diff --git a/worker/executor/job.ts b/worker/executor/job.ts deleted file mode 100644 index ca7feed..0000000 --- a/worker/executor/job.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { - getStdout, - type ITraceable, - LogLevel, - type LogMetricTraceSupplier, - memoize, - Metric, - TraceUtil, - validateExecutionEntries, -} from "@emprespresso/pengueno"; -import type { Job } from "@emprespresso/ci-model"; - -const jobTypeMetric = memoize((type: string) => Metric.fromName(`run.${type}`)); -export const executeJob = (tJob: ITraceable<Job, LogMetricTraceSupplier>) => - tJob - .bimap(TraceUtil.withMetricTrace(jobTypeMetric(tJob.get().type))) - .peek((tJob) => - tJob.trace.trace(`let's do this little job ok!! ${tJob.get()}`), - ) - .map((tJob) => - validateExecutionEntries(tJob.get().arguments) - .mapLeft((badEntries) => { - tJob.trace.addTrace(LogLevel.ERROR).trace(badEntries.toString()); - return new Error("invalid job arguments"); - }) - .flatMapAsync((args) => - getStdout(tJob.move(tJob.get().type), { env: args }), - ), - ) - .peek( - TraceUtil.promiseify((q) => - q.trace.trace( - q - .get() - .fold( - (err, _val) => - jobTypeMetric(tJob.get().type)[err ? "failure" : "success"], - ), - ), - ), - ) - .get(); diff --git a/worker/executor/mod.ts b/worker/executor/mod.ts deleted file mode 100644 index 944ab7d..0000000 --- a/worker/executor/mod.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./job.ts"; -export * from "./pipeline.ts"; diff --git a/worker/jobs/ci_pipeline.run b/worker/jobs/ci_pipeline.run index 337bd53..434850c 100644 --- a/worker/jobs/ci_pipeline.run +++ b/worker/jobs/ci_pipeline.run @@ -1,3 +1,5 @@ +#!/usr/bin/env -S deno run --allow-all + import { type Command, Either, @@ -13,8 +15,8 @@ import { type CheckoutCiJob, type FetchCodeJob, PipelineImpl, -} from "@emprespresso/ci-model"; -import { executeJob, executePipeline } from "@emprespresso/ci-worker"; +} from "@emprespresso/ci_model"; +import { executeJob, executePipeline } from "@emprespresso/ci_worker"; const run = Date.now().toString(); const eitherJob = getRequiredEnvVars(["remote", "refname", "rev"]) @@ -122,7 +124,7 @@ await LogMetricTraceable.from(eitherJob).bimap(TraceUtil.withTrace(trace)) .get() .then((e) => e.flatMap(() => eitherJob).fold((err, val) => { - if (err) throw err; + if (!val || err) throw err; return Deno.remove(getWorkingDirectoryForCiJob(val), { recursive: true }); }) ); diff --git a/worker/mod.ts b/worker/mod.ts index affcb2c..97980a8 100644 --- a/worker/mod.ts +++ b/worker/mod.ts @@ -1,2 +1,2 @@ -export * from "./secret/mod.ts"; -export * from "./executor/mod.ts"; +export * from "./secret.ts"; +export * from "./executor.ts"; diff --git a/worker/scripts/ansible_playbook b/worker/scripts/ansible_playbook index e9e967c..f2cd4b9 100755 --- a/worker/scripts/ansible_playbook +++ b/worker/scripts/ansible_playbook @@ -10,8 +10,8 @@ import { prependWith, TraceUtil, } from "@emprespresso/pengueno"; -import type { AnsiblePlaybookJob } from "@emprespresso/ci-model"; -import { Bitwarden, type SecureNote } from "@emprespresso/ci-worker"; +import type { AnsiblePlaybookJob } from "@emprespresso/ci_model"; +import { Bitwarden, type SecureNote } from "@emprespresso/ci_worker"; const eitherJob = getRequiredEnvVars([ "path", diff --git a/worker/scripts/build_docker_image b/worker/scripts/build_docker_image index 1dd0c3d..dc0e961 100755 --- a/worker/scripts/build_docker_image +++ b/worker/scripts/build_docker_image @@ -11,8 +11,8 @@ import { import type { BuildDockerImageJob, BuildDockerImageJobProps, -} from "@emprespresso/ci-model"; -import { Bitwarden, type LoginItem } from "@emprespresso/ci-worker"; +} from "@emprespresso/ci_model"; +import { Bitwarden, type LoginItem } from "@emprespresso/ci_worker"; const eitherJob = getRequiredEnvVars([ "registry", @@ -38,7 +38,7 @@ await LogMetricTraceable.from(eitherJob) .bimap( (tEitherJob) => { const trace = "build_docker_image." + - tEitherJob.get().fold((_, v) => v?.buildTarget ?? ""); + tEitherJob.get().fold((_, v) => v?.arguments.buildTarget ?? ""); return [tEitherJob.get(), trace]; }, ) @@ -116,13 +116,13 @@ await LogMetricTraceable.from(eitherJob) tEitherWithBuiltImage.trace.trace( buildImageMetric[err ? "failure" : "success"], ); - if (err) { + if (!val || err) { tEitherWithBuiltImage.trace.addTrace(LogLevel.ERROR).trace( `oh nyoo we couldn't buiwd the img :(( ${err}`, ); return; } - tEitherWithBuiltImage.trace.addTrace("buildOutput").trace(val); + tEitherWithBuiltImage.trace.addTrace("buildOutput").trace(val.buildOutput); }); }) .map(async (tEitherWithBuiltImage) => { diff --git a/worker/secret/bitwarden.ts b/worker/secret.ts index 7145f49..e0a4c5d 100644 --- a/worker/secret/bitwarden.ts +++ b/worker/secret.ts @@ -8,8 +8,33 @@ import { Metric, TraceUtil, } from "@emprespresso/pengueno"; -import type { IVault, SecretItem } from "./mod.ts"; +// -- <ISecret> -- +export interface LoginItem { + login: { + username: string; + password: string; + }; +} + +export interface SecureNote { + notes: string; +} + +export type SecretItem = LoginItem | SecureNote; +export interface IVault<TClient, TKey, TItemId> { + unlock: (client: TClient) => Promise<IEither<Error, TKey>>; + lock: (client: TClient, key: TKey) => Promise<IEither<Error, TKey>>; + + fetchSecret: <T extends SecretItem>( + client: TClient, + key: TKey, + item: TItemId, + ) => Promise<IEither<Error, T>>; +} +// -- </ISecret> -- + +// -- <IVault> -- type TClient = ITraceable<unknown, LogMetricTraceSupplier>; type TKey = string; type TItemId = string; @@ -165,3 +190,4 @@ export interface BitwardenConfig { secret: string; clientId: string; } +// -- </IVault> -- diff --git a/worker/secret/ivault.ts b/worker/secret/ivault.ts deleted file mode 100644 index e101e56..0000000 --- a/worker/secret/ivault.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { IEither } from "@emprespresso/pengueno"; - -export interface LoginItem { - login: { - username: string; - password: string; - }; -} - -export interface SecureNote { - notes: string; -} - -export type SecretItem = LoginItem | SecureNote; -export interface IVault<TClient, TKey, TItemId> { - unlock: (client: TClient) => Promise<IEither<Error, TKey>>; - lock: (client: TClient, key: TKey) => Promise<IEither<Error, TKey>>; - - fetchSecret: <T extends SecretItem>( - client: TClient, - key: TKey, - item: TItemId, - ) => Promise<IEither<Error, T>>; -} diff --git a/worker/secret/mod.ts b/worker/secret/mod.ts deleted file mode 100644 index 70a1ea9..0000000 --- a/worker/secret/mod.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./ivault.ts"; -export * from "./bitwarden.ts"; |