UNPKG

briareus

Version:

Briareus assists with Feature Branch deploys to ECS

74 lines (58 loc) 1.97 kB
'use strict' const _ = require('lodash'); const Monitor = require('ecs-deployment-monitor'); const renderStates = require('../../../node_modules/ecs-deployment-monitor/lib/renderer/states'); const errors = require('../errors'); let action = module.exports = function (pipeline, payload, cb) { let deployment = payload.activeDeployment; let lastEvent; let monitor = Monitor({ serviceName: payload.name, clusterArn: payload.ecsClusterArn, taskDefinitionArn: deployment.taskDefinition.arn, }); function getStateInfo(state) { let stateInfo = renderStates[state](monitor); stateInfo.id = state; let event = { action: stateInfo, monitor: { isSteady: monitor.isSteady(), isFailure: monitor.isFailure(), } }; return event; } function emitComplete(event, cb) { if (!cb) cb = _.noop; event.endAt = Date.now(); event.duration = Math.ceil((event.endAt - event.startAt) / 1000); pipeline.emit('action:complete', event); pipeline.save(cb); } monitor.on('error', (error) => pipeline.emit('monitor:error', { deployment, error })); monitor.on('state', (state) => { // Process on next tick so that action:complete's are processed // before action:start process.nextTick(() => { let event = lastEvent = getStateInfo(state); event.startAt = Date.now(); pipeline.emit('action:start', event); if (state === 'Steady') emitComplete(event); else monitor.once('state', (state) => emitComplete(event)); pipeline.save(_.noop); }); }); monitor.on('end', () => { // Process on next tick so that steady's action:complete is processed // before we call the callback process.nextTick(() => { if (monitor.isFailure()) { return cb(new errors.DeploymentFailure('payload failed')); } cb(null, []) }); }); } action.waiting = 'Monitoring deploy'; action.done = 'Monitoring complete';