summaryrefslogtreecommitdiff
path: root/.ci/ci.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2025-06-20 14:53:38 -0700
committerElizabeth Hunt <me@liz.coffee>2025-06-20 14:53:38 -0700
commitd4791f3d357634daf506fb8f91cc5332a794c421 (patch)
tree1bb01d2d4d8fa74d83bb6f99f2c8aa4146ca2d11 /.ci/ci.ts
parentd7e8d31c94cd713a2f4cf799e20e993acc69e361 (diff)
downloadci-d4791f3d357634daf506fb8f91cc5332a794c421.tar.gz
ci-d4791f3d357634daf506fb8f91cc5332a794c421.zip
Move to nodejs
Diffstat (limited to '.ci/ci.ts')
-rw-r--r--.ci/ci.ts139
1 files changed, 69 insertions, 70 deletions
diff --git a/.ci/ci.ts b/.ci/ci.ts
index 89bad35..7f06b26 100644
--- a/.ci/ci.ts
+++ b/.ci/ci.ts
@@ -1,84 +1,83 @@
-#!/usr/bin/env -S deno run --allow-env
+#!/usr/bin/env ts-node
import {
- AnsiblePlaybookJob,
- BuildDockerImageJob,
- DefaultGitHookPipelineBuilder,
- FetchCodeJob,
-} from "@emprespresso/ci_model";
+ AnsiblePlaybookJob,
+ BuildDockerImageJob,
+ DefaultGitHookPipelineBuilder,
+ FetchCodeJob,
+} from '../model/index.js';
-const REGISTRY = "oci.liz.coffee";
-const NAMESPACE = "emprespresso";
-const IMG = "ci";
-const REMOTE = "ssh://src.liz.coffee:2222";
+const REGISTRY = 'oci.liz.coffee';
+const NAMESPACE = 'emprespresso';
+const IMG = 'ci';
+const REMOTE = 'ssh://src.liz.coffee:2222';
const getPipeline = () => {
- const gitHookPipeline = new DefaultGitHookPipelineBuilder();
- const branch = gitHookPipeline.getBranch();
- if (!branch) return gitHookPipeline.build();
+ const gitHookPipeline = new DefaultGitHookPipelineBuilder();
+ const branch = gitHookPipeline.getBranch();
+ if (!branch) return gitHookPipeline.build();
- const commonBuildArgs = {
- registry: REGISTRY,
- namespace: NAMESPACE,
- imageTag: branch,
- };
+ const commonBuildArgs = {
+ registry: REGISTRY,
+ namespace: NAMESPACE,
+ imageTag: branch,
+ };
- const baseCiPackageBuild: BuildDockerImageJob = {
- type: "build_docker_image.ts",
- arguments: {
- ...commonBuildArgs,
- context: gitHookPipeline.getSourceDestination(),
- repository: IMG + "_base",
- buildTarget: IMG + "_base",
- dockerfile: "Dockerfile",
- },
- };
- gitHookPipeline.addStage({
- parallelJobs: [baseCiPackageBuild],
- });
+ const baseCiPackageBuild: BuildDockerImageJob = {
+ type: 'build_docker_image.ts',
+ arguments: {
+ ...commonBuildArgs,
+ context: gitHookPipeline.getSourceDestination(),
+ repository: IMG + '_base',
+ buildTarget: IMG + '_base',
+ dockerfile: 'Dockerfile',
+ },
+ };
+ gitHookPipeline.addStage({
+ parallelJobs: [baseCiPackageBuild],
+ });
- const subPackages = ["worker", "hooks"].map((_package) => ({
- type: "build_docker_image.ts",
- arguments: {
- ...commonBuildArgs,
- repository: `${IMG}_${_package}`,
- buildTarget: _package,
- dockerfile: `${_package}/Dockerfile`,
- },
- }));
- gitHookPipeline.addStage({
- parallelJobs: subPackages,
- });
+ const subPackages = ['worker', 'hooks'].map((_package) => ({
+ type: 'build_docker_image.ts',
+ arguments: {
+ ...commonBuildArgs,
+ repository: `${IMG}_${_package}`,
+ buildTarget: _package,
+ dockerfile: `${_package}/Dockerfile`,
+ },
+ }));
+ gitHookPipeline.addStage({
+ parallelJobs: subPackages,
+ });
- const isRelease = branch === "release";
- if (!isRelease) {
- return gitHookPipeline.build();
- }
+ const isRelease = branch === 'release';
+ if (!isRelease) {
+ return gitHookPipeline.build();
+ }
- const fetchAnsibleCode: FetchCodeJob = {
- type: "fetch_code.ts",
- arguments: {
- remoteUrl: `${REMOTE}/infra`,
- checkout: "main",
- path: "infra",
- },
- };
- const thenDeploy: AnsiblePlaybookJob = {
- type: "ansible_playbook.ts",
- arguments: {
- path: "infra",
- playbooks: "playbooks/ci.yml",
- },
- };
- [fetchAnsibleCode, thenDeploy].forEach((deploymentStage) =>
- gitHookPipeline.addStage({ parallelJobs: [deploymentStage] }),
- );
+ const fetchAnsibleCode: FetchCodeJob = {
+ type: 'fetch_code.ts',
+ arguments: {
+ remoteUrl: `${REMOTE}/infra`,
+ checkout: 'main',
+ path: 'infra',
+ },
+ };
+ const thenDeploy: AnsiblePlaybookJob = {
+ type: 'ansible_playbook.ts',
+ arguments: {
+ path: 'infra',
+ playbooks: 'playbooks/ci.yml',
+ },
+ };
+ [fetchAnsibleCode, thenDeploy].forEach((deploymentStage) =>
+ gitHookPipeline.addStage({ parallelJobs: [deploymentStage] }),
+ );
- return gitHookPipeline.build();
+ return gitHookPipeline.build();
};
-if (import.meta.main) {
- const encoder = new TextEncoder();
- const data = encoder.encode(getPipeline().serialize());
- await Deno.stdout.write(data);
+if (import.meta.url === `file://${process.argv[1]}`) {
+ const data = getPipeline().serialize();
+ process.stdout.write(data);
}