RainLoop /
rainloop-webmail
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | /* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */ |
||
| 2 | 'use strict'; |
||
| 3 | |||
| 4 | var |
||
| 5 | pkg = require('./package.json'),
|
||
| 6 | head = {
|
||
| 7 | rainloop: '/* RainLoop Webmail (c) RainLoop Team | Licensed under RainLoop Software License */', |
||
| 8 | agpl: '/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL v3 */' |
||
| 9 | }, |
||
| 10 | cfg = {
|
||
| 11 | devVersion: '0.0.0', |
||
| 12 | releasesPath: 'build/dist/releases', |
||
| 13 | community: true, |
||
| 14 | watch: false, |
||
| 15 | watchInterval: 1000, |
||
| 16 | googleCompile: false, |
||
| 17 | |||
| 18 | rainloopBuilded: false, |
||
| 19 | destPath: '', |
||
| 20 | cleanPath: '', |
||
| 21 | zipSrcPath: '', |
||
| 22 | zipFile: '', |
||
| 23 | zipFileShort: '', |
||
| 24 | |||
| 25 | paths: {}
|
||
| 26 | }, |
||
| 27 | |||
| 28 | _ = require('lodash'),
|
||
| 29 | fs = require('node-fs'),
|
||
| 30 | path = require('path'),
|
||
| 31 | notifier = require('node-notifier'),
|
||
| 32 | runSequence = require('run-sequence'),
|
||
| 33 | |||
| 34 | webpack = require('webpack'),
|
||
| 35 | webpackCfgBuilder = require('./webpack.config.builder.js'),
|
||
| 36 | |||
| 37 | argv = require('yargs').argv,
|
||
| 38 | |||
| 39 | gulp = require('gulp'),
|
||
| 40 | concat = require('gulp-concat-util'),
|
||
| 41 | header = require('gulp-header'),
|
||
| 42 | stripbom = require('gulp-stripbom'),
|
||
| 43 | rename = require('gulp-rename'),
|
||
| 44 | replace = require('gulp-replace'),
|
||
| 45 | uglify = require('gulp-uglify'),
|
||
| 46 | notify = require("gulp-notify"),
|
||
| 47 | plumber = require('gulp-plumber'),
|
||
| 48 | gulpif = require('gulp-if'),
|
||
| 49 | eol = require('gulp-eol'),
|
||
| 50 | livereload = require('gulp-livereload'),
|
||
| 51 | eslint = require('gulp-eslint'),
|
||
| 52 | cache = require('gulp-cached'),
|
||
| 53 | filter = require('gulp-filter'),
|
||
| 54 | expect = require('gulp-expect-file'),
|
||
| 55 | chmod = require('gulp-chmod'),
|
||
| 56 | size = require('gulp-size'),
|
||
| 57 | gutil = require('gulp-util');
|
||
| 58 | |||
| 59 | cfg.community = !argv.pro; |
||
| 60 | |||
| 61 | // webpack |
||
| 62 | function webpackCallback(callback) |
||
| 63 | {
|
||
| 64 | return function(err, stats) {
|
||
| 65 | |||
| 66 | if (err) |
||
| 67 | {
|
||
| 68 | if (cfg.watch) |
||
| 69 | {
|
||
| 70 | webpackError(err); |
||
| 71 | } |
||
| 72 | else |
||
| 73 | {
|
||
| 74 | throw new gutil.PluginError('webpack', err);
|
||
| 75 | } |
||
| 76 | } |
||
| 77 | else if (stats && stats.compilation && stats.compilation.errors && stats.compilation.errors[0]) |
||
| 78 | {
|
||
| 79 | if (cfg.watch) |
||
| 80 | {
|
||
| 81 | _.each(stats.compilation.errors, webpackError); |
||
| 82 | } |
||
| 83 | else |
||
| 84 | {
|
||
| 85 | throw new gutil.PluginError('webpack', stats.compilation.errors[0]);
|
||
| 86 | } |
||
| 87 | } |
||
| 88 | |||
| 89 | callback(); |
||
| 90 | }; |
||
| 91 | } |
||
| 92 | |||
| 93 | function webpackError(err) {
|
||
| 94 | if (err) |
||
| 95 | {
|
||
| 96 | gutil.log('[webpack]', '---');
|
||
| 97 | gutil.log('[webpack]', err.error ? err.error.toString() : '');
|
||
| 98 | gutil.log('[webpack]', err.message || '');
|
||
| 99 | gutil.log('[webpack]', '---');
|
||
| 100 | |||
| 101 | notifier.notify({
|
||
| 102 | 'sound': true, |
||
| 103 | 'title': 'webpack', |
||
| 104 | 'message': err.error ? err.error.toString() : err.message |
||
| 105 | }); |
||
| 106 | } |
||
| 107 | } |
||
| 108 | |||
| 109 | function getHead() |
||
| 110 | {
|
||
| 111 | return !cfg.community ? head.rainloop : head.agpl; |
||
| 112 | } |
||
| 113 | |||
| 114 | function zipDir(sSrcDir, sDestDir, sFileName) |
||
| 115 | {
|
||
| 116 | return gulp.src(sSrcDir + '**/*') |
||
| 117 | .pipe(require('gulp-zip')(sFileName))
|
||
| 118 | .pipe(gulp.dest(sDestDir)); |
||
| 119 | } |
||
| 120 | |||
| 121 | function cleanDir(sDir) |
||
| 122 | {
|
||
| 123 | return gulp.src(sDir, {read: false})
|
||
| 124 | .pipe(require('gulp-rimraf')());
|
||
| 125 | } |
||
| 126 | |||
| 127 | function copyFile(sFile, sNewFile, callback) |
||
| 128 | {
|
||
| 129 | fs.writeFileSync(sNewFile, fs.readFileSync(sFile)); |
||
| 130 | callback(); |
||
| 131 | } |
||
| 132 | |||
| 133 | cfg.paths.globjs = 'dev/**/*.js'; |
||
| 134 | cfg.paths.static = 'rainloop/v/' + cfg.devVersion + '/static/'; |
||
| 135 | cfg.paths.staticJS = 'rainloop/v/' + cfg.devVersion + '/static/js/'; |
||
| 136 | cfg.paths.staticMinJS = 'rainloop/v/' + cfg.devVersion + '/static/js/min/'; |
||
| 137 | cfg.paths.staticCSS = 'rainloop/v/' + cfg.devVersion + '/static/css/'; |
||
| 138 | cfg.paths.momentLocales = 'rainloop/v/' + cfg.devVersion + '/app/localization/moment/'; |
||
| 139 | |||
| 140 | cfg.paths.assets = {
|
||
| 141 | src: 'assets/**/*.*' |
||
| 142 | }; |
||
| 143 | |||
| 144 | cfg.paths.less = {
|
||
| 145 | main: {
|
||
| 146 | src: 'dev/Styles/@Main.less', |
||
| 147 | watch: ['dev/Styles/*.less'], |
||
| 148 | options: {
|
||
| 149 | paths: [ |
||
| 150 | path.join(__dirname, 'dev', 'Styles'), |
||
| 151 | path.join(__dirname, 'vendors', 'bootstrap', 'less') |
||
| 152 | ] |
||
| 153 | } |
||
| 154 | } |
||
| 155 | }; |
||
| 156 | |||
| 157 | cfg.paths.css = {
|
||
| 158 | main: {
|
||
| 159 | name: 'app.css', |
||
| 160 | src: [ |
||
| 161 | 'node_modules/normalize.css/normalize.css', |
||
| 162 | 'vendors/jquery-ui/css/smoothness/jquery-ui-1.10.3.custom.css', |
||
| 163 | 'vendors/fontastic/styles.css', |
||
| 164 | 'vendors/jquery-nanoscroller/nanoscroller.css', |
||
| 165 | 'vendors/jquery-letterfx/jquery-letterfx.min.css', |
||
| 166 | 'vendors/inputosaurus/inputosaurus.css', |
||
| 167 | 'vendors/flags/flags-fixed.css', |
||
| 168 | 'node_modules/opentip/css/opentip.css', |
||
| 169 | 'node_modules/pikaday/css/pikaday.css', |
||
| 170 | 'node_modules/lightgallery/dist/css/lightgallery.min.css', |
||
| 171 | 'node_modules/lightgallery/dist/css/lg-transitions.min.css', |
||
| 172 | 'node_modules/Progress.js/minified/progressjs.min.css', |
||
| 173 | 'dev/Styles/_progressjs.css' |
||
| 174 | ] |
||
| 175 | }, |
||
| 176 | social: {
|
||
| 177 | name: 'social.css', |
||
| 178 | src: [ |
||
| 179 | 'vendors/fontastic/styles.css', |
||
| 180 | 'dev/Styles/_social.css' |
||
| 181 | ] |
||
| 182 | } |
||
| 183 | }; |
||
| 184 | |||
| 185 | cfg.paths.js = {
|
||
| 186 | moment: {
|
||
| 187 | locales: [ |
||
| 188 | 'node_modules/moment/locale/*.js' |
||
| 189 | ] |
||
| 190 | }, |
||
| 191 | libs: {
|
||
| 192 | name: 'libs.js', |
||
| 193 | src: [ |
||
| 194 | 'node_modules/jquery/dist/jquery.min.js', |
||
| 195 | 'node_modules/jquery-mousewheel/jquery.mousewheel.js', |
||
| 196 | 'node_modules/jquery-scrollstop/jquery.scrollstop.js', |
||
| 197 | // 'node_modules/jquery-lazyload/jquery.lazyload.js', |
||
| 198 | 'node_modules/jquery-backstretch/jquery.backstretch.min.js', |
||
| 199 | 'vendors/jquery-ui/js/jquery-ui-1.10.3.custom.min.js', // custom |
||
| 200 | 'vendors/jquery-nanoscroller/jquery.nanoscroller.js', // custom (modified) |
||
| 201 | 'vendors/jquery-wakeup/jquery.wakeup.js', // no-npm |
||
| 202 | 'vendors/jquery-letterfx/jquery-letterfx.min.js', // no-npm |
||
| 203 | 'vendors/inputosaurus/inputosaurus.js', // custom (modified) |
||
| 204 | 'vendors/routes/signals.min.js', // fixed |
||
| 205 | 'vendors/routes/hasher.min.js', // fixed |
||
| 206 | 'vendors/routes/crossroads.min.js', // fixed |
||
| 207 | 'vendors/jua/jua.min.js', // custom |
||
| 208 | 'vendors/keymaster/keymaster.js', // custom (modified) |
||
| 209 | 'vendors/qr.js/qr.min.js', // fixed |
||
| 210 | 'vendors/bootstrap/js/bootstrap.min.js', // fixed |
||
| 211 | 'node_modules/underscore/underscore-min.js', |
||
| 212 | 'node_modules/moment/min/moment.min.js', |
||
| 213 | 'node_modules/knockout/build/output/knockout-latest.js', |
||
| 214 | 'node_modules/knockout-projections/dist/knockout-projections.min.js', |
||
| 215 | 'node_modules/knockout-sortable/build/knockout-sortable.min.js ', |
||
| 216 | 'node_modules/matchmedia-polyfill/matchMedia.js', |
||
| 217 | 'node_modules/matchmedia-polyfill/matchMedia.addListener.js', |
||
| 218 | 'node_modules/simplestatemanager/dist/ssm.min.js', |
||
| 219 | 'node_modules/autolinker/dist/Autolinker.min.js', |
||
| 220 | 'node_modules/opentip/lib/opentip.js', |
||
| 221 | 'node_modules/opentip/lib/adapter-jquery.js', |
||
| 222 | 'node_modules/lightgallery/dist/js/lightgallery.min.js', |
||
| 223 | 'node_modules/lightgallery/dist/js/lg-fullscreen.min.js', |
||
| 224 | 'node_modules/lightgallery/dist/js/lg-thumbnail.min.js', |
||
| 225 | 'node_modules/lightgallery/dist/js/lg-zoom.min.js', |
||
| 226 | 'node_modules/lightgallery/dist/js/lg-autoplay.min.js', |
||
| 227 | 'node_modules/ifvisible.js/src/ifvisible.min.js' |
||
| 228 | ] |
||
| 229 | }, |
||
| 230 | app: {
|
||
| 231 | name: 'app.js' |
||
| 232 | }, |
||
| 233 | admin: {
|
||
| 234 | name: 'admin.js' |
||
| 235 | } |
||
| 236 | }; |
||
| 237 | |||
| 238 | |||
| 239 | // assers |
||
| 240 | |||
| 241 | gulp.task('assets:clean', function() {
|
||
| 242 | return cleanDir(cfg.paths.static); |
||
| 243 | }); |
||
| 244 | |||
| 245 | gulp.task('assets', function() {
|
||
| 246 | return gulp.src(cfg.paths.assets.src) |
||
| 247 | .pipe(gulp.dest(cfg.paths.static)); |
||
| 248 | }); |
||
| 249 | |||
| 250 | // CSS |
||
| 251 | |||
| 252 | gulp.task('css:clean', function() {
|
||
| 253 | return cleanDir(cfg.paths.staticCSS + '/*.css'); |
||
| 254 | }); |
||
| 255 | |||
| 256 | gulp.task('css:main', ['assets'], function() {
|
||
| 257 | var autoprefixer = require('gulp-autoprefixer'),
|
||
| 258 | less = require('gulp-less'),
|
||
| 259 | lessFilter = filter('**/*.less', {restore: true}),
|
||
| 260 | src = cfg.paths.css.main.src.concat([cfg.paths.less.main.src]); |
||
| 261 | |||
| 262 | return gulp.src(src) |
||
| 263 | .pipe(expect.real({errorOnFailure: true}, src))
|
||
| 264 | .pipe(lessFilter) |
||
| 265 | .pipe(gulpif(cfg.watch, plumber({errorHandler: notify.onError("Error: <%= error.message %>")})))
|
||
| 266 | .pipe(less({
|
||
| 267 | 'paths': cfg.paths.less.main.options.paths |
||
| 268 | })) |
||
| 269 | .pipe(lessFilter.restore) |
||
| 270 | .pipe(concat(cfg.paths.css.main.name)) |
||
| 271 | .pipe(autoprefixer('last 3 versions', 'ie >= 9', 'Firefox ESR'))
|
||
| 272 | .pipe(replace(/\.\.\/(img|images|fonts|svg)\//g, '$1/')) |
||
| 273 | .pipe(eol('\n', true))
|
||
| 274 | .pipe(gulp.dest(cfg.paths.staticCSS)) |
||
| 275 | .pipe(livereload()); |
||
| 276 | }); |
||
| 277 | |||
| 278 | gulp.task('css:social', function() {
|
||
| 279 | var autoprefixer = require('gulp-autoprefixer'),
|
||
| 280 | src = cfg.paths.css.social.src; |
||
| 281 | return gulp.src(src) |
||
| 282 | .pipe(expect.real({errorOnFailure: true}, src))
|
||
| 283 | .pipe(concat(cfg.paths.css.social.name)) |
||
| 284 | .pipe(autoprefixer('last 3 versions', 'ie >= 9', 'Firefox ESR'))
|
||
| 285 | .pipe(replace(/\.\.\/(img|images|fonts|svg)\//g, '$1/')) |
||
| 286 | .pipe(eol('\n', true))
|
||
| 287 | .pipe(gulp.dest(cfg.paths.staticCSS)); |
||
| 288 | }); |
||
| 289 | |||
| 290 | gulp.task('css:main:min', ['css:main'], function() {
|
||
| 291 | var cleanCss = require('gulp-clean-css');
|
||
| 292 | return gulp.src(cfg.paths.staticCSS + cfg.paths.css.main.name) |
||
| 293 | .pipe(cleanCss()) |
||
| 294 | .pipe(rename({suffix: '.min'}))
|
||
| 295 | .pipe(eol('\n', true))
|
||
| 296 | .pipe(gulp.dest(cfg.paths.staticCSS)); |
||
| 297 | }); |
||
| 298 | |||
| 299 | gulp.task('css:social:min', ['css:social'], function() {
|
||
| 300 | var cleanCss = require('gulp-clean-css');
|
||
| 301 | return gulp.src(cfg.paths.staticCSS + cfg.paths.css.social.name) |
||
| 302 | .pipe(cleanCss()) |
||
| 303 | .pipe(rename({suffix: '.min'}))
|
||
| 304 | .pipe(eol('\n', true))
|
||
| 305 | .pipe(gulp.dest(cfg.paths.staticCSS)); |
||
| 306 | }); |
||
| 307 | |||
| 308 | gulp.task('css:min', ['css:main:min', 'css:social:min']);
|
||
| 309 | |||
| 310 | // JS |
||
| 311 | gulp.task('moment:locales-clear', function() {
|
||
| 312 | return cleanDir('rainloop/v/' + cfg.devVersion + '/app/localization/moment/*.js');
|
||
| 313 | }); |
||
| 314 | |||
| 315 | gulp.task('moment:locales', ['moment:locales-clear'], function() {
|
||
| 316 | return gulp.src(cfg.paths.js.moment.locales) |
||
| 317 | .pipe(gulp.dest(cfg.paths.momentLocales)); |
||
| 318 | }); |
||
| 319 | |||
| 320 | gulp.task('js:libs', function() {
|
||
| 321 | var src = cfg.paths.js.libs.src; |
||
| 322 | return gulp.src(src) |
||
| 323 | .pipe(expect.real({errorOnFailure: true}, src))
|
||
| 324 | .pipe(concat(cfg.paths.js.libs.name, {separator: '\n\n'}))
|
||
| 325 | .pipe(eol('\n', true))
|
||
| 326 | .pipe(replace(/sourceMappingURL=[a-z0-9\.\-_]{1,20}\.map/ig, ''))
|
||
| 327 | .pipe(gulp.dest(cfg.paths.staticJS)); |
||
| 328 | }); |
||
| 329 | |||
| 330 | gulp.task('js:clean', function() {
|
||
| 331 | return cleanDir(cfg.paths.staticJS + '/**/*.js'); |
||
| 332 | }); |
||
| 333 | |||
| 334 | gulp.task('js:webpack', function(callback) {
|
||
| 335 | webpack(webpackCfgBuilder(cfg.paths.staticJS, !cfg.community, false), webpackCallback(callback)); |
||
| 336 | }); |
||
| 337 | |||
| 338 | gulp.task('js:app', ['js:webpack'], function() {
|
||
| 339 | return gulp.src(cfg.paths.staticJS + cfg.paths.js.app.name) |
||
| 340 | .pipe(header(getHead() + '\n')) |
||
| 341 | .pipe(eol('\n', true))
|
||
| 342 | .pipe(gulp.dest(cfg.paths.staticJS)) |
||
| 343 | .on('error', gutil.log);
|
||
| 344 | }); |
||
| 345 | |||
| 346 | gulp.task('js:admin', ['js:webpack'], function() {
|
||
| 347 | return gulp.src(cfg.paths.staticJS + cfg.paths.js.admin.name) |
||
| 348 | .pipe(header(getHead() + '\n')) |
||
| 349 | .pipe(eol('\n', true))
|
||
| 350 | .pipe(gulp.dest(cfg.paths.staticJS)) |
||
| 351 | .on('error', gutil.log);
|
||
| 352 | }); |
||
| 353 | |||
| 354 | // - min |
||
| 355 | gulp.task('js:min', ['js:app', 'js:admin'], function() {
|
||
| 356 | return gulp.src(cfg.paths.staticJS + '*.js') |
||
| 357 | .pipe(replace(/"rainloop\/v\/([^\/]+)\/static\/js\/"/g, '"rainloop/v/$1/static/js/min/"')) |
||
| 358 | .pipe(size({
|
||
| 359 | showFiles: true, |
||
| 360 | showTotal: false |
||
| 361 | })) |
||
| 362 | .pipe(rename({suffix: '.min'}))
|
||
| 363 | .pipe(uglify({
|
||
| 364 | mangle: true, |
||
| 365 | compress: true, |
||
| 366 | ie8: false |
||
| 367 | })) |
||
| 368 | .pipe(eol('\n', true))
|
||
| 369 | .pipe(size({
|
||
| 370 | showFiles: true, |
||
| 371 | showTotal: false |
||
| 372 | })) |
||
| 373 | .pipe(gulp.dest(cfg.paths.staticMinJS)) |
||
| 374 | .on('error', gutil.log);
|
||
| 375 | }); |
||
| 376 | |||
| 377 | // lint |
||
| 378 | gulp.task('js:eslint', function() {
|
||
| 379 | return gulp.src(cfg.paths.globjs) |
||
| 380 | .pipe(cache('eslint'))
|
||
| 381 | .pipe(eslint()) |
||
| 382 | .pipe(gulpif(cfg.watch, plumber({errorHandler: notify.onError("Error: <%= error.message %>")})))
|
||
| 383 | .pipe(eslint.format()) |
||
| 384 | .pipe(eslint.failAfterError()); |
||
| 385 | }); |
||
| 386 | |||
| 387 | gulp.task('js:validate', ['js:eslint']);
|
||
| 388 | |||
| 389 | // other |
||
| 390 | gulp.task('lightgallery-fonts:clear', function() {
|
||
| 391 | return cleanDir('rainloop/v/' + cfg.devVersion + '/static/css/fonts/lg.*');
|
||
| 392 | }); |
||
| 393 | |||
| 394 | gulp.task('fontastic-fonts:clear', function() {
|
||
| 395 | return cleanDir('rainloop/v/' + cfg.devVersion + '/static/css/fonts/rainloop.*');
|
||
| 396 | }); |
||
| 397 | |||
| 398 | gulp.task('lightgallery-fonts:copy', ['lightgallery-fonts:clear'], function() {
|
||
| 399 | return gulp.src('node_modules/lightgallery/dist/fonts/lg.*')
|
||
| 400 | .pipe(gulp.dest('rainloop/v/' + cfg.devVersion + '/static/css/fonts'));
|
||
| 401 | }); |
||
| 402 | |||
| 403 | gulp.task('fontastic-fonts:copy', ['fontastic-fonts:clear'], function() {
|
||
| 404 | return gulp.src('vendors/fontastic/fonts/rainloop.*')
|
||
| 405 | .pipe(gulp.dest('rainloop/v/' + cfg.devVersion + '/static/css/fonts'));
|
||
| 406 | }); |
||
| 407 | |||
| 408 | gulp.task('lightgallery', ['lightgallery-fonts:copy']);
|
||
| 409 | gulp.task('fontastic', ['fontastic-fonts:copy']);
|
||
| 410 | |||
| 411 | gulp.task('ckeditor:clear', function() {
|
||
| 412 | return cleanDir('rainloop/v/' + cfg.devVersion + '/static/ckeditor');
|
||
| 413 | }); |
||
| 414 | |||
| 415 | gulp.task('ckeditor:copy', ['ckeditor:clear'], function() {
|
||
| 416 | return gulp.src(['vendors/ckeditor/**/*', '!vendors/ckeditor/samples{,/**}', '!vendors/ckeditor/adapters{,/**}', '!vendors/ckeditor/*.md'])
|
||
| 417 | .pipe(gulp.dest('rainloop/v/' + cfg.devVersion + '/static/ckeditor'));
|
||
| 418 | }); |
||
| 419 | |||
| 420 | gulp.task('ckeditor:copy-plugins', ['ckeditor:copy'], function() {
|
||
| 421 | return gulp.src('vendors/ckeditor-plugins/**/*')
|
||
| 422 | .pipe(gulp.dest('rainloop/v/' + cfg.devVersion + '/static/ckeditor/plugins'));
|
||
| 423 | }); |
||
| 424 | |||
| 425 | gulp.task('ckeditor', ['ckeditor:copy-plugins', 'ckeditor:copy', 'ckeditor:clear'], function () {
|
||
| 426 | return gulp.src('rainloop/v/' + cfg.devVersion + '/static/ckeditor/*.js')
|
||
| 427 | .pipe(stripbom()) |
||
| 428 | .pipe(header("\uFEFF")) // BOM
|
||
| 429 | .pipe(gulp.dest('rainloop/v/' + cfg.devVersion + '/static/ckeditor'));
|
||
| 430 | }); |
||
| 431 | |||
| 432 | // build (RainLoop) |
||
| 433 | gulp.task('rainloop:copy', ['default'], function() {
|
||
| 434 | |||
| 435 | var |
||
| 436 | versionFull = pkg.version, |
||
| 437 | dist = cfg.releasesPath + '/webmail/' + versionFull + '/src/' |
||
| 438 | ; |
||
| 439 | |||
| 440 | fs.mkdirSync(dist, '0777', true); |
||
| 441 | fs.mkdirSync(dist + 'data'); |
||
| 442 | fs.mkdirSync(dist + 'rainloop/v/' + versionFull, '0777', true); |
||
| 443 | |||
| 444 | return gulp.src('rainloop/v/' + cfg.devVersion + '/**/*', {base: 'rainloop/v/' + cfg.devVersion})
|
||
| 445 | .pipe(chmod(0o644, 0o755)) |
||
| 446 | .pipe(gulp.dest(dist + 'rainloop/v/' + versionFull)); |
||
| 447 | }); |
||
| 448 | |||
| 449 | gulp.task('rainloop:setup', ['rainloop:copy'], function() {
|
||
| 450 | |||
| 451 | var |
||
| 452 | versionFull = pkg.version, |
||
| 453 | dist = cfg.releasesPath + '/webmail/' + versionFull + '/src/' |
||
| 454 | ; |
||
| 455 | |||
| 456 | fs.writeFileSync(dist + 'data/VERSION', versionFull); |
||
| 457 | fs.writeFileSync(dist + 'data/EMPTY', versionFull); |
||
| 458 | |||
| 459 | fs.writeFileSync(dist + 'index.php', fs.readFileSync('index.php', 'utf8')
|
||
| 460 | .replace('\'APP_VERSION\', \'0.0.0\'', '\'APP_VERSION\', \'' + versionFull + '\'')
|
||
| 461 | .replace('\'APP_VERSION_TYPE\', \'source\'', '\'APP_VERSION_TYPE\', \'' + (cfg.community ? 'community' : 'standard') + '\'')
|
||
| 462 | ); |
||
| 463 | |||
| 464 | fs.writeFileSync(dist + 'rainloop/v/' + versionFull + '/index.php.root', fs.readFileSync(dist + 'index.php')); |
||
| 465 | |||
| 466 | if (cfg.community) |
||
| 467 | {
|
||
| 468 | require('rimraf').sync(dist + 'rainloop/v/' + versionFull + '/app/libraries/RainLoop/Providers/Prem.php');
|
||
| 469 | } |
||
| 470 | |||
| 471 | View Code Duplication | cfg.destPath = cfg.releasesPath + '/webmail/' + versionFull + '/'; |
|
|
0 ignored issues
–
show
Duplication
introduced
by
Loading history...
|
|||
| 472 | cfg.cleanPath = dist; |
||
| 473 | cfg.zipSrcPath = dist; |
||
| 474 | cfg.zipFile = 'rainloop-' + (cfg.community ? 'community-' : '') + versionFull + '.zip'; |
||
| 475 | cfg.zipFileShort = 'rainloop-' + (cfg.community ? 'community-' : '') + 'latest.zip'; |
||
| 476 | |||
| 477 | cfg.rainloopBuilded = true; |
||
| 478 | }); |
||
| 479 | |||
| 480 | gulp.task('rainloop:zip', ['rainloop:copy', 'rainloop:setup'], function() {
|
||
| 481 | return (cfg.destPath && cfg.zipSrcPath && cfg.zipFile) ? |
||
| 482 | zipDir(cfg.zipSrcPath, cfg.destPath, cfg.zipFile) : false; |
||
| 483 | }); |
||
| 484 | |||
| 485 | gulp.task('rainloop:clean', ['rainloop:copy', 'rainloop:setup', 'rainloop:zip'], function() {
|
||
| 486 | return (cfg.cleanPath) ? cleanDir(cfg.cleanPath) : false; |
||
| 487 | }); |
||
| 488 | |||
| 489 | gulp.task('rainloop:shortname', ['rainloop:zip'], function(callback) {
|
||
| 490 | copyFile(cfg.destPath + cfg.zipFile, cfg.destPath + cfg.zipFileShort, callback); |
||
| 491 | }); |
||
| 492 | |||
| 493 | gulp.task('rainloop:copy-dist', ['rainloop:shortname'], function(callback) {
|
||
| 494 | var newPath = cfg.destPath.replace('build/dist/releases', 'dist/releases');
|
||
| 495 | fs.mkdirSync(newPath, '0777', true); |
||
| 496 | copyFile(cfg.destPath + cfg.zipFile, newPath + cfg.zipFile, function() {
|
||
| 497 | copyFile(cfg.destPath + cfg.zipFileShort, newPath + cfg.zipFileShort, callback); |
||
| 498 | }); |
||
| 499 | }); |
||
| 500 | |||
| 501 | // build (OwnCloud) |
||
| 502 | gulp.task('rainloop:owncloud:copy', function() {
|
||
| 503 | |||
| 504 | var |
||
| 505 | versionFull = pkg.ownCloudVersion, |
||
| 506 | dist = cfg.releasesPath + '/owncloud/' + versionFull + '/src/' |
||
| 507 | ; |
||
| 508 | |||
| 509 | fs.mkdirSync(dist, '0777', true); |
||
| 510 | fs.mkdirSync(dist + 'rainloop', '0777', true); |
||
| 511 | |||
| 512 | return gulp.src('build/owncloud/rainloop-app/**/*', {base: 'build/owncloud/rainloop-app/'})
|
||
| 513 | .pipe(gulp.dest(dist + 'rainloop')); |
||
| 514 | }); |
||
| 515 | |||
| 516 | gulp.task('rainloop:owncloud:copy-rainloop', ['rainloop:start', 'rainloop:owncloud:copy'], function() {
|
||
| 517 | |||
| 518 | var |
||
| 519 | versionFull = pkg.ownCloudVersion, |
||
| 520 | dist = cfg.releasesPath + '/owncloud/' + versionFull + '/src/rainloop/' |
||
| 521 | ; |
||
| 522 | |||
| 523 | if (cfg.rainloopBuilded && cfg.destPath) |
||
| 524 | {
|
||
| 525 | return gulp.src(cfg.destPath + '/src/**/*', {base: cfg.destPath + '/src/'})
|
||
| 526 | .pipe(gulp.dest(dist + 'app/')); |
||
| 527 | } |
||
| 528 | |||
| 529 | return true; |
||
| 530 | }); |
||
| 531 | |||
| 532 | gulp.task('rainloop:owncloud:copy-rainloop:clean', ['rainloop:owncloud:copy-rainloop'], function() {
|
||
| 533 | return (cfg.cleanPath) ? cleanDir(cfg.cleanPath) : false; |
||
| 534 | }); |
||
| 535 | |||
| 536 | gulp.task('rainloop:owncloud:setup', ['rainloop:owncloud:copy', 'rainloop:owncloud:copy-rainloop'], function() {
|
||
| 537 | |||
| 538 | var |
||
| 539 | versionFull = pkg.ownCloudVersion, |
||
| 540 | dist = cfg.releasesPath + '/owncloud/' + versionFull + '/src/' |
||
| 541 | ; |
||
| 542 | |||
| 543 | fs.writeFileSync(dist + 'rainloop/appinfo/info.xml', |
||
| 544 | fs.readFileSync(dist + 'rainloop/appinfo/info.xml', 'utf8') |
||
| 545 | .replace('<version>0.0</version>', '<version>' + versionFull + '</version>')
|
||
| 546 | .replace('<licence></licence>', '<licence>' + (cfg.community ? 'AGPLv3' : 'RainLoop Software License') + '</licence>')
|
||
| 547 | ); |
||
| 548 | |||
| 549 | fs.writeFileSync(dist + 'rainloop/appinfo/version', versionFull); |
||
| 550 | fs.writeFileSync(dist + 'rainloop/VERSION', versionFull); |
||
| 551 | |||
| 552 | View Code Duplication | cfg.destPath = cfg.releasesPath + '/owncloud/' + versionFull + '/'; |
|
|
0 ignored issues
–
show
|
|||
| 553 | cfg.cleanPath = dist; |
||
| 554 | cfg.zipSrcPath = dist; |
||
| 555 | cfg.zipFile = 'rainloop-owncloud-app-' + (cfg.community ? '' : 'standard-') + versionFull + '.zip'; |
||
| 556 | cfg.zipFileShort = 'rainloop' + (cfg.community ? '' : '-standard') + '.zip'; |
||
| 557 | }); |
||
| 558 | |||
| 559 | gulp.task('rainloop:owncloud:zip', ['rainloop:owncloud:copy', 'rainloop:owncloud:setup'], function() {
|
||
| 560 | return (cfg.destPath && cfg.zipSrcPath && cfg.zipFile) ? |
||
| 561 | zipDir(cfg.zipSrcPath, cfg.destPath, cfg.zipFile) : false; |
||
| 562 | }); |
||
| 563 | |||
| 564 | gulp.task('rainloop:owncloud:clean', ['rainloop:owncloud:copy', 'rainloop:owncloud:setup', 'rainloop:owncloud:zip'], function() {
|
||
| 565 | return (cfg.cleanPath) ? cleanDir(cfg.cleanPath) : false; |
||
| 566 | }); |
||
| 567 | |||
| 568 | gulp.task('rainloop:owncloud:shortname', ['rainloop:owncloud:zip'], function(callback) {
|
||
| 569 | copyFile(cfg.destPath + cfg.zipFile, cfg.destPath + cfg.zipFileShort, callback); |
||
| 570 | }); |
||
| 571 | |||
| 572 | gulp.task('rainloop:owncloud:copy-dist', ['rainloop:owncloud:shortname'], function(callback) {
|
||
| 573 | var newPath = cfg.destPath.replace('build/dist/releases', 'dist/releases');
|
||
| 574 | fs.mkdirSync(newPath, '0777', true); |
||
| 575 | copyFile(cfg.destPath + cfg.zipFile, newPath + cfg.zipFile, function() {
|
||
| 576 | copyFile(cfg.destPath + cfg.zipFileShort, newPath + cfg.zipFileShort, callback); |
||
| 577 | }); |
||
| 578 | }); |
||
| 579 | |||
| 580 | // main |
||
| 581 | gulp.task('moment', ['moment:locales']);
|
||
| 582 | gulp.task('js', ['js:libs', 'js:min', 'js:validate']);
|
||
| 583 | gulp.task('css', ['css:min']);
|
||
| 584 | |||
| 585 | gulp.task('vendors', ['moment', 'ckeditor', 'fontastic', 'lightgallery']);
|
||
| 586 | |||
| 587 | gulp.task('clean', ['js:clean', 'css:clean', 'assets:clean']);
|
||
| 588 | |||
| 589 | gulp.task('rainloop:start', ['rainloop:copy', 'rainloop:setup']);
|
||
| 590 | |||
| 591 | gulp.task('rainloop', ['rainloop:start', 'rainloop:zip', 'rainloop:clean', 'rainloop:shortname']);
|
||
| 592 | gulp.task('rainloop:docker', ['rainloop', 'rainloop:copy-dist']);
|
||
| 593 | |||
| 594 | gulp.task('owncloud', ['rainloop:owncloud:copy',
|
||
| 595 | 'rainloop:owncloud:copy-rainloop', 'rainloop:owncloud:copy-rainloop:clean', |
||
| 596 | 'rainloop:owncloud:setup', 'rainloop:owncloud:zip', 'rainloop:owncloud:clean', 'rainloop:owncloud:shortname']); |
||
| 597 | gulp.task('owncloud:docker', ['owncloud', 'rainloop:owncloud:copy-dist']);
|
||
| 598 | |||
| 599 | // default |
||
| 600 | gulp.task('default', function(callback) {
|
||
| 601 | runSequence('clean', ['js', 'css', 'vendors'], callback);
|
||
| 602 | }); |
||
| 603 | |||
| 604 | // watch |
||
| 605 | gulp.task('watch', ['css:main', 'js:validate'], function() {
|
||
| 606 | cfg.watch = true; |
||
| 607 | livereload.listen(); |
||
| 608 | gulp.watch(cfg.paths.less.main.watch, {interval: cfg.watchInterval}, ['css:main']);
|
||
| 609 | gulp.watch(cfg.paths.globjs, {interval: cfg.watchInterval}, ['js:validate']);
|
||
| 610 | }); |
||
| 611 | |||
| 612 | // aliases |
||
| 613 | gulp.task('build', ['rainloop']);
|
||
| 614 | |||
| 615 | gulp.task('all', function(callback) {
|
||
| 616 | runSequence('rainloop', 'owncloud', callback);
|
||
| 617 | }); |
||
| 618 | |||
| 619 | gulp.task('all:docker', function(callback) {
|
||
| 620 | runSequence('rainloop:docker', 'owncloud:docker', callback);
|
||
| 621 | }); |
||
| 622 | |||
| 623 | gulp.task('d', ['default']);
|
||
| 624 | gulp.task('w', ['watch']);
|
||
| 625 | gulp.task('l', ['js:libs']);
|
||
| 626 | gulp.task('v', ['js:validate']);
|
||
| 627 | |||
| 628 | gulp.task('b', ['build']);
|
||
| 629 | gulp.task('o', ['owncloud']);
|
||
| 630 |