summaryrefslogtreecommitdiff
path: root/worker
diff options
context:
space:
mode:
Diffstat (limited to 'worker')
-rw-r--r--worker/Dockerfile10
-rw-r--r--worker/deno.json2
-rw-r--r--worker/executor.ts (renamed from worker/executor/pipeline.ts)51
-rw-r--r--worker/executor/job.ts42
-rw-r--r--worker/executor/mod.ts2
-rw-r--r--worker/jobs/ci_pipeline.run8
-rw-r--r--worker/mod.ts4
-rwxr-xr-xworker/scripts/ansible_playbook4
-rwxr-xr-xworker/scripts/build_docker_image10
-rw-r--r--worker/secret.ts (renamed from worker/secret/bitwarden.ts)28
-rw-r--r--worker/secret/ivault.ts24
-rw-r--r--worker/secret/mod.ts2
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";