91 lines
2.1 KiB
JavaScript
91 lines
2.1 KiB
JavaScript
const fs = require('fs')
|
|
const gulp = require('gulp')
|
|
const del = require('del')
|
|
const install = require('gulp-install')
|
|
const zip = require('gulp-zip')
|
|
const AWS = require('aws-sdk')
|
|
|
|
require('dotenv').config()
|
|
|
|
const clean = del.bind(null, ['dist/**/*', 'dist.zip'])
|
|
|
|
const js = done => {
|
|
gulp.src('index.js').pipe(gulp.dest('dist'))
|
|
done()
|
|
}
|
|
|
|
const npm = done => {
|
|
gulp
|
|
.src('package.json')
|
|
.pipe(gulp.dest('dist'))
|
|
.pipe(install({ production: true }, () => done()))
|
|
}
|
|
|
|
const env = done => {
|
|
gulp.src('.env').pipe(gulp.dest('dist'))
|
|
done()
|
|
}
|
|
|
|
const package = done => {
|
|
gulp
|
|
.src('dist/**/*')
|
|
.pipe(zip('dist.zip'))
|
|
.pipe(gulp.dest('.'))
|
|
done()
|
|
}
|
|
|
|
const upload = done => {
|
|
AWS.config.region = process.env.AWS_REGION
|
|
const lambda = new AWS.Lambda()
|
|
const functionName = process.env.LAMBDA_FUNCTION_NAME
|
|
|
|
lambda.getFunction({ FunctionName: functionName }, (err, data) => {
|
|
if (err) {
|
|
if (err.statusCode === 404) {
|
|
let warning = 'Unable to find lambda function ' + deploy_function + '. '
|
|
warning += 'Verify the lambda function name and AWS region are correct.'
|
|
console.log(warning)
|
|
} else {
|
|
let warning = 'AWS API request failed. '
|
|
warning += 'Check your AWS credentials and permissions.'
|
|
console.log(warning)
|
|
}
|
|
}
|
|
|
|
const paramsCode = {
|
|
FunctionName: functionName
|
|
}
|
|
|
|
const paramsConfig = {
|
|
FunctionName: functionName,
|
|
Environment: {
|
|
Variables: {
|
|
FORWARD_EMAIL: process.env.FORWARD_EMAIL,
|
|
EMAIL_BUCKET: process.env.EMAIL_BUCKET,
|
|
EMAIL_BUCKET_PREFIX: process.env.EMAIL_BUCKET_PREFIX
|
|
}
|
|
}
|
|
}
|
|
|
|
fs.readFile('dist.zip', (err, data) => {
|
|
if (err) console.log(err)
|
|
|
|
paramsCode['ZipFile'] = data
|
|
|
|
lambda.updateFunctionCode(paramsCode, (err, data) => {
|
|
if (err) console.log(err)
|
|
|
|
lambda.updateFunctionConfiguration(paramsConfig, (err, data) => {
|
|
if (err) console.log(err)
|
|
|
|
done()
|
|
})
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
gulp.task('default', gulp.series(clean, js, env, npm, package))
|
|
|
|
gulp.task('deploy', upload)
|