gulpfile.js 6.8 KB

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