#!/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 = '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 = { context: gitHookPipeline.getSourceDestination(), registry: REGISTRY, namespace: NAMESPACE, imageTag: branch, }; const baseCiPackageBuild: BuildDockerImageJob = { type: 'build_docker_image.js', arguments: { ...commonBuildArgs, repository: IMG + '_base', buildTarget: IMG + '_base', dockerfile: 'Dockerfile', }, }; gitHookPipeline.addStage({ parallelJobs: [baseCiPackageBuild], }); const subPackages = ['worker', 'server'].map( (_package) => { type: 'build_docker_image.js', arguments: { ...commonBuildArgs, repository: `${IMG}_${_package}`, buildTarget: _package, dockerfile: `${_package}/Dockerfile`, }, }, ); subPackages.push({ type: 'build_docker_image.js', arguments: { ...commonBuildArgs, repository: `${IMG}_packpub_npm`, buildTarget: 'packpub_npm', dockerfile: `Dockerfile`, context: join(commonBuildArgs.context, 'packpub/npm'), }, }); 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.js', arguments: { path: 'infra', playbooks: 'playbooks/ci.yml', }, }; [fetchAnsibleCode, thenDeploy].forEach((deploymentStage) => gitHookPipeline.addStage({ parallelJobs: [deploymentStage] }), ); return gitHookPipeline.build(); }; const main = () => { const data = getPipeline().serialize(); process.stdout.write(data); }; main();