s3-sync has the ability to receive headers as arguments and pass them to AWS S3 as metadata headers. This modification proposes to set headers at configuration so they are written in the objects when deploying. Main motivation is to be able to pass CacheControl header and have Cache-Control set for objects ovoiding "Leverage Browser Caching" throwed by page speed analyzers. Attention: Metadata are written equal to all objects (files) stored to S3 and there is no way to tailor it by file type at this moment. Signed-off-by: Josenivaldo Benito Jr <jrbenito@benito.qsl.br>
61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
var s3 = require('s3');
|
|
var chalk = require('chalk');
|
|
var xtend = require('xtend');
|
|
|
|
module.exports = function(args) {
|
|
|
|
var config = {
|
|
maxAsyncS3: args.concurrency,
|
|
s3Options: {
|
|
accessKeyId: args.aws_key || process.env.AWS_KEY,
|
|
secretAccessKey: args.aws_secret || process.env.AWS_SECRET,
|
|
region: args.region
|
|
}
|
|
};
|
|
var client = s3.createClient(config);
|
|
|
|
var publicDir = this.config.public_dir;
|
|
var log = this.log;
|
|
|
|
var customHeaders = args.headers || {};
|
|
|
|
if (!args.bucket || !config.s3Options.accessKeyId || !config.s3Options.secretAccessKey) {
|
|
var help = '';
|
|
|
|
help += 'You should configure deployment settings in _config.yml first!\n\n';
|
|
help += 'Example:\n';
|
|
help += ' deploy:\n';
|
|
help += ' type: s3\n';
|
|
help += ' bucket: <bucket>\n';
|
|
help += ' [aws_key]: <aws_key> # Optional, if provided as environment variable\n';
|
|
help += ' [aws_secret]: <aws_secret> # Optional, if provided as environment variable\n';
|
|
help += ' [concurrency]: <concurrency>\n';
|
|
help += ' [region]: <region> # See https://github.com/LearnBoost/knox#region\n',
|
|
help += ' [headers]: <JSON headers> # Optional, see README.md file\n\n';
|
|
help += 'For more help, you can check the docs: ' + chalk.underline('https://github.com/nt3rp/hexo-deployer-s3');
|
|
|
|
console.log(help);
|
|
return;
|
|
}
|
|
|
|
var params = {
|
|
localDir: publicDir,
|
|
deleteRemoved: true,
|
|
s3Params: xtend({
|
|
Bucket: args.bucket
|
|
},customHeaders)
|
|
}
|
|
|
|
var uploader = client.uploadDir(params);
|
|
log.info('Uploading...');
|
|
|
|
return uploader
|
|
.on('progress', function() {
|
|
// log.info(uploader.progressAmount + ' / ' + uploader.progressTotal);
|
|
}).on('end', function() {
|
|
log.info('Done!');
|
|
}).on('error', function(err) {
|
|
log.error(err)
|
|
});
|
|
};
|