aws-email-forwarder/gulpfile.js

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)