gulpfile.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  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.js/mithril.js',
  16. 'bower_components/moment/min/moment.min.js',
  17. 'bower_components/bootstrap/js/transition.js',
  18. 'bower_components/bootstrap/js/affix.js',
  19. 'bower_components/bootstrap/js/modal.js',
  20. 'bower_components/bootstrap/js/dropdown.js'
  21. ];
  22. var ace = [
  23. 'bower_components/ace-builds/src/ace.js',
  24. 'bower_components/ace-builds/src/mode-markdown.js'
  25. ];
  26. var testLibs = [
  27. 'bower_components/jquery-mockjax/dist/jquery.mockjax.js'
  28. ];
  29. var zxcvbn = 'bower_components/zxcvbn/dist/*.js';
  30. gulp.task('lint', function() {
  31. return gulp.src(['misago/*.js', 'misago/**/*.js'])
  32. .pipe(jshint(packageJSON.jshintConfig))
  33. .pipe(jshint.reporter('default'));
  34. });
  35. gulp.task('misagojs', ['lint'], function() {
  36. return gulp.src([
  37. 'misago/app.js',
  38. 'misago/utils/**/*.js',
  39. 'misago/services/*.js',
  40. 'misago/models/**/*.js',
  41. 'misago/routes/**/*.js',
  42. 'misago/components/**/*.js',
  43. 'misago/templates/**/*.js',
  44. 'misago/forms/**/*.js',
  45. 'misago/urls.js',
  46. ])
  47. .pipe(concat('misago.js'))
  48. .pipe(gulp.dest('dist'));
  49. });
  50. gulp.task('vendorjs', function() {
  51. return gulp.src(vendors)
  52. .pipe(concat('vendor.js'))
  53. .pipe(gulp.dest('dist'));
  54. });
  55. gulp.task('acejs', function() {
  56. return gulp.src(ace)
  57. .pipe(concat('ace.js'))
  58. .pipe(gulp.dest('dist'));
  59. });
  60. gulp.task('zxcvbn', function() {
  61. return gulp.src(zxcvbn)
  62. .pipe(gulp.dest('dist'));
  63. });
  64. gulp.task('collectjs', ['vendorjs', 'misagojs', 'acejs', 'zxcvbn'], function() {
  65. return gulp.src('dist/*.js')
  66. .pipe(gulp.dest('dist/js'));
  67. });
  68. gulp.task('compressjs', ['collectjs'], function() {
  69. return gulp.src('dist/js/*.js')
  70. .pipe(sourcemaps.init())
  71. .pipe(uglify())
  72. .pipe(sourcemaps.write('/'))
  73. .pipe(gulp.dest('dist/js'));
  74. });
  75. gulp.task('compileless', function() {
  76. return gulp.src('misago/style/misago.less')
  77. .pipe(less())
  78. .pipe(gulp.dest('dist'));
  79. });
  80. gulp.task('collectcss', ['compileless'], function() {
  81. return gulp.src('dist/*.css')
  82. .pipe(gulp.dest('dist/css'));
  83. });
  84. gulp.task('compresscss', ['collectcss'], function() {
  85. return gulp.src('dist/css/*.css')
  86. .pipe(minify())
  87. .pipe(gulp.dest('dist/css'));
  88. });
  89. gulp.task('copyfonts', function() {
  90. return gulp.src('static/fonts/**/*')
  91. .pipe(gulp.dest('dist/fonts'));
  92. });
  93. gulp.task('copyimg', function() {
  94. return gulp.src('static/img/**/*')
  95. .pipe(gulp.dest('dist/img'));
  96. });
  97. gulp.task('cleanprod', function(cb) {
  98. del([
  99. static_path + 'css',
  100. static_path + 'js',
  101. static_path + 'fonts',
  102. static_path + 'img'
  103. ], {force: true}, cb);
  104. });
  105. gulp.task('prepareprod', [
  106. 'cleanprod',
  107. 'compressjs',
  108. 'compresscss',
  109. 'copyfonts',
  110. 'copyimg'
  111. ]);
  112. gulp.task('deployjs', ['prepareprod'], function() {
  113. return gulp.src('dist/js/**/*')
  114. .pipe(gulp.dest(static_path + 'js'));
  115. })
  116. gulp.task('deploycss', ['prepareprod'], function() {
  117. return gulp.src('dist/css/**/*')
  118. .pipe(gulp.dest(static_path + 'css'));
  119. })
  120. gulp.task('deployfonts', ['prepareprod'], function() {
  121. return gulp.src('dist/fonts/**/*')
  122. .pipe(gulp.dest(static_path + 'fonts'));
  123. })
  124. gulp.task('deployimg', ['prepareprod'], function() {
  125. return gulp.src('dist/img/**/*')
  126. .pipe(gulp.dest(static_path + 'img'));
  127. })
  128. gulp.task('default', ['deployjs', 'deploycss', 'deployfonts', 'deployimg']);
  129. gulp.task('quickdeployjs', ['collectjs'], function() {
  130. return gulp.src('dist/js/**/*')
  131. .pipe(gulp.dest(static_path + 'js'));
  132. });
  133. gulp.task('quickdeploycss', ['collectcss'], function() {
  134. return gulp.src('dist/css/**/*')
  135. .pipe(gulp.dest(static_path + 'css'));
  136. });
  137. gulp.task('watch', [
  138. 'quickdeployjs',
  139. 'quickdeploycss',
  140. 'deployfonts',
  141. 'deployimg'
  142. ], function() {
  143. gulp.watch('misago/**/*.js', ['quickdeployjs']);
  144. gulp.watch('misago/**/*.less', ['quickdeploycss']);
  145. });
  146. gulp.task('cleantest', function(cb) {
  147. del('test/dist', cb);
  148. });
  149. gulp.task('collecttestjs', ['cleantest', 'collectjs'], function() {
  150. return gulp.src('dist/js/**/*')
  151. .pipe(gulp.dest('test/dist/misago/js'));
  152. });
  153. gulp.task('collecttestcss', ['cleantest', 'collectcss'], function() {
  154. return gulp.src('dist/css/**/*')
  155. .pipe(gulp.dest('test/dist/misago/css'));
  156. });
  157. gulp.task('collecttestfonts', ['cleantest', 'copyfonts'], function() {
  158. return gulp.src('dist/fonts/**/*')
  159. .pipe(gulp.dest('test/dist/misago/fonts'));
  160. });
  161. gulp.task('collecttestimg', ['cleantest', 'copyimg'], function() {
  162. return gulp.src('dist/img/**/*')
  163. .pipe(gulp.dest('test/dist/misago/img'));
  164. });
  165. gulp.task('collecttestslibs', ['cleantest'], function() {
  166. return gulp.src(testLibs)
  167. .pipe(concat('libs.js'))
  168. .pipe(gulp.dest('test/dist'));
  169. });
  170. gulp.task('collecttestsutils', ['cleantest'], function() {
  171. return gulp.src('test/utils/**/*.js')
  172. .pipe(jshint(packageJSON.jshintConfig))
  173. .pipe(jshint.reporter('default'))
  174. .pipe(jshint.reporter('fail'))
  175. .pipe(concat('utils.js'))
  176. .pipe(gulp.dest('test/dist'));
  177. });
  178. gulp.task('collecttests', ['cleantest'], function() {
  179. return gulp.src('test/tests/**/*.js')
  180. .pipe(jshint(packageJSON.jshintConfig))
  181. .pipe(jshint.reporter('default'))
  182. .pipe(concat('tests.js'))
  183. .pipe(gulp.dest('test/dist'));
  184. });
  185. gulp.task('starttestserver', [
  186. 'collecttests',
  187. 'collecttestsutils',
  188. 'collecttestslibs',
  189. 'collecttestjs',
  190. 'collecttestcss',
  191. 'collecttestfonts',
  192. 'collecttestimg'
  193. ], function() {
  194. connect.server({
  195. port: 8080,
  196. root: 'test'
  197. });
  198. gulp.src(__filename)
  199. .pipe(open({ uri: 'http://127.0.0.1:8080/' }));
  200. });
  201. gulp.task('test', ['starttestserver'], function() {
  202. gulp.watch([
  203. 'test/tests/**/*.js', 'misago/**/*.js', 'misago/**/*.less'
  204. ], [
  205. 'collecttests',
  206. 'collecttestjs',
  207. 'collecttestcss',
  208. 'collecttestfonts',
  209. 'collecttestimg',
  210. 'collecttestsutils',
  211. 'collecttestslibs'
  212. ]);
  213. });