UNPKG

@incdevco/framework

Version:
129 lines (74 loc) 2.52 kB
var crypto = require('crypto'); var AWS = require('aws-sdk'); var es = require('event-stream'); var gutil = require('gulp-util'); var Promise = require('bluebird'); var defaultContentType = 'application/octet-stream'; var pluginName = 'upload-lambda-packages'; module.exports = function (config) { 'use strict'; var prefix; var promise = Promise.resolve(true); var s3; config = config || {}; config.packages = config.packages || {}; defaultContentType = config.defaultContentType || defaultContentType; prefix = config.prefix || 'lambda-packages/'; s3 = config.s3 || new AWS.S3(); return es.map(function (file, done) { var md5Hash = crypto.createHash('md5') .update(file.contents) .digest('hex'); var eTag = '"' + md5Hash + '"'; var key = prefix + file.path.replace(file.base, ''); var s3ObjectVersion; s3.headObject({ Bucket: config.bucket, Key: key }).promise() .then(function (result) { s3ObjectVersion = result.VersionId; if (eTag === result.ETag) { // no file change, do not upload //gutil.log('not changed', key); return false; } else { // file has changed, upload //gutil.log('uploading', key); return true; } }, function (exception) { if (exception.code === 'NotFound') { return true; } throw exception; }) .then(function (upload) { if (upload) { promise = promise.then(function () { return s3.putObject({ Body: file.contents, Bucket: config.bucket, Key: key }).promise() .then(function (result) { s3ObjectVersion = result.VersionId; gutil.log('uploaded', key, result.VersionId); return true; }); }); return promise; } else { return false; } }) .then(function () { var name = key.split('/')[1].replace('.zip', ''); config.packages[name] = config.packages[name] || {}; config.packages[name].S3ObjectVersion = s3ObjectVersion; done(); }) .catch(done); }); };