mattermost-desktop/gulpfile.js

242 lines
6.3 KiB
JavaScript
Raw Normal View History

2015-10-23 07:56:53 -07:00
'use strict';
var gulp = require('gulp');
var prettify = require('gulp-jsbeautifier');
var babel = require('gulp-babel');
2016-01-30 07:50:43 -08:00
var webpack = require('webpack-stream');
var named = require('vinyl-named');
var changed = require('gulp-changed');
2015-12-19 07:39:51 -08:00
var esformatter = require('gulp-esformatter');
2016-02-15 06:58:46 -08:00
var esformatter_origin = require('esformatter');
var through = require('through2');
var del = require('del');
var electron = require('electron-connect').server.create({
2016-01-30 07:50:43 -08:00
path: './dist'
});
2015-10-24 01:44:47 -07:00
var packager = require('electron-packager');
2015-10-23 07:56:53 -07:00
2016-02-14 06:00:19 -08:00
var sources = ['**/*.js', '**/*.css', '**/*.html', '!**/node_modules/**', '!dist/**', '!release/**'];
2015-10-23 07:56:53 -07:00
2015-12-19 07:39:51 -08:00
gulp.task('prettify', ['prettify:sources', 'prettify:jsx']);
2016-02-15 06:58:46 -08:00
gulp.task('prettify:verify', ['prettify:sources:verify', 'prettify:jsx:verify'])
var prettify_options = {
html: {
2016-02-25 07:06:41 -08:00
eol: '\n',
2016-02-15 06:58:46 -08:00
indentSize: 2
},
css: {
2016-02-25 07:06:41 -08:00
eol: '\n',
2016-02-15 06:58:46 -08:00
indentSize: 2
},
js: {
2016-02-25 07:06:41 -08:00
eol: '\n',
2016-02-15 06:58:46 -08:00
indentSize: 2,
braceStyle: "end-expand"
}
};
2015-12-19 07:39:51 -08:00
gulp.task('prettify:sources', ['sync-meta'], function() {
2016-02-15 06:58:46 -08:00
prettify_options.mode = "VERIFY_AND_WRITE";
2015-12-19 02:43:57 -08:00
return gulp.src(sources)
2016-02-15 06:58:46 -08:00
.pipe(prettify(prettify_options))
2015-10-23 07:56:53 -07:00
.pipe(gulp.dest('.'));
});
2015-10-24 01:44:47 -07:00
2016-02-15 06:58:46 -08:00
gulp.task('prettify:sources:verify', function() {
prettify_options.mode = "VERIFY_ONLY";
prettify_options.showDiff = false;
return gulp.src(sources)
.pipe(prettify(prettify_options));
});
var esformatter_jsx_options = {
indent: {
value: ' '
},
plugins: ['esformatter-jsx']
};
2015-12-19 07:39:51 -08:00
gulp.task('prettify:jsx', function() {
2016-01-30 07:50:43 -08:00
return gulp.src('src/browser/**/*.jsx')
2016-02-15 06:58:46 -08:00
.pipe(esformatter(esformatter_jsx_options))
2016-02-11 08:12:28 -08:00
.pipe(gulp.dest('src/browser'));
2015-12-23 05:04:21 -08:00
});
2015-12-19 07:39:51 -08:00
2016-02-15 06:58:46 -08:00
gulp.task('prettify:jsx:verify', function() {
return gulp.src('src/browser/**/*.jsx')
.pipe(through.obj(function(file, enc, cb) {
var result = esformatter_origin.diff.unified(file.contents.toString(), esformatter_origin.rc(file.path, esformatter_jsx_options));
if (result !== "") {
console.log('Error: ' + file.path + ' must be formatted');
process.exit(1);
}
cb();
}));
});
2016-01-30 07:50:43 -08:00
gulp.task('build', ['sync-meta', 'webpack', 'copy'], function() {
return gulp.src('src/package.json')
.pipe(gulp.dest('dist'));
});
gulp.task('webpack', ['webpack:main', 'webpack:browser', 'webpack:webview']);
2016-01-30 07:50:43 -08:00
gulp.task('webpack:browser', function() {
return gulp.src('src/browser/**/*.jsx')
.pipe(named())
.pipe(webpack({
module: {
loaders: [{
test: /\.json$/,
loader: 'json'
}, {
test: /\.jsx$/,
loader: 'babel',
query: {
presets: ['react']
}
}]
},
output: {
filename: '[name].js'
},
node: {
__filename: false,
__dirname: false
},
target: 'electron'
}))
2016-01-30 07:50:43 -08:00
.pipe(gulp.dest('dist/browser/'));
});
gulp.task('webpack:main', function() {
return gulp.src('src/main.js')
.pipe(webpack({
module: {
loaders: [{
test: /\.json$/,
loader: 'json'
}]
},
output: {
filename: '[name].js'
},
node: {
__filename: false,
__dirname: false
},
target: 'electron'
}))
2016-01-30 07:50:43 -08:00
.pipe(gulp.dest('dist/'));
});
gulp.task('webpack:webview', function() {
return gulp.src('src/browser/webview/mattermost.js')
.pipe(named())
.pipe(webpack({
output: {
filename: '[name].js'
},
target: 'electron'
}))
.pipe(gulp.dest('dist/browser/webview'))
});
gulp.task('copy', ['copy:resources', 'copy:html/css', 'copy:modules']);
2016-01-30 07:50:43 -08:00
gulp.task('copy:resources', function() {
return gulp.src('src/resources/**')
.pipe(gulp.dest('dist/resources'));
});
gulp.task('copy:html/css', function() {
return gulp.src(['src/browser/**/*.html', 'src/browser/**/*.css'])
.pipe(gulp.dest('dist/browser'));
});
gulp.task('copy:modules', function() {
return gulp.src(['src/node_modules/bootstrap/dist/**'])
.pipe(gulp.dest('dist/browser/modules/bootstrap'))
});
2016-02-09 03:59:52 -08:00
gulp.task('watch', ['build'], function() {
var options = ['--livereload'];
electron.start(options);
2016-02-09 03:59:52 -08:00
gulp.watch(['src/main.js', 'src/main/**/*.js', 'src/common/**/*.js'], ['webpack:main']);
gulp.watch(['src/browser/**/*.js', 'src/browser/**/*.jsx'], ['webpack:browser', 'webpack:webview']);
2016-02-09 03:59:52 -08:00
gulp.watch(['src/browser/**/*.css', 'src/browser/**/*.html', 'src/resources/**/*.png'], ['copy']);
gulp.watch(['dist/main.js', 'dist/resources/**'], function() {
electron.restart(options);
});
2016-02-09 03:59:52 -08:00
gulp.watch(['dist/browser/*.js'], electron.reload);
});
2015-12-19 02:43:57 -08:00
function makePackage(platform, arch, callback) {
var packageJson = require('./src/package.json');
2015-10-24 01:44:47 -07:00
packager({
2016-02-11 08:12:28 -08:00
dir: './dist',
platform: platform,
arch: arch,
2015-12-24 07:24:10 -08:00
version: require('./package.json').devDependencies['electron-prebuilt'],
2015-10-24 01:44:47 -07:00
out: './release',
prune: true,
2015-10-24 04:12:22 -07:00
overwrite: true,
"app-version": packageJson.version,
2016-03-20 08:31:29 -07:00
icon: 'resources/appicon',
"version-string": {
CompanyName: packageJson.author,
LegalCopyright: 'Copyright (c) 2015 ' + packageJson.author,
FileDescription: packageJson.description,
OriginalFilename: packageJson.productName + '.exe',
ProductVersion: packageJson.version,
ProductName: packageJson.productName,
InternalName: packageJson.name
}
2015-10-24 01:44:47 -07:00
}, function(err, appPath) {
if (err) {
2015-12-19 02:43:57 -08:00
callback(err);
2015-10-24 01:44:47 -07:00
}
else {
2015-12-19 02:43:57 -08:00
callback();
2015-10-24 01:44:47 -07:00
}
});
};
2015-12-24 06:33:39 -08:00
gulp.task('package', ['build'], function(cb) {
2015-12-19 02:43:57 -08:00
makePackage(process.platform, 'all', cb);
});
2015-12-24 06:33:39 -08:00
gulp.task('package:all', ['build'], function(cb) {
2015-12-19 02:43:57 -08:00
makePackage('all', 'all', cb);
});
2015-12-24 06:33:39 -08:00
gulp.task('package:windows', ['build'], function(cb) {
2015-12-19 02:43:57 -08:00
makePackage('win32', 'all', cb);
});
2015-12-24 06:33:39 -08:00
gulp.task('package:osx', ['build'], function(cb) {
2015-12-19 02:43:57 -08:00
makePackage('darwin', 'all', cb);
});
2015-12-24 06:33:39 -08:00
gulp.task('package:linux', ['build'], function(cb) {
2015-12-19 02:43:57 -08:00
makePackage('linux', 'all', cb);
2015-10-24 01:44:47 -07:00
});
gulp.task('sync-meta', function() {
var appPackageJson = require('./src/package.json');
var packageJson = require('./package.json');
appPackageJson.name = packageJson.name;
appPackageJson.productName = packageJson.productName;
appPackageJson.version = packageJson.version;
appPackageJson.description = packageJson.description;
appPackageJson.author = packageJson.author;
appPackageJson.license = packageJson.license;
var fs = require('fs');
fs.writeFileSync('./src/package.json', JSON.stringify(appPackageJson, null, ' ') + '\n');
});