summaryrefslogtreecommitdiff
path: root/.ci/ci.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2025-08-17 23:50:24 -0700
committerElizabeth Hunt <me@liz.coffee>2025-08-17 23:53:38 -0700
commit1a4fc9535a89b58e8b67c8996ade0b833116af3a (patch)
treed16f3129d7bb69f204bba8422e909354195a0042 /.ci/ci.ts
parent157dc327e8fe63541b517cfbeeaf202a3e8553a5 (diff)
downloaduptime-1a4fc9535a89b58e8b67c8996ade0b833116af3a.tar.gz
uptime-1a4fc9535a89b58e8b67c8996ade0b833116af3a.zip
Move to pengueno.
Diffstat (limited to '.ci/ci.ts')
-rw-r--r--.ci/ci.ts74
1 files changed, 74 insertions, 0 deletions
diff --git a/.ci/ci.ts b/.ci/ci.ts
new file mode 100644
index 0000000..1609e9d
--- /dev/null
+++ b/.ci/ci.ts
@@ -0,0 +1,74 @@
+#!/usr/bin/env node
+
+import {
+ AnsiblePlaybookJob,
+ BuildDockerImageJob,
+ DefaultGitHookPipelineBuilder,
+ FetchCodeJob,
+ Job,
+} from '@emprespresso/ci_model';
+import { join } from 'path';
+
+const REGISTRY = 'oci.liz.coffee';
+const NAMESPACE = 'emprespresso';
+const IMG = 'uptime';
+const REMOTE = 'ssh://src.liz.coffee:2222';
+
+const getPipeline = () => {
+ const gitHookPipeline = new DefaultGitHookPipelineBuilder();
+ const branch = gitHookPipeline.getBranch();
+ if (!branch) return gitHookPipeline.build();
+
+ const commonBuildArgs = {
+ context: gitHookPipeline.getSourceDestination(),
+ registry: REGISTRY,
+ namespace: NAMESPACE,
+ imageTag: branch,
+ };
+
+ const build: BuildDockerImageJob = {
+ type: 'build_docker_image.js',
+ arguments: {
+ ...commonBuildArgs,
+ repository: IMG,
+ buildTarget: IMG,
+ dockerfile: 'Dockerfile',
+ },
+ };
+ gitHookPipeline.addStage({
+ parallelJobs: [build],
+ });
+
+ const isRelease = branch === 'release';
+ if (!isRelease) {
+ return gitHookPipeline.build();
+ }
+
+ const fetchAnsibleCode: FetchCodeJob = {
+ type: 'fetch_code',
+ arguments: {
+ remoteUrl: `${REMOTE}/infra`,
+ checkout: 'main',
+ path: 'infra',
+ },
+ };
+ const thenDeploy: AnsiblePlaybookJob = {
+ type: 'ansible_playbook.js',
+ arguments: {
+ path: 'infra',
+ playbooks: 'playbooks/mon.yml',
+ },
+ };
+ [fetchAnsibleCode, thenDeploy].forEach((deploymentStage) =>
+ gitHookPipeline.addStage({ parallelJobs: [deploymentStage] }),
+ );
+
+ return gitHookPipeline.build();
+};
+
+const main = () => {
+ const data = getPipeline().serialize();
+ process.stdout.write(data);
+};
+
+main();