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)