summaryrefslogtreecommitdiff
path: root/worker/scripts
diff options
context:
space:
mode:
authorElizabeth Alexander Hunt <me@liz.coffee>2025-05-10 16:57:03 -0700
committerElizabeth Alexander Hunt <me@liz.coffee>2025-05-10 16:57:03 -0700
commitfa8f3f9465e87d499f7d6428323f496a884b7818 (patch)
treeab477dfa52ef30282029c4f136bf605cb24d67a9 /worker/scripts
downloadci-fa8f3f9465e87d499f7d6428323f496a884b7818.tar.gz
ci-fa8f3f9465e87d499f7d6428323f496a884b7818.zip
initial commit
Diffstat (limited to 'worker/scripts')
-rw-r--r--worker/scripts/ansible_playbook0
-rw-r--r--worker/scripts/build_image67
-rw-r--r--worker/scripts/fetch_code6
-rw-r--r--worker/scripts/run_pipeline28
4 files changed, 101 insertions, 0 deletions
diff --git a/worker/scripts/ansible_playbook b/worker/scripts/ansible_playbook
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/worker/scripts/ansible_playbook
diff --git a/worker/scripts/build_image b/worker/scripts/build_image
new file mode 100644
index 0000000..ba1ec8f
--- /dev/null
+++ b/worker/scripts/build_image
@@ -0,0 +1,67 @@
+#!/usr/bin/env -S deno run --allow-env --allow-net
+
+import type { BuildDockerImageJobProps } from "@liz-ci/model";
+import {
+ BitwardenSession,
+ getRequiredEnv,
+ getStdout,
+ type LoginItem,
+} from "@liz-ci/utils";
+
+const args: BuildDockerImageJobProps = {
+ registry: getRequiredEnv("registry"),
+ namespace: getRequiredEnv("namespace"),
+ repository: getRequiredEnv("repository"),
+ imageTag: getRequiredEnv("imageTag"),
+
+ context: getRequiredEnv("context"),
+ dockerfile: getRequiredEnv("dockerfile"),
+ buildTarget: getRequiredEnv("buildTarget"),
+};
+
+const bitwardenSession = new BitwardenSession();
+const { username: registryUsername, password: registryPassword } =
+ (await bitwardenSession.getItem<LoginItem>(args.registry))?.login ?? {};
+if (!(registryUsername && registryPassword)) {
+ throw new Error("where's the login info bruh");
+}
+
+await getStdout(
+ [
+ "docker",
+ "login",
+ "--username",
+ registryUsername,
+ "--password",
+ registryPassword,
+ args.registry,
+ ],
+);
+
+const tag =
+ `${args.registry}/${args.namespace}/${args.repository}:${args.imageTag}`;
+await getStdout(
+ [
+ "docker",
+ "build",
+ "--target",
+ args.buildTarget,
+ "-t",
+ tag,
+ "-f",
+ `${args.dockerfile}`,
+ `${args.context}`,
+ ],
+ {
+ clearEnv: true,
+ env: {},
+ },
+);
+
+await getStdout(
+ [
+ "docker",
+ "push",
+ tag,
+ ],
+);
diff --git a/worker/scripts/fetch_code b/worker/scripts/fetch_code
new file mode 100644
index 0000000..d45f6db
--- /dev/null
+++ b/worker/scripts/fetch_code
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+git clone "$remote" "$path"
+cd "$path"
+git reset --hard "$checkout"
+cd -
diff --git a/worker/scripts/run_pipeline b/worker/scripts/run_pipeline
new file mode 100644
index 0000000..ad58573
--- /dev/null
+++ b/worker/scripts/run_pipeline
@@ -0,0 +1,28 @@
+#!/usr/bin/env -S deno --allow-env --allow-net --allow-read
+
+import { type Job, PipelineImpl } from "@liz-ci/model";
+import { getRequiredEnv, getStdout, validateIdentifier } from "@liz-ci/utils";
+
+const stages = await (Deno.readTextFile(getRequiredEnv("pipeline")))
+ .then(PipelineImpl.from)
+ .then((pipeline) => pipeline.getStages());
+
+const validateJob = (job: Job) => {
+ Object.entries(job.arguments).forEach((e) => {
+ if (!e.every(validateIdentifier)) {
+ throw new Error(`job of type ${job.type} has invalid entry ${e}`);
+ }
+ });
+};
+
+for (const stage of stages) {
+ await Promise.all(
+ stage.parallelJobs.map((job) => {
+ validateJob(job);
+
+ return getStdout(job.type, {
+ env: job.arguments,
+ });
+ }),
+ );
+}