e534a911f3
Prettier v2 has the following breaking changes: * enforces spaces between `function` and params * enforces trailing commas by default
103 lines
2.8 KiB
JavaScript
103 lines
2.8 KiB
JavaScript
const AWS = require('aws-sdk');
|
|
const git = require('./util/git');
|
|
const { createRegisterAsyncTaskFn } = require('./util/async-grunt-task');
|
|
const semver = require('semver');
|
|
|
|
module.exports = function (grunt) {
|
|
const registerAsyncTask = createRegisterAsyncTaskFn(grunt);
|
|
|
|
registerAsyncTask('publish-to-aws', async () => {
|
|
grunt.log.writeln('remotes: ' + (await git.remotes()));
|
|
grunt.log.writeln('branches: ' + (await git.branches()));
|
|
|
|
const commitInfo = await git.commitInfo();
|
|
grunt.log.writeln('tag: ', commitInfo.tagName);
|
|
|
|
const suffixes = [];
|
|
|
|
// Publish the master as "latest" and with the commit-id
|
|
if (commitInfo.isMaster) {
|
|
suffixes.push('-latest');
|
|
suffixes.push('-' + commitInfo.headSha);
|
|
}
|
|
|
|
// Publish tags by their tag-name
|
|
if (commitInfo.tagName != null && semver.valid(commitInfo.tagName)) {
|
|
suffixes.push('-' + commitInfo.tagName);
|
|
}
|
|
|
|
if (suffixes.length > 0) {
|
|
initSDK();
|
|
grunt.log.writeln(
|
|
'publishing file-suffixes: ' + JSON.stringify(suffixes)
|
|
);
|
|
await publish(suffixes);
|
|
}
|
|
});
|
|
|
|
function initSDK() {
|
|
const bucket = process.env.S3_BUCKET_NAME,
|
|
key = process.env.S3_ACCESS_KEY_ID,
|
|
secret = process.env.S3_SECRET_ACCESS_KEY;
|
|
|
|
if (!bucket || !key || !secret) {
|
|
throw new Error('Missing S3 config values');
|
|
}
|
|
|
|
AWS.config.update({ accessKeyId: key, secretAccessKey: secret });
|
|
}
|
|
|
|
async function publish(suffixes) {
|
|
const publishPromises = suffixes.map((suffix) => publishSuffix(suffix));
|
|
return Promise.all(publishPromises);
|
|
}
|
|
|
|
async function publishSuffix(suffix) {
|
|
const filenames = [
|
|
'handlebars.js',
|
|
'handlebars.min.js',
|
|
'handlebars.runtime.js',
|
|
'handlebars.runtime.min.js',
|
|
];
|
|
const publishPromises = filenames.map(async (filename) => {
|
|
const nameInBucket = getNameInBucket(filename, suffix);
|
|
const localFile = getLocalFile(filename);
|
|
await uploadToBucket(localFile, nameInBucket);
|
|
grunt.log.writeln(
|
|
`Published ${localFile} to build server (${nameInBucket})`
|
|
);
|
|
});
|
|
return Promise.all(publishPromises);
|
|
}
|
|
|
|
async function uploadToBucket(localFile, nameInBucket) {
|
|
const bucket = process.env.S3_BUCKET_NAME;
|
|
const uploadParams = {
|
|
Bucket: bucket,
|
|
Key: nameInBucket,
|
|
Body: grunt.file.read(localFile),
|
|
};
|
|
return s3PutObject(uploadParams);
|
|
}
|
|
};
|
|
|
|
function s3PutObject(uploadParams) {
|
|
const s3 = new AWS.S3();
|
|
return new Promise((resolve, reject) => {
|
|
s3.putObject(uploadParams, (err) => {
|
|
if (err != null) {
|
|
return reject(err);
|
|
}
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
|
|
function getNameInBucket(filename, suffix) {
|
|
return filename.replace(/\.js$/, suffix + '.js');
|
|
}
|
|
|
|
function getLocalFile(filename) {
|
|
return 'dist/' + filename;
|
|
}
|