aboutsummaryrefslogtreecommitdiffstats
path: root/gulpfile.js
diff options
context:
space:
mode:
Diffstat (limited to 'gulpfile.js')
-rw-r--r--gulpfile.js695
1 files changed, 357 insertions, 338 deletions
diff --git a/gulpfile.js b/gulpfile.js
index f360b779..f3bdac1a 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -4,110 +4,117 @@
/* global require, __dirname */
/* eslint no-console: "off" */
-const del = require('del');
const path = require('path');
const gulp = require('gulp');
-const gutil = require('gulp-util');
-const concat = require('gulp-concat');
-const filter = require('gulp-filter');
+
+// JavaScript
+const terser = require('gulp-terser');
+const rollup = require('gulp-better-rollup');
+const babel = require('rollup-plugin-babel');
+const commonjs = require('rollup-plugin-commonjs');
+const resolve = require('rollup-plugin-node-resolve');
+
+// CSS
const sass = require('gulp-sass');
-const cleancss = require('gulp-clean-css');
+const clean = require('gulp-clean-css');
+const prefix = require('gulp-autoprefixer');
const postcss = require('gulp-postcss');
const customprops = require('postcss-custom-properties');
+
+// Images
+const svgstore = require('gulp-svgstore');
+const imagemin = require('gulp-imagemin');
+
+// Utils
+const del = require('del');
+const filter = require('gulp-filter');
const header = require('gulp-header');
-const prefix = require('gulp-autoprefixer');
const gitbranch = require('git-branch');
-const svgstore = require('gulp-svgstore');
-const svgmin = require('gulp-svgmin');
const rename = require('gulp-rename');
-const s3 = require('gulp-s3');
const replace = require('gulp-replace');
+const ansi = require('ansi-colors');
+const log = require('fancy-log');
const open = require('gulp-open');
+const plumber = require('gulp-plumber');
const size = require('gulp-size');
-const rollup = require('gulp-better-rollup');
-const babel = require('rollup-plugin-babel');
const sourcemaps = require('gulp-sourcemaps');
-const uglify = require('gulp-uglify-es').default;
-const commonjs = require('rollup-plugin-commonjs');
-const resolve = require('rollup-plugin-node-resolve');
-const FastlyPurge = require('fastly-purge');
const through = require('through2');
-const bundles = require('./bundles.json');
+// Deployment
+const aws = require('aws-sdk');
+const publish = require('gulp-awspublish');
+const FastlyPurge = require('fastly-purge');
+
const pkg = require('./package.json');
+const build = require('./build.json');
+const deploy = require('./deploy.json');
+
+const { browserslist: browsers, version } = pkg;
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' }),
+ }),
+ });
+});
+
// Paths
-const root = __dirname;
const paths = {
plyr: {
// Source paths
src: {
- sass: path.join(root, 'src/sass/**/*.scss'),
- js: path.join(root, 'src/js/**/*.js'),
- sprite: path.join(root, 'src/sprite/*.svg'),
+ sass: path.join(__dirname, 'src/sass/**/*.scss'),
+ js: path.join(__dirname, 'src/js/**/*.js'),
+ sprite: path.join(__dirname, 'src/sprite/*.svg'),
},
// Output paths
- output: path.join(root, 'dist/'),
+ output: path.join(__dirname, 'dist/'),
},
demo: {
// Source paths
src: {
- sass: path.join(root, 'demo/src/sass/**/*.scss'),
- js: path.join(root, 'demo/src/js/**/*.js'),
+ sass: path.join(__dirname, 'demo/src/sass/**/*.scss'),
+ js: path.join(__dirname, 'demo/src/js/**/*.js'),
},
// Output paths
- output: path.join(root, 'demo/dist/'),
+ output: path.join(__dirname, 'demo/dist/'),
// Demo
- root: path.join(root, 'demo/'),
+ root: path.join(__dirname, 'demo/'),
},
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(__dirname, `dist/*${minSuffix}.*`),
+ path.join(__dirname, 'dist/*.css'),
+ path.join(__dirname, 'dist/*.svg'),
+ path.join(__dirname, `demo/dist/*${minSuffix}.*`),
+ path.join(__dirname, 'demo/dist/*.css'),
+ path.join(__dirname, 'demo/dist/*.svg'),
],
};
// Task arrays
const tasks = {
- sass: [],
+ css: [],
js: [],
sprite: [],
- clean: ['clean'],
+ clean: 'clean',
};
// Size plugin
const sizeOptions = { showFiles: true, gzip: true };
-// Browserlist
-const browsers = ['> 1%'];
-
-// Babel config
-const babelrc = (polyfill = false) => ({
- presets: [
- [
- '@babel/preset-env',
- {
- targets: {
- browsers,
- },
- useBuiltIns: polyfill ? 'usage' : false,
- modules: false,
- },
- ],
- ],
- babelrc: false,
- exclude: 'node_modules/**',
-});
-
// Clean out /dist
-gulp.task('clean', done => {
+gulp.task(tasks.clean, done => {
const dirs = [paths.plyr.output, paths.demo.output].map(dir => path.join(dir, '**/*'));
// Don't delete the mp4
@@ -118,109 +125,119 @@ gulp.task('clean', done => {
done();
});
-const build = {
- js(files, bundle, options) {
- Object.keys(files).forEach(key => {
- const name = `js:${key}`;
- tasks.js.push(name);
- const { output } = paths[bundle];
- const polyfill = name.includes('polyfilled');
-
- return gulp.task(name, () =>
- gulp
- .src(bundles[bundle].js[key])
- .pipe(sourcemaps.init())
- .pipe(concat(key))
- .pipe(
- rollup(
- {
- plugins: [resolve(), commonjs(), babel(babelrc(polyfill))],
- },
- options,
- ),
- )
- .pipe(header('typeof navigator === "object" && ')) // "Support" SSR (#935)
- .pipe(sourcemaps.write(''))
- .pipe(gulp.dest(output))
- .pipe(filter('**/*.js'))
- .pipe(uglify())
- .pipe(size(sizeOptions))
- .pipe(rename({ suffix: minSuffix }))
- .pipe(sourcemaps.write(''))
- .pipe(gulp.dest(output)),
- );
- });
- },
- sass(files, bundle) {
- Object.keys(files).forEach(key => {
- const name = `sass:${key}`;
- tasks.sass.push(name);
-
- return gulp.task(name, () =>
- gulp
- .src(bundles[bundle].sass[key])
- .pipe(sass())
- .on('error', gutil.log)
- .pipe(concat(key))
- .pipe(prefix(browsers, { cascade: false }))
- .pipe(postcss([customprops()]))
- .pipe(cleancss())
- .pipe(size(sizeOptions))
- .pipe(gulp.dest(paths[bundle].output)),
- );
- });
- },
- sprite(bundle) {
- const name = `svg:sprite:${bundle}`;
- tasks.sprite.push(name);
+// JavaScript
+Object.entries(build.js).forEach(([filename, entry]) => {
+ entry.formats.forEach(format => {
+ const name = `js:${filename}:${format}`;
+ tasks.js.push(name);
+ const polyfill = filename.includes('polyfilled');
+ const extension = format === 'es' ? 'mjs' : 'js';
- // Process Icons
- return gulp.task(name, () =>
+ gulp.task(name, () =>
gulp
- .src(paths[bundle].src.sprite)
+ .src(entry.src)
+ .pipe(plumber())
+ .pipe(sourcemaps.init())
.pipe(
- svgmin({
- plugins: [
- {
- removeDesc: true,
- },
- ],
+ rollup(
+ {
+ plugins: [
+ resolve(),
+ commonjs(),
+ babel({
+ presets: [
+ [
+ '@babel/env',
+ {
+ // debug: true,
+ useBuiltIns: polyfill ? 'usage' : false,
+ },
+ ],
+ ],
+ babelrc: false,
+ exclude: [/\/core-js\//],
+ }),
+ ],
+ },
+ {
+ name: entry.namespace,
+ format,
+ },
+ ),
+ )
+ .pipe(header('typeof navigator === "object" && ')) // "Support" SSR (#935)
+ .pipe(
+ rename({
+ extname: `.${extension}`,
}),
)
- .pipe(svgstore())
- .pipe(rename({ basename: bundle }))
+ .pipe(gulp.dest(entry.dist))
+ .pipe(filter(`**/*.${extension}`))
+ .pipe(terser())
+ .pipe(rename({ suffix: minSuffix }))
.pipe(size(sizeOptions))
- .pipe(gulp.dest(paths[bundle].output)),
+ .pipe(sourcemaps.write(''))
+ .pipe(gulp.dest(entry.dist)),
);
- },
-};
+ });
+});
-// Plyr core files
-build.js(bundles.plyr.js, 'plyr', { name: 'Plyr', format: 'umd' });
-build.sass(bundles.plyr.sass, 'plyr');
-build.sprite('plyr');
+// CSS
+Object.entries(build.css).forEach(([filename, entry]) => {
+ const name = `css:${filename}`;
+ tasks.css.push(name);
-// Demo files
-build.sass(bundles.demo.sass, 'demo');
-build.js(bundles.demo.js, 'demo', { format: 'iife' });
+ gulp.task(name, () =>
+ gulp
+ .src(entry.src)
+ .pipe(plumber())
+ .pipe(sass())
+ .pipe(
+ prefix(browsers, {
+ cascade: false,
+ }),
+ )
+ .pipe(postcss([customprops()]))
+ .pipe(clean())
+ .pipe(size(sizeOptions))
+ .pipe(gulp.dest(entry.dist)),
+ );
+});
+
+// SVG Sprites
+Object.entries(build.sprite).forEach(([filename, entry]) => {
+ const name = `sprite:${filename}`;
+ tasks.sprite.push(name);
+
+ gulp.task(name, () =>
+ gulp
+ .src(entry.src)
+ .pipe(plumber())
+ .pipe(imagemin())
+ .pipe(svgstore())
+ .pipe(rename({ basename: path.parse(filename).name }))
+ .pipe(size(sizeOptions))
+ .pipe(gulp.dest(entry.dist)),
+ );
+});
// Build all JS
-gulp.task('js', () => gulp.parallel(tasks.js));
+gulp.task('js', () => gulp.parallel(...tasks.js));
// Watch for file changes
gulp.task('watch', () => {
// Plyr core
- gulp.watch(paths.plyr.src.js, gulp.parallel(tasks.js));
- gulp.watch(paths.plyr.src.sass, gulp.parallel(tasks.sass));
- gulp.watch(paths.plyr.src.sprite, gulp.parallel(tasks.sprite));
+ gulp.watch(paths.plyr.src.js, gulp.parallel(...tasks.js));
+ gulp.watch(paths.plyr.src.sass, gulp.parallel(...tasks.css));
+ gulp.watch(paths.plyr.src.sprite, gulp.parallel(...tasks.sprite));
// Demo
- gulp.watch(paths.demo.src.js, gulp.parallel(tasks.js));
- gulp.watch(paths.demo.src.sass, gulp.parallel(tasks.sass));
+ gulp.watch(paths.demo.src.js, gulp.parallel(...tasks.js));
+ gulp.watch(paths.demo.src.sass, gulp.parallel(...tasks.css));
});
// Build distribution
-gulp.task('build', gulp.series(tasks.clean, gulp.parallel(tasks.js, tasks.sass, tasks.sprite)));
+gulp.task('build', gulp.series(tasks.clean, gulp.parallel(...tasks.js, ...tasks.css, ...tasks.sprite)));
// Default gulp task
gulp.task('default', gulp.series('build', 'watch'));
@@ -235,231 +252,233 @@ try {
// Do nothing
}
-// If deployment is setup
-if (Object.keys(credentials).includes('aws') && Object.keys(credentials).includes('fastly')) {
- const { version } = pkg;
- const { aws, fastly } = credentials;
-
- // Get branch info
- const branch = {
- current: gitbranch.sync(),
- master: 'master',
- develop: 'develop',
- };
-
- const maxAge = 31536000; // 1 year
- const options = {
- cdn: {
- headers: {
- 'Cache-Control': `max-age=${maxAge}`,
- Vary: 'Accept-Encoding',
- },
+// Get branch info
+const branch = {
+ current: gitbranch.sync(),
+ master: 'master',
+ beta: 'beta',
+};
+
+const maxAge = 31536000; // 1 year
+const options = {
+ cdn: {
+ headers: {
+ 'Cache-Control': `max-age=${maxAge}`,
},
- demo: {
- uploadPath: branch.current === branch.develop ? 'beta/' : null,
+ },
+ 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',
- Vary: 'Accept-Encoding',
},
- },
- 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',
- },
- };
- },
- };
-
- 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\\-]+)*)?';
- const semver = new RegExp(`v${regex}`, 'gi');
- const localPath = new RegExp('(../)?dist', 'gi');
- const versionPath = `https://${aws.cdn.domain}/${version}`;
- const cdnpath = new RegExp(`${aws.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
- });
-
- // Check we're on the correct branch to deploy
- const canDeploy = () => {
- const allowed = [branch.master, branch.develop];
-
- if (!allowed.includes(branch.current)) {
- console.error(`Must be on ${allowed.join(', ')} to publish! (current: ${branch.current})`);
-
- return false;
- }
+ };
+ },
+};
- return 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\\-]+)*)?';
+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');
- gulp.task('version', () => {
- if (!canDeploy()) {
- return null;
- }
+const renameFile = rename(p => {
+ p.basename = p.basename.replace(minSuffix, ''); // eslint-disable-line
+ p.dirname = p.dirname.replace('.', version); // eslint-disable-line
+});
- console.log(`Updating versions to '${version}'...`);
+// Check we're on the correct branch to deploy
+const canDeploy = () => {
+ const allowed = [branch.master, branch.beta];
- // Replace versioned URLs in source
- const files = ['plyr.js', 'plyr.polyfilled.js', 'config/defaults.js'];
+ if (!allowed.includes(branch.current)) {
+ console.error(`Must be on ${allowed.join(', ')} to publish! (current: ${branch.current})`);
- return gulp
- .src(files.map(file => path.join(root, `src/js/${file}`)), { base: '.' })
- .pipe(replace(semver, `v${version}`))
- .pipe(replace(cdnpath, `${aws.cdn.domain}/${version}/`))
- .pipe(gulp.dest('./'));
- });
+ return false;
+ }
- // Publish version to CDN bucket
- gulp.task('cdn', () => {
- if (!canDeploy()) {
- return null;
- }
+ return true;
+};
- console.log(`Uploading '${version}' to ${aws.cdn.domain}...`);
+gulp.task('version', done => {
+ if (!canDeploy()) {
+ done();
+ return null;
+ }
- // Upload to CDN
- return (
- gulp
- .src(paths.upload)
- .pipe(renameFile)
- // Remove min suffix from source map URL
- .pipe(
- replace(
- /sourceMappingURL=([\w-?.]+)/,
- (match, p1) => `sourceMappingURL=${p1.replace(minSuffix, '')}`,
- ),
- )
- .pipe(
- size({
- showFiles: true,
- gzip: true,
- }),
- )
- .pipe(replace(localPath, versionPath))
- .pipe(s3(aws.cdn, options.cdn))
- );
- });
+ const { domain } = deploy.cdn;
- // Purge the fastly cache incase any 403/404 are cached
- gulp.task('purge', () => {
- const list = [];
+ log(`Uploading ${ansi.green.bold(version)} to ${ansi.cyan(domain)}...`);
- return gulp
- .src(paths.upload)
- .pipe(
- through.obj((file, enc, cb) => {
- const filename = file.path.split('/').pop();
- list.push(`${versionPath}/${filename}`);
- cb(null);
- }),
- )
- .on('end', () => {
- const purge = new FastlyPurge(fastly.token);
-
- list.forEach(url => {
- console.log(`Purging ${url}...`);
-
- purge.url(url, (error, result) => {
- if (error) {
- console.log(error);
- } else if (result) {
- console.log(result);
- }
- });
- });
- });
- });
+ // Replace versioned URLs in source
+ const files = ['plyr.js', 'plyr.polyfilled.js', 'config/defaults.js'];
- // Publish to demo bucket
- gulp.task('demo', () => {
- if (!canDeploy()) {
- return null;
- }
+ 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('./'));
+});
- console.log(`Uploading '${version}' demo to ${aws.demo.domain}...`);
+// Publish version to CDN bucket
+gulp.task('cdn', done => {
+ if (!canDeploy()) {
+ done();
+ return null;
+ }
- // Replace versioned files in readme.md
- gulp.src([`${root}/readme.md`])
- .pipe(replace(cdnpath, `${aws.cdn.domain}/${version}/`))
- .pipe(gulp.dest(root));
+ const { domain, publisher } = deploy.cdn;
- // 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 (!publisher) {
+ throw new Error('No publisher instance. Check AWS configuration.');
+ }
- if (branch.current === branch.master) {
- pages.push(error);
- }
+ log(`Uploading ${ansi.green.bold(pkg.version)} to ${ansi.cyan(domain)}...`);
- gulp.src(pages)
+ // 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(s3(aws.demo, options.demo));
+ .pipe(publisher.publish(options.cdn.headers))
+ .pipe(publish.reporter())
+ );
+});
- // Only update CDN for master (prod)
- if (branch.current !== branch.master) {
- return null;
- }
+// 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);
+ }
+ });
+ });
+ });
+});
- // Upload error.html to cdn (as well as demo site)
- return gulp
- .src([error])
- .pipe(replace(localPath, versionPath))
- .pipe(s3(aws.cdn, options.demo));
- });
+// 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(publisher.publish(options.demo.headers))
+ .pipe(publish.reporter());
+});
- // Update symlinks for latest
- /* gulp.task("symlinks", function () {
- console.log("Updating symlinks...");
-
- return gulp.src(paths.upload)
- .pipe(through.obj(function (chunk, enc, callback) {
- if (chunk.stat.isFile()) {
- // Get the filename
- var filename = chunk.path.split("/").reverse()[0];
-
- // Create the 0 byte redirect files to upload
- createFile(filename, "")
- .pipe(rename(function (path) {
- path.dirname = path.dirname.replace(".", "latest");
- }))
- // Upload to S3 with correct headers
- .pipe(s3(aws.cdn, options.symlinks(version, filename)));
- }
-
- callback(null, chunk);
- }));
- }); */
-
- // Open the demo site to check it's ok
- gulp.task('open', callback => {
- gulp.src(__filename).pipe(
- open({
- uri: `https://${aws.demo.domain}`,
- }),
- );
+gulp.task('error', done => {
+ // Only update CDN for master (prod)
+ if (!canDeploy() || branch.current !== branch.master) {
+ done();
+ return null;
+ }
+
+ const { publisher } = deploy.cdn;
+
+ if (!publisher) {
+ throw new Error('No publisher instance. Check AWS configuration.');
+ }
+
+ // 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"
+ // Upload error.html to cdn
+ return gulp
+ .src(`${paths.demo.root}error.html`)
+ .pipe(replace(localPath, versionPath))
+ .pipe(publisher.publish(options.demo.headers))
+ .pipe(publish.reporter());
+});
- callback();
- });
+// Open the demo site to check it's ok
+gulp.task('open', () => {
+ const { domain } = deploy.demo;
- // Do everything
- gulp.task(
- 'deploy',
- gulp.series(
- 'version',
- tasks.clean,
- gulp.parallel(tasks.js, tasks.sass, tasks.sprite),
- 'cdn',
- 'demo',
- 'purge',
- 'open',
- ),
+ return gulp.src(__filename).pipe(
+ open({
+ uri: `https://${domain}/${branch.current === branch.beta ? 'beta' : ''}`,
+ }),
);
-}
+});
+
+// Do everything
+gulp.task(
+ 'deploy',
+ gulp.series(
+ 'version',
+ tasks.clean,
+ gulp.parallel(...tasks.js, ...tasks.css, ...tasks.sprite),
+ 'cdn',
+ 'demo',
+ 'purge',
+ 'open',
+ ),
+);