diff options
| author | Elizabeth Hunt <me@liz.coffee> | 2025-10-05 16:42:02 -0700 |
|---|---|---|
| committer | Elizabeth Hunt <me@liz.coffee> | 2025-10-05 23:11:41 -0700 |
| commit | de43eb05d2e43ab31effce3dcca62ad91a556b26 (patch) | |
| tree | 47a62b61bfc97dda639dea70627ecf3005ba7b02 /.ci/ci.ts | |
| parent | 35add63ec4dce39710095f17abd86777de9e5b49 (diff) | |
| download | ansicolor-de43eb05d2e43ab31effce3dcca62ad91a556b26.tar.gz ansicolor-de43eb05d2e43ab31effce3dcca62ad91a556b26.zip | |
Diffstat (limited to '.ci/ci.ts')
| -rw-r--r-- | .ci/ci.ts | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/.ci/ci.ts b/.ci/ci.ts new file mode 100644 index 0000000..d1208f7 --- /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 = 'ansicolor'; +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: 'ansicolor', + 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/ansicolor.yml', + }, + }; + [fetchAnsibleCode, thenDeploy].forEach((deploymentStage) => + gitHookPipeline.addStage({ parallelJobs: [deploymentStage] }), + ); + + return gitHookPipeline.build(); +}; + +const main = () => { + const data = getPipeline().serialize(); + process.stdout.write(data); +}; + +main(); |
