#!/usr/bin/env -S deno run --allow-env import { BuildDockerImageJob, DefaultGitHookPipelineBuilder, } from "@liz-ci/model"; import { AnsiblePlaybookJob, FetchCodeJob } from "../model/job.ts"; const REGISTRY = "oci.liz.coffee"; const NAMESPACE = "img"; const IMG = "liz-ci"; const getPipeline = () => { const gitHookPipeline = new DefaultGitHookPipelineBuilder(); const branch = gitHookPipeline.getBranch(); if (!branch) return gitHookPipeline.build(); const commonBuildArgs = { registry: REGISTRY, namespace: NAMESPACE, imageTag: branch, }; const ciPackageBuild: BuildDockerImageJob = { type: "build_docker_image", arguments: { ...commonBuildArgs, context: gitHookPipeline.getSourceDestination(), repository: IMG, buildTarget: IMG, dockerfile: "Dockerfile", }, }; gitHookPipeline.addStage({ parallelJobs: [ciPackageBuild], }); 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: "ssh://src.liz.coffee:2222/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) { console.log(getPipeline().serialize()); }