gulpfile.js 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. /* Utlimate Jay Mega Gulpfile */
  2. /* global require:true */
  3. /* jshint laxbreak:true */
  4. (function () {
  5. 'use strict';
  6. var pkg = require('./package.json'),
  7. del = require('del'),
  8. yargs = require('yargs'),
  9. exec = require('exec'),
  10. fs = require('fs'),
  11. gulp = require('gulp'),
  12. bump = require('gulp-bump'),
  13. header = require('gulp-header'),
  14. cssmin = require('gulp-cssmin'),
  15. uglify = require('gulp-uglify'),
  16. sourcemap = require('gulp-sourcemaps'),
  17. jshint = require('gulp-jshint'),
  18. gutil = require('gulp-util'),
  19. zip = require('gulp-zip'),
  20. rename = require('gulp-rename'),
  21. replace = require('gulp-replace'),
  22. gsync = require('gulp-sync'),
  23. sync = gsync(gulp).sync;
  24. var bumpVersion = yargs.argv.type || 'patch';
  25. var settings = {
  26. name: 'vegas',
  27. banner: {
  28. content: [
  29. '/*!-----------------------------------------------------------------------------',
  30. ' * <%= pkg.description %>',
  31. ' * v<%= pkg.version %> - built <%= datetime %>',
  32. ' * Licensed under the MIT License.',
  33. ' * http://vegas.jaysalvat.com/',
  34. ' * ----------------------------------------------------------------------------',
  35. ' * Copyright (C) 2010-<%= year %> Jay Salvat',
  36. ' * http://jaysalvat.com/',
  37. ' * --------------------------------------------------------------------------*/',
  38. ''
  39. ].join('\n'),
  40. vars: {
  41. pkg: pkg,
  42. datetime: gutil.date('yyyy-mm-dd'),
  43. year: gutil.date('yyyy')
  44. }
  45. }
  46. };
  47. var getPackageJson = function () {
  48. return JSON.parse(fs.readFileSync('./package.json'));
  49. };
  50. gulp.task('clean', function (cb) {
  51. return del([ './dist' ], cb);
  52. });
  53. gulp.task('tmp-clean', function (cb) {
  54. return del([ './tmp' ], cb);
  55. });
  56. gulp.task('tmp-create', function (cb) {
  57. return exec('mkdir -p ./tmp', cb);
  58. });
  59. gulp.task('tmp-copy', [ 'tmp-create' ], function () {
  60. return gulp.src('./dist/**/*')
  61. .pipe(gulp.dest('./tmp'));
  62. });
  63. gulp.task('zip', [ 'tmp-create' ], function () {
  64. var filename = settings.name + '.zip';
  65. return gulp.src('./dist/**/*')
  66. .pipe(zip(filename))
  67. .pipe(gulp.dest('./tmp'));
  68. });
  69. gulp.task('fail-if-dirty', function (cb) {
  70. return exec('git diff-index HEAD --', function (err, output) { // err, output, code
  71. if (err) {
  72. return cb(err);
  73. }
  74. if (output) {
  75. return cb('Repository is dirty');
  76. }
  77. return cb();
  78. });
  79. });
  80. gulp.task('fail-if-not-master', function (cb) {
  81. exec('git symbolic-ref -q HEAD', function (err, output) { // err, output, code
  82. if (err) {
  83. return cb(err);
  84. }
  85. if (!/refs\/heads\/master/.test(output)) {
  86. return cb('Branch is not Master');
  87. }
  88. return cb();
  89. });
  90. });
  91. gulp.task('git-tag', function (cb) {
  92. var message = 'v' + getPackageJson().version;
  93. return exec('git tag ' + message, cb);
  94. });
  95. gulp.task('git-add', function (cb) {
  96. return exec('git add -A', cb);
  97. });
  98. gulp.task('git-commit', [ 'git-add' ], function (cb) {
  99. var message = 'Build v' + getPackageJson().version;
  100. return exec('git commit -m "' + message + '"', cb);
  101. });
  102. gulp.task('git-pull', function (cb) {
  103. return exec('git pull origin master', function (err, output, code) {
  104. if (code !== 0) {
  105. return cb(err + output);
  106. }
  107. return cb();
  108. });
  109. });
  110. gulp.task('git-push', [ 'git-commit' ], function (cb) {
  111. return exec('git push origin master --tags', function (err, output, code) {
  112. if (code !== 0) {
  113. return cb(err + output);
  114. }
  115. return cb();
  116. });
  117. });
  118. gulp.task('meta', [ 'tmp-create' ], function (cb) {
  119. var metadata = {
  120. date: gutil.date('yyyy-mm-dd HH:MM'),
  121. version: 'v' + getPackageJson().version
  122. },
  123. json = JSON.stringify(metadata, null, 4);
  124. fs.writeFileSync('tmp/metadata.json', json);
  125. fs.writeFileSync('tmp/metadata.js', '__metadata(' + json + ');');
  126. return cb();
  127. });
  128. gulp.task('bump', function () {
  129. return gulp.src([ 'package.json', 'bower.json', 'component.json' ])
  130. .pipe(bump(
  131. /^[a-z]+$/.test(bumpVersion)
  132. ? { type: bumpVersion }
  133. : { version: bumpVersion }
  134. ))
  135. .pipe(gulp.dest('.'));
  136. });
  137. gulp.task('year', function () {
  138. return gulp.src([ './LICENSE.md', './README.md' ])
  139. .pipe(replace(/(Copyright )(\d{4})/g, '$1' + gutil.date('yyyy')))
  140. .pipe(gulp.dest('.'));
  141. });
  142. gulp.task('lint', function() {
  143. return gulp.src('./src/**.js')
  144. .pipe(jshint())
  145. .pipe(jshint.reporter('default'));
  146. });
  147. gulp.task('copy', function () {
  148. return gulp.src('./src/**/*')
  149. .pipe(gulp.dest('./dist'));
  150. });
  151. gulp.task('uglify', function () {
  152. return gulp.src('./dist/**/!(*.min.js).js')
  153. .pipe(rename({ suffix: '.min' }))
  154. .pipe(sourcemap.init())
  155. .pipe(uglify({
  156. compress: {
  157. warnings: false
  158. },
  159. mangle: true,
  160. outSourceMap: true
  161. }))
  162. .pipe(sourcemap.write('.'))
  163. .pipe(gulp.dest('./dist/'));
  164. });
  165. gulp.task('cssmin', function () {
  166. return gulp.src('./dist/**/!(*.min.css).css')
  167. .pipe(rename({ suffix: '.min' }))
  168. .pipe(cssmin())
  169. .pipe(gulp.dest('./dist/'));
  170. });
  171. gulp.task('header', function () {
  172. settings.banner.vars.pkg = getPackageJson();
  173. return gulp.src('./dist/*.js')
  174. .pipe(header(settings.banner.content, settings.banner.vars ))
  175. .pipe(gulp.dest('./dist/'));
  176. });
  177. gulp.task('gh-pages', function (cb) {
  178. var version = getPackageJson().version;
  179. exec([ 'git checkout gh-pages',
  180. 'rm -rf releases/' + version,
  181. 'mkdir -p releases/' + version,
  182. 'cp -r tmp/* releases/' + version,
  183. 'git add -A releases/' + version,
  184. 'rm -rf releases/latest',
  185. 'mkdir -p releases/latest',
  186. 'cp -r tmp/* releases/latest',
  187. 'git add -A releases/latest',
  188. 'git commit -m "Publish release v' + version + '."',
  189. 'git push origin gh-pages',
  190. 'git checkout -'
  191. ].join(' && '),
  192. function (err, output, code) {
  193. if (code !== 0) {
  194. return cb(err + output);
  195. }
  196. return cb();
  197. }
  198. );
  199. });
  200. gulp.task('build', sync([
  201. 'lint',
  202. 'clean',
  203. 'copy',
  204. 'uglify',
  205. 'cssmin',
  206. 'header'
  207. ],
  208. 'building'));
  209. gulp.task('release', sync([
  210. [ 'fail-if-not-master', 'fail-if-dirty' ],
  211. 'git-pull',
  212. 'bump',
  213. 'license',
  214. 'clean',
  215. 'copy',
  216. 'uglify',
  217. 'cssmin',
  218. 'header',
  219. 'git-add',
  220. 'git-commit',
  221. 'git-tag',
  222. 'git-push',
  223. 'publish'
  224. ],
  225. 'releasing'));
  226. gulp.task('publish', sync([
  227. [ 'fail-if-not-master', 'fail-if-dirty' ],
  228. 'tmp-create',
  229. 'tmp-copy',
  230. 'meta',
  231. 'zip',
  232. 'gh-pages',
  233. 'tmp-clean'
  234. ],
  235. 'publising'));
  236. })();
  237. /*
  238. NPM Installation
  239. ----------------
  240. npm install --save-dev del
  241. npm install --save-dev yargs
  242. npm install --save-dev exec
  243. npm install --save-dev fs
  244. npm install --save-dev gulp
  245. npm install --save-dev gulp-bump
  246. npm install --save-dev gulp-header
  247. npm install --save-dev gulp-cssmin
  248. npm install --save-dev gulp-uglify
  249. npm install --save-dev gulp-sourcemaps
  250. npm install --save-dev gulp-jshint
  251. npm install --save-dev gulp-util
  252. npm install --save-dev gulp-zip
  253. npm install --save-dev gulp-rename
  254. npm install --save-dev gulp-replace
  255. npm install --save-dev gulp-sync
  256. Gh-pages creation
  257. -----------------
  258. git checkout --orphan gh-pages
  259. git rm -rf .
  260. rm -fr
  261. echo 'Welcome' > index.html
  262. git add index.html
  263. git commit -a -m 'First commit'
  264. git push origin gh-pages
  265. git checkout -
  266. */