packages/deploy-aws/src/lib/build_pipeline.ts
import { SeagullStack } from '../seagull_stack'
import { StageConfigParams } from '../types'
import {
getBuildConfig,
getDeployConfig,
getSourceConfig,
getTestConfig,
getTestEnd2EndConfig,
} from './get_stage_configs'
const buildActionOutputArtifacts = (workers: number) => {
const artifacts = {} as any
;[...Array(workers).keys()].forEach(i => {
const build = `build${i}`
const dist = `dist${i}`
artifacts[build] = { files: ['dist/**/*'], name: build }
artifacts[dist] = { files: ['dist/**/*'], name: dist }
})
return {
'primary-artifacts': {},
'secondary-artifacts': artifacts,
}
}
const deployActionOutputArtifacts = {
'secondary-artifacts': {
cfurl: {
files: ['/tmp/cfurl.txt'],
name: 'cfurl',
},
deploy: {
files: '**/*',
name: 'deploy',
},
},
}
export function addPipelineStages(
stack: SeagullStack,
params: StageConfigParams
) {
const sourceAction = stack.addSourceStage(
'source',
getSourceConfig(params, 0)
)
const buildActions = stack.addBuildActionStage(
'build',
{
...getBuildConfig(params, 1, sourceAction.outputArtifact),
outputArtifacts: buildActionOutputArtifacts(params.buildWorkers),
},
getTestConfig(params, 1, sourceAction.outputArtifact),
params.buildWorkers
)
const deployInput = buildActions.map((a, i) =>
a.additionalOutputArtifact(`dist${i}`)
)
const deployAction = stack.addDeployActionStage('deploy', {
...getDeployConfig(params, 2, sourceAction.outputArtifact),
additionalInputArtifacts: deployInput,
outputArtifacts: deployActionOutputArtifacts,
})
stack.addGenericBuildActionStage('end2end-test', {
...getTestEnd2EndConfig(params, 3, sourceAction.outputArtifact),
additionalInputArtifacts: [deployAction.additionalOutputArtifact('cfurl')],
})
}