gulpfile.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. var static_path = '../static/misago/';
  2. var packageJSON = require('./package');
  3. var gulp = require('gulp');
  4. var concat = require('gulp-concat');
  5. var connect = require('gulp-connect');
  6. var jshint = require('gulp-jshint');
  7. var less = require('gulp-less');
  8. var minify = require('gulp-minify-css');
  9. var open = require('gulp-open');
  10. var sourcemaps = require('gulp-sourcemaps');
  11. var uglify = require('gulp-uglify');
  12. var del = require('del');
  13. var vendors = [
  14. 'bower_components/jquery/dist/jquery.js',
  15. 'bower_components/mithril/mithril.js',
  16. 'bower_components/bootstrap/js/transition.js',
  17. 'bower_components/bootstrap/js/affix.js',
  18. 'bower_components/bootstrap/js/modal.js'
  19. ];
  20. var ace = [
  21. 'bower_components/ace-builds/src/ace.js',
  22. 'bower_components/ace-builds/src/mode-markdown.js'
  23. ];
  24. gulp.task('lint', function() {
  25. return gulp.src(['misago/*.js', 'misago/**/*.js'])
  26. .pipe(jshint(packageJSON.jshintConfig))
  27. .pipe(jshint.reporter('default'));
  28. });
  29. gulp.task('misagojs', ['lint'], function() {
  30. return gulp.src([
  31. 'misago/app.js',
  32. 'misago/components/**/*.js',
  33. 'misago/models/*.js',
  34. 'misago/services/*.js',
  35. 'misago/templates/**/*.js',
  36. 'misago/utils/**/*.js',
  37. ])
  38. .pipe(concat('misago.js'))
  39. .pipe(gulp.dest('dist'));
  40. });
  41. gulp.task('vendorjs', function() {
  42. return gulp.src(vendors)
  43. .pipe(concat('vendor.js'))
  44. .pipe(gulp.dest('dist'));
  45. });
  46. gulp.task('acejs', function() {
  47. return gulp.src(ace)
  48. .pipe(concat('ace.js'))
  49. .pipe(gulp.dest('dist'));
  50. });
  51. gulp.task('collectjs', ['vendorjs', 'misagojs', 'acejs'], function() {
  52. return gulp.src('dist/*.js')
  53. .pipe(gulp.dest('dist/js'));
  54. });
  55. gulp.task('compressjs', ['collectjs'], function() {
  56. return gulp.src('dist/js/*.js')
  57. .pipe(sourcemaps.init())
  58. .pipe(uglify())
  59. .pipe(sourcemaps.write('/'))
  60. .pipe(gulp.dest('dist/js'));
  61. });
  62. gulp.task('compileless', function() {
  63. return gulp.src('misago/style/misago.less')
  64. .pipe(less())
  65. .pipe(gulp.dest('dist'));
  66. });
  67. gulp.task('collectcss', ['compileless'], function() {
  68. return gulp.src('dist/*.css')
  69. .pipe(gulp.dest('dist/css'));
  70. });
  71. gulp.task('compresscss', ['collectcss'], function() {
  72. return gulp.src('dist/css/*.css')
  73. .pipe(minify())
  74. .pipe(gulp.dest('dist/css'));
  75. });
  76. gulp.task('copyfonts', function() {
  77. return gulp.src('static/fonts/**/*')
  78. .pipe(gulp.dest('dist/fonts'));
  79. });
  80. gulp.task('copyimg', function() {
  81. return gulp.src('static/img/**/*')
  82. .pipe(gulp.dest('dist/img'));
  83. });
  84. gulp.task('cleanprod', function(cb) {
  85. del([
  86. static_path + 'css',
  87. static_path + 'js',
  88. static_path + 'fonts',
  89. static_path + 'img'
  90. ], {force: true}, cb);
  91. });
  92. gulp.task('prepareprod', ['cleanprod', 'compressjs', 'compresscss', 'copyfonts', 'copyimg']);
  93. gulp.task('deployjs', ['prepareprod'], function() {
  94. return gulp.src('dist/js/**/*')
  95. .pipe(gulp.dest(static_path + 'js'));
  96. })
  97. gulp.task('deploycss', ['prepareprod'], function() {
  98. return gulp.src('dist/css/**/*')
  99. .pipe(gulp.dest(static_path + 'css'));
  100. })
  101. gulp.task('deployfonts', ['prepareprod'], function() {
  102. return gulp.src('dist/fonts/**/*')
  103. .pipe(gulp.dest(static_path + 'fonts'));
  104. })
  105. gulp.task('deployimg', ['prepareprod'], function() {
  106. return gulp.src('dist/img/**/*')
  107. .pipe(gulp.dest(static_path + 'img'));
  108. })
  109. gulp.task('default', ['deployjs', 'deploycss', 'deployfonts', 'deployimg']);
  110. gulp.task('quickdeployjs', ['collectjs'], function() {
  111. return gulp.src('dist/js/**/*')
  112. .pipe(gulp.dest(static_path + 'js'));
  113. });
  114. gulp.task('quickdeploycss', ['collectcss'], function() {
  115. return gulp.src('dist/css/**/*')
  116. .pipe(gulp.dest(static_path + 'css'));
  117. });
  118. gulp.task('watch', function() {
  119. gulp.watch('misago/**/*.js', ['quickdeployjs']);
  120. gulp.watch('misago/**/*.less', ['quickdeploycss']);
  121. });
  122. gulp.task('cleantest', function(cb) {
  123. del('test/dist', cb);
  124. });
  125. gulp.task('collecttestjs', ['cleantest', 'collectjs'], function() {
  126. return gulp.src('dist/js/**/*')
  127. .pipe(gulp.dest('test/dist/js'));
  128. });
  129. gulp.task('collecttestcss', ['cleantest', 'collectcss'], function() {
  130. return gulp.src('dist/css/**/*')
  131. .pipe(gulp.dest('test/dist/css'));
  132. });
  133. gulp.task('collecttestfonts', ['cleantest', 'copyfonts'], function() {
  134. return gulp.src('dist/fonts/**/*')
  135. .pipe(gulp.dest('test/dist/fonts'));
  136. });
  137. gulp.task('collecttestimg', ['cleantest', 'copyimg'], function() {
  138. return gulp.src('dist/img/**/*')
  139. .pipe(gulp.dest('test/dist/img'));
  140. });
  141. gulp.task('collecttestsutils', ['cleantest'], function() {
  142. return gulp.src('test/utils/**/*.js')
  143. .pipe(jshint(packageJSON.jshintConfig))
  144. .pipe(jshint.reporter('default'))
  145. .pipe(jshint.reporter('fail'))
  146. .pipe(concat('utils.js'))
  147. .pipe(gulp.dest('test/dist'));
  148. });
  149. gulp.task('collecttests', ['cleantest'], function() {
  150. return gulp.src('test/tests/**/*.js')
  151. .pipe(jshint(packageJSON.jshintConfig))
  152. .pipe(jshint.reporter('default'))
  153. .pipe(jshint.reporter('fail'))
  154. .pipe(concat('tests.js'))
  155. .pipe(gulp.dest('test/dist'));
  156. });
  157. gulp.task('starttestserver', ['collecttests', 'collecttestsutils', 'collecttestjs', 'collecttestcss', 'collecttestfonts', 'collecttestimg'], function() {
  158. connect.server({
  159. port: 8080,
  160. root: 'test'
  161. });
  162. gulp.src(__filename)
  163. .pipe(open({ uri: 'http://127.0.0.1:8080/' }));
  164. });
  165. gulp.task('test', ['starttestserver'], function() {
  166. gulp.watch([
  167. 'test/tests/**/*.js', 'misago/**/*.js', 'misago/**/*.less'
  168. ], [
  169. 'collecttests', 'collecttestjs', 'collecttestcss'
  170. ]);
  171. });