aboutsummaryrefslogtreecommitdiffstats
path: root/tasks/deploy.js
diff options
context:
space:
mode:
Diffstat (limited to 'tasks/deploy.js')
-rw-r--r--tasks/deploy.js355
1 files changed, 178 insertions, 177 deletions
diff --git a/tasks/deploy.js b/tasks/deploy.js
index 4ff94680..22fdb444 100644
--- a/tasks/deploy.js
+++ b/tasks/deploy.js
@@ -28,244 +28,245 @@ const minSuffix = '.min';
// Get AWS config
Object.values(deploy).forEach(target => {
- Object.assign(target, {
- publisher: publish.create({
- region: target.region,
- params: {
- Bucket: target.bucket,
- },
- credentials: new aws.SharedIniFileCredentials({ profile: 'plyr' }),
- }),
- });
+ Object.assign(target, {
+ publisher: publish.create({
+ region: target.region,
+ params: {
+ Bucket: target.bucket,
+ },
+ credentials: new aws.SharedIniFileCredentials({ profile: 'plyr' }),
+ }),
+ });
});
// Paths
const root = path.join(__dirname, '..');
const paths = {
- upload: [
- path.join(root, `dist/*${minSuffix}.*`),
- path.join(root, 'dist/*.css'),
- path.join(root, 'dist/*.svg'),
- path.join(root, `demo/dist/*${minSuffix}.*`),
- path.join(root, 'demo/dist/*.css'),
- path.join(root, 'demo/dist/*.svg'),
- ],
+ upload: [
+ path.join(root, `dist/*${minSuffix}.*`),
+ path.join(root, 'dist/*.css'),
+ path.join(root, 'dist/*.svg'),
+ path.join(root, `demo/dist/*${minSuffix}.*`),
+ path.join(root, 'demo/dist/*.css'),
+ path.join(root, 'demo/dist/*.svg'),
+ ],
};
// Get credentials
let credentials = {};
try {
- credentials = require('../credentials.json'); //eslint-disable-line
+ credentials = require('../credentials.json'); //eslint-disable-line
} catch (e) {
- // Do nothing
+ // Do nothing
}
// Get branch info
const branch = {
- current: gitbranch.sync(),
- master: 'master',
- beta: 'beta',
+ current: gitbranch.sync(),
+ master: 'master',
+ beta: 'beta',
};
const maxAge = 31536000; // 1 year
const options = {
- cdn: {
- headers: {
- 'Cache-Control': `max-age=${maxAge}, immutable`,
- },
- },
- demo: {
- uploadPath: branch.current === branch.beta ? '/beta' : null,
- headers: {
- 'Cache-Control': 'no-cache, no-store, must-revalidate, max-age=0',
- },
+ cdn: {
+ headers: {
+ 'Cache-Control': `max-age=${maxAge}, immutable`,
},
- symlinks(ver, filename) {
- return {
- headers: {
- // http://stackoverflow.com/questions/2272835/amazon-s3-object-redirect
- 'x-amz-website-redirect-location': `/${ver}/${filename}`,
- 'Cache-Control': 'no-cache, no-store, must-revalidate, max-age=0',
- },
- };
+ },
+ demo: {
+ uploadPath: branch.current === branch.beta ? '/beta' : null,
+ headers: {
+ 'Cache-Control': 'no-cache, no-store, must-revalidate, max-age=0',
},
+ },
+ symlinks(ver, filename) {
+ return {
+ headers: {
+ // http://stackoverflow.com/questions/2272835/amazon-s3-object-redirect
+ 'x-amz-website-redirect-location': `/${ver}/${filename}`,
+ 'Cache-Control': 'no-cache, no-store, must-revalidate, max-age=0',
+ },
+ };
+ },
};
// Size plugin
const sizeOptions = { showFiles: true, gzip: true };
const regex =
- '(?:0|[1-9][0-9]*)\\.(?:0|[1-9][0-9]*).(?:0|[1-9][0-9]*)(?:-[\\da-z\\-]+(?:.[\\da-z\\-]+)*)?(?:\\+[\\da-z\\-]+(?:.[\\da-z\\-]+)*)?';
+ '(?:0|[1-9][0-9]*)\\.(?:0|[1-9][0-9]*).(?:0|[1-9][0-9]*)(?:-[\\da-z\\-]+(?:.[\\da-z\\-]+)*)?(?:\\+[\\da-z\\-]+(?:.[\\da-z\\-]+)*)?';
const semver = new RegExp(`v${regex}`, 'gi');
const localPath = new RegExp('(../)?dist', 'gi');
const versionPath = `https://${deploy.cdn.domain}/${version}`;
const cdnpath = new RegExp(`${deploy.cdn.domain}/${regex}/`, 'gi');
const renameFile = rename(p => {
- p.basename = p.basename.replace(minSuffix, ''); // eslint-disable-line
- p.dirname = p.dirname.replace('.', version); // eslint-disable-line
+ p.basename = p.basename.replace(minSuffix, ''); // eslint-disable-line
+ p.dirname = p.dirname.replace('.', version); // eslint-disable-line
});
// Check we're on the correct branch to deploy
const canDeploy = () => {
- const allowed = [branch.master, branch.beta];
+ const allowed = [branch.master, branch.beta];
- if (!allowed.includes(branch.current)) {
- console.error(`Must be on ${allowed.join(', ')} to publish! (current: ${branch.current})`);
+ if (!allowed.includes(branch.current)) {
+ console.error(`Must be on ${allowed.join(', ')} to publish! (current: ${branch.current})`);
- return false;
- }
+ return false;
+ }
- return true;
+ return true;
};
gulp.task('version', done => {
- if (!canDeploy()) {
- done();
- return null;
- }
-
- const { domain } = deploy.cdn;
-
- log(`Uploading ${ansi.green.bold(version)} to ${ansi.cyan(domain)}...`);
-
- // Replace versioned URLs in source
- const files = ['plyr.js', 'plyr.polyfilled.js', 'config/defaults.js'];
-
- return gulp
- .src(
- files.map(file => path.join(__dirname, `src/js/${file}`)),
- { base: '.' },
- )
- .pipe(replace(semver, `v${version}`))
- .pipe(replace(cdnpath, `${domain}/${version}/`))
- .pipe(gulp.dest('./'));
+ if (!canDeploy()) {
+ done();
+ return null;
+ }
+
+ const { domain } = deploy.cdn;
+
+ log(`Uploading ${ansi.green.bold(version)} to ${ansi.cyan(domain)}...`);
+
+ // Replace versioned URLs in source
+ const files = ['plyr.js', 'plyr.polyfilled.js', 'config/defaults.js'];
+
+ return gulp
+ .src(
+ files.map(file => path.join(__dirname, `src/js/${file}`)),
+ { base: '.' },
+ )
+ .pipe(replace(semver, `v${version}`))
+ .pipe(replace(cdnpath, `${domain}/${version}/`))
+ .pipe(gulp.dest('./'));
});
// Publish version to CDN bucket
gulp.task('cdn', done => {
- if (!canDeploy()) {
- done();
- return null;
- }
-
- const { domain, publisher } = deploy.cdn;
-
- if (!publisher) {
- throw new Error('No publisher instance. Check AWS configuration.');
- }
-
- log(`Uploading ${ansi.green.bold(pkg.version)} to ${ansi.cyan(domain)}...`);
-
- // Upload to CDN
- return (
- gulp
- .src(paths.upload)
- .pipe(renameFile)
- // Remove min suffix from source map URL
- .pipe(
- replace(
- /sourceMappingURL=([\w-?.]+)/,
- (match, filename) => `sourceMappingURL=${filename.replace(minSuffix, '')}`,
- ),
- )
- .pipe(size(sizeOptions))
- .pipe(replace(localPath, versionPath))
- .pipe(publisher.publish(options.cdn.headers))
- .pipe(publish.reporter())
- );
+ if (!canDeploy()) {
+ done();
+ return null;
+ }
+
+ const { domain, publisher } = deploy.cdn;
+
+ if (!publisher) {
+ throw new Error('No publisher instance. Check AWS configuration.');
+ }
+
+ log(`Uploading ${ansi.green.bold(pkg.version)} to ${ansi.cyan(domain)}...`);
+
+ // Upload to CDN
+ return (
+ gulp
+ .src(paths.upload)
+ .pipe(renameFile)
+ // Remove min suffix from source map URL
+ .pipe(
+ replace(
+ /sourceMappingURL=([\w-?.]+)/,
+ (match, filename) => `sourceMappingURL=${filename.replace(minSuffix, '')}`,
+ ),
+ )
+ .pipe(size(sizeOptions))
+ .pipe(replace(localPath, versionPath))
+ .pipe(publisher.publish(options.cdn.headers))
+ .pipe(publish.reporter())
+ );
});
// Purge the fastly cache incase any 403/404 are cached
gulp.task('purge', () => {
- if (!Object.keys(credentials).includes('fastly')) {
- throw new Error('Fastly credentials required to purge cache.');
- }
-
- const { fastly } = credentials;
- const list = [];
-
- return gulp
- .src(paths.upload)
- .pipe(
- through.obj((file, enc, cb) => {
- const filename = file.path.split('/').pop();
- list.push(`${versionPath}/${filename.replace(minSuffix, '')}`);
- cb(null);
- }),
- )
- .on('end', () => {
- const purge = new FastlyPurge(fastly.token);
-
- list.forEach(url => {
- log(`Purging ${ansi.cyan(url)}...`);
-
- purge.url(url, (error, result) => {
- if (error) {
- log.error(error);
- } else if (result) {
- log(result);
- }
- });
- });
+ if (!Object.keys(credentials).includes('fastly')) {
+ throw new Error('Fastly credentials required to purge cache.');
+ }
+
+ const { fastly } = credentials;
+ const list = [];
+
+ return gulp
+ .src(paths.upload)
+ .pipe(
+ through.obj((file, enc, cb) => {
+ const filename = file.path.split('/').pop();
+ list.push(`${versionPath}/${filename.replace(minSuffix, '')}`);
+ cb(null);
+ }),
+ )
+ .on('end', () => {
+ const purge = new FastlyPurge(fastly.token);
+
+ list.forEach(url => {
+ log(`Purging ${ansi.cyan(url)}...`);
+
+ purge.url(url, (error, result) => {
+ if (error) {
+ log.error(error);
+ } else if (result) {
+ log(result);
+ }
});
+ });
+ });
});
// Publish to demo bucket
gulp.task('demo', done => {
- if (!canDeploy()) {
- done();
- return null;
- }
-
- const { publisher } = deploy.demo;
- const { domain } = deploy.cdn;
-
- if (!publisher) {
- throw new Error('No publisher instance. Check AWS configuration.');
- }
-
- log(`Uploading ${ansi.green.bold(pkg.version)} to ${ansi.cyan(domain)}...`);
-
- // Replace versioned files in readme.md
- gulp.src([`${__dirname}/readme.md`])
- .pipe(replace(cdnpath, `${domain}/${version}/`))
- .pipe(gulp.dest(__dirname));
-
- // Replace local file paths with remote paths in demo HTML
- // e.g. "../dist/plyr.js" to "https://cdn.plyr.io/x.x.x/plyr.js"
- const index = `${paths.demo.root}index.html`;
- const error = `${paths.demo.root}error.html`;
- const pages = [index];
-
- if (branch.current === branch.master) {
- pages.push(error);
- }
-
- return gulp
- .src(pages)
- .pipe(replace(localPath, versionPath))
- .pipe(
- rename(p => {
- if (options.demo.uploadPath) {
- // eslint-disable-next-line no-param-reassign
- p.dirname += options.demo.uploadPath;
- }
- }),
- )
- .pipe(publisher.publish(options.demo.headers))
- .pipe(publish.reporter());
+ if (!canDeploy()) {
+ done();
+ return null;
+ }
+
+ const { publisher } = deploy.demo;
+ const { domain } = deploy.cdn;
+
+ if (!publisher) {
+ throw new Error('No publisher instance. Check AWS configuration.');
+ }
+
+ log(`Uploading ${ansi.green.bold(pkg.version)} to ${ansi.cyan(domain)}...`);
+
+ // Replace versioned files in README.md
+ gulp
+ .src([`${__dirname}/README.md`])
+ .pipe(replace(cdnpath, `${domain}/${version}/`))
+ .pipe(gulp.dest(__dirname));
+
+ // Replace local file paths with remote paths in demo HTML
+ // e.g. "../dist/plyr.js" to "https://cdn.plyr.io/x.x.x/plyr.js"
+ const index = `${paths.demo.root}index.html`;
+ const error = `${paths.demo.root}error.html`;
+ const pages = [index];
+
+ if (branch.current === branch.master) {
+ pages.push(error);
+ }
+
+ return gulp
+ .src(pages)
+ .pipe(replace(localPath, versionPath))
+ .pipe(
+ rename(p => {
+ if (options.demo.uploadPath) {
+ // eslint-disable-next-line no-param-reassign
+ p.dirname += options.demo.uploadPath;
+ }
+ }),
+ )
+ .pipe(publisher.publish(options.demo.headers))
+ .pipe(publish.reporter());
});
// Open the demo site to check it's ok
gulp.task('open', () => {
- const { domain } = deploy.demo;
+ const { domain } = deploy.demo;
- return gulp.src(__filename).pipe(
- open({
- uri: `https://${domain}/${branch.current === branch.beta ? 'beta' : ''}`,
- }),
- );
+ return gulp.src(__filename).pipe(
+ open({
+ uri: `https://${domain}/${branch.current === branch.beta ? 'beta' : ''}`,
+ }),
+ );
});
// Do everything