Created
July 22, 2022 13:08
-
-
Save rzamana/7539bfb25efe39bf292753979a8e4705 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const gulp = require('gulp') | |
const awspublish = require('gulp-awspublish') | |
const cloudfront = require('gulp-cloudfront-invalidate-aws-publish') | |
const parallelize = require('concurrent-transform') | |
const rename = require('gulp-rename') | |
// https://docs.aws.amazon.com/cli/latest/userguide/cli-environment.html | |
const config = { | |
// Required | |
params: { | |
Bucket: process.env.AWS_BUCKET_NAME | |
}, | |
// Optional | |
deleteOldVersions: false, // NOT FOR PRODUCTION | |
distribution: process.env.AWS_CLOUDFRONT, // CloudFront distribution ID | |
headers: { | |
/* 'Cache-Control': 'max-age=315360000, no-transform, public', */ | |
}, | |
// Sensible Defaults - gitignore these Files and Dirs | |
distDir: 'dist', | |
indexRootPath: true, | |
cacheFileName: '.awspublish', | |
concurrentUploads: 10, | |
wait: true // wait for CloudFront invalidation to complete (about 30-60 seconds) | |
} | |
gulp.task('deploy', function () { | |
// create a new publisher using S3 options | |
// http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor-property | |
const publisher = awspublish.create(config) | |
let g = gulp.src('./' + config.distDir + '/**') | |
g = g.pipe(rename(function (path) { | |
path.dirname = process.env.INSTANCE + "/" + path.dirname; | |
})) | |
// publisher will add Content-Length, Content-Type and headers specified above | |
// If not specified it will set x-amz-acl to public-read by default | |
g = g.pipe( | |
parallelize(publisher.publish(config.headers), config.concurrentUploads) | |
) | |
// Invalidate CDN | |
if (config.distribution) { | |
console.log('Configured with CloudFront distribution') | |
g = g.pipe(cloudfront(config)) | |
} else { | |
console.log( | |
'No CloudFront distribution configured - skipping CDN invalidation' | |
) | |
} | |
// Delete removed files | |
if (config.deleteOldVersions) { | |
g = g.pipe(publisher.sync(process.env.INSTANCE)) | |
} | |
// create a cache file to speed up consecutive uploads | |
// g = g.pipe(publisher.cache()) | |
// print upload updates to console | |
g = g.pipe(awspublish.reporter()) | |
return g | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment