gulpfile.js 9.3 KB

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