import { FetchCodeJob } from '@emprespresso/ci_model'; import { PipelineImpl, Pipeline, PipelineStage } from './index.js'; export interface PipelineBuilder { addStage(stage: PipelineStage): PipelineBuilder; build(): Pipeline; } export abstract class BasePipelineBuilder implements PipelineBuilder { protected readonly stages: Array = []; public addStage(stage: PipelineStage): PipelineBuilder { this.stages.push(stage); return this; } public build() { return new PipelineImpl(this.stages); } } export class DefaultGitHookPipelineBuilder extends BasePipelineBuilder { constructor( private readonly remoteUrl = process.env.remote!, rev = process.env.rev!, private readonly ref = process.env.ref!, ) { super(); this.addStage({ parallelJobs: [ { type: 'fetch_code', arguments: { remoteUrl, checkout: rev, path: this.getSourceDestination(), }, }, ], }); } public getSourceDestination() { return this.remoteUrl.split('/').at(-1) ?? 'src'; } public getBranch(): string | undefined { const branchRefPrefix = 'refs/heads/'; return this.ref.split(branchRefPrefix).at(1); } }