@architect/deploy
Version:
deploys @architect projects
57 lines (55 loc) • 1.53 kB
JavaScript
let aws = require('aws-sdk')
let waterfall = require('run-waterfall')
module.exports = function patchApiGateway({stackname}, callback) {
waterfall([
function(callback) {
let cloudformation = new aws.CloudFormation
cloudformation.describeStacks({
StackName: stackname
},
function done(err, data) {
if (err) console.log(err)
else if (Array.isArray(data.Stacks)) {
let outs = data.Stacks[0].Outputs
let restApiId = outs.find(o=> o.OutputKey === 'restApiId')
if (!restApiId) callback(Error('cancel'))
else callback(null, restApiId.OutputValue)
}
else {
callback(Error('stack_not_found'))
}
})
},
function(restApiId, callback) {
// update binary media types to */*
let apigateway = new aws.APIGateway
apigateway.updateRestApi({
restApiId,
patchOperations: [{
op: 'add',
path: '/binaryMediaTypes/*~1*'
}]
},
function done(err) {
if (err) callback(err)
else callback(null, restApiId)
})
},
function(restApiId, callback) {
let apigateway = new aws.APIGateway
apigateway.createDeployment({
restApiId,
stageName: 'production'
},
function done(err) {
if (err) callback(err)
else callback()
})
}
],
function done(err) {
if (err && err.name === 'cancel') callback()
else if (err) callback(err)
else callback()
})
}