seagull-js/seagull

View on GitHub
packages/deploy-aws/src/lib/build_pipeline.ts

Summary

Maintainability
A
0 mins
Test Coverage
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')],
  })
}