summaryrefslogtreecommitdiff
path: root/.ci/ci.ts
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 /.ci/ci.ts
downloadci-fa8f3f9465e87d499f7d6428323f496a884b7818.tar.gz
ci-fa8f3f9465e87d499f7d6428323f496a884b7818.zip
initial commit
Diffstat (limited to '.ci/ci.ts')
-rw-r--r--.ci/ci.ts82
1 files changed, 82 insertions, 0 deletions
diff --git a/.ci/ci.ts b/.ci/ci.ts
new file mode 100644
index 0000000..c876762
--- /dev/null
+++ b/.ci/ci.ts
@@ -0,0 +1,82 @@
+#!/usr/bin/env -S deno run --allow-env
+
+import {
+ BuildDockerImageJob,
+ DefaultGitHookPipelineBuilder,
+} from "@liz-ci/model";
+import { AnsiblePlaybookJob, FetchCodeJob } from "../model/job.ts";
+
+const REGISTRY = "oci.liz.coffee";
+const NAMESPACE = "img";
+const IMG = "liz-ci";
+
+const getPipeline = () => {
+ const gitHookPipeline = new DefaultGitHookPipelineBuilder();
+ const branch = gitHookPipeline.getBranch();
+ if (!branch) return gitHookPipeline.build();
+
+ const commonBuildArgs = {
+ registry: REGISTRY,
+ namespace: NAMESPACE,
+ imageTag: branch,
+ };
+
+ const ciPackageBuild: BuildDockerImageJob = {
+ type: "build_docker_image",
+ arguments: {
+ ...commonBuildArgs,
+ context: gitHookPipeline.getSourceDestination(),
+ repository: IMG,
+ buildTarget: IMG,
+ dockerfile: "Dockerfile",
+ },
+ };
+ gitHookPipeline.addStage({
+ parallelJobs: [ciPackageBuild],
+ });
+
+ const subPackages = [
+ "worker",
+ "hooks",
+ ].map((_package) => ({
+ type: "build_docker_image",
+ arguments: {
+ ...commonBuildArgs,
+ repository: `${IMG}-${_package}`,
+ buildTarget: _package,
+ dockerfile: `${_package}/Dockerfile`,
+ },
+ }));
+ gitHookPipeline.addStage({
+ parallelJobs: subPackages,
+ });
+
+ const isRelease = branch === "release";
+ if (!isRelease) {
+ return gitHookPipeline.build();
+ }
+
+ const fetchAnsibleCode: FetchCodeJob = {
+ type: "fetch_code",
+ arguments: {
+ remoteUrl: "ssh://src.liz.coffee:2222/infra",
+ checkout: "main",
+ path: "infra",
+ },
+ };
+ const thenDeploy: AnsiblePlaybookJob = {
+ type: "ansible_playbook",
+ arguments: {
+ playbooks: "playbooks/ci.yml",
+ },
+ };
+ [fetchAnsibleCode, thenDeploy].forEach((deploymentStage) =>
+ gitHookPipeline.addStage({ parallelJobs: [deploymentStage] })
+ );
+
+ return gitHookPipeline.build();
+};
+
+if (import.meta.main) {
+ console.log(getPipeline().serialize());
+}