#!/usr/bin/env -S deno run --allow-env import { AnsiblePlaybookJob, BuildDockerImageJob, DefaultGitHookPipelineBuilder, FetchCodeJob, } from "@emprespresso/ci_model"; 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 commonBuildArgs = { registry: REGISTRY, namespace: NAMESPACE, imageTag: branch, }; const baseCiPackageBuild: BuildDockerImageJob = { type: "build_docker_image", 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", 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: `${REMOTE}/infra`, checkout: "main", path: "infra", }, }; const thenDeploy: AnsiblePlaybookJob = { type: "ansible_playbook", arguments: { path: "infra", playbooks: "playbooks/ci.yml", }, }; [fetchAnsibleCode, thenDeploy].forEach((deploymentStage) => gitHookPipeline.addStage({ parallelJobs: [deploymentStage] }), ); return gitHookPipeline.build(); }; if (import.meta.main) { const encoder = new TextEncoder(); const data = encoder.encode(getPipeline().serialize()); await Deno.stdout.write(data); }