diff options
Diffstat (limited to '.ci')
-rw-r--r-- | .ci/ci.json | 2 | ||||
-rw-r--r-- | .ci/ci.ts | 139 |
2 files changed, 70 insertions, 71 deletions
diff --git a/.ci/ci.json b/.ci/ci.json index dc29f8d..e10df80 100644 --- a/.ci/ci.json +++ b/.ci/ci.json @@ -1,3 +1,3 @@ { - "pipeline": ".ci/ci.ts" + "workflow": ".ci/ci.js" } @@ -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); } |