gruntfile.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. var semver = require('semver'),
  2. format = require('util').format;
  3. module.exports = function(grunt) {
  4. grunt.initConfig({
  5. pkg: grunt.file.readJSON('package.json'),
  6. banner: [
  7. ' // ----------------------------------------------------------------------------',
  8. ' // <%= pkg.description %>',
  9. ' // v<%= pkg.version %> - released <%= grunt.template.today("yyyy-mm-dd HH:MM") %>',
  10. ' // Licensed under the MIT license.',
  11. ' // http://vegas.jaysalvat.com/',
  12. ' // ----------------------------------------------------------------------------',
  13. ' // Copyright (C) 2010-<%= grunt.template.today("yyyy") %> Jay Salvat',
  14. ' // http://jaysalvat.com/',
  15. ' // ----------------------------------------------------------------------------',
  16. '\n'
  17. ].join('\n'),
  18. jshint: {
  19. files: ['gruntfile.js', 'src/**/*.js']
  20. },
  21. uglify: {
  22. options: {
  23. banner: '<%= banner %>'
  24. },
  25. js: {
  26. options: {
  27. mangle: false,
  28. compress: false,
  29. beautify: true
  30. },
  31. src: 'src/jquery.vegas.js',
  32. dest: 'dist/jquery.vegas.js'
  33. },
  34. jsmin: {
  35. options: {
  36. mangle: true,
  37. compress: true
  38. },
  39. src: 'dist/jquery.vegas.js',
  40. dest: 'dist/jquery.vegas.min.js'
  41. }
  42. },
  43. cssmin: {
  44. minify: {
  45. src: 'src/jquery.vegas.css',
  46. dest: 'dist/jquery.vegas.min.css'
  47. }
  48. },
  49. exec: {
  50. copyAssets: {
  51. cmd: [
  52. 'cp -r src/images dist/',
  53. 'cp -r src/overlays dist/',
  54. 'cp -r src/jquery.vegas.css dist/jquery.vegas.css'
  55. ].join(' && ')
  56. },
  57. publish: {
  58. cmd: [
  59. 'cp -r src/images dist/',
  60. 'cp -r src/overlays dist/',
  61. 'cp -r src/jquery.vegas.css dist/jquery.vegas.css',
  62. 'cp -r dist/ tmp/',
  63. 'zip -rj tmp/vegas.zip tmp/jquery.vegas.js',
  64. 'zip -rj tmp/vegas.zip tmp/jquery.vegas.min.js',
  65. 'zip -rj tmp/vegas.zip tmp/jquery.vegas.css',
  66. 'zip -rj tmp/vegas.zip tmp/jquery.vegas.min.css',
  67. 'zip -rj tmp/vegas.zip tmp/images',
  68. 'zip -rj tmp/vegas.zip tmp/overlays',
  69. 'git checkout gh-pages',
  70. 'rm -rf releases/latest/',
  71. 'cp -r tmp/ releases/<%= pkg.version %>/',
  72. 'cp -r tmp/ releases/latest/',
  73. 'git add -A releases/<%= pkg.version %>',
  74. 'git add -A releases/latest',
  75. 'git commit -m "Published v<%= pkg.version %>."',
  76. 'git push',
  77. 'git checkout -',
  78. 'rm -rf tmp/'
  79. ].join(' && ')
  80. },
  81. gitFailIfDirty: {
  82. cmd: 'test -z "$(git status --porcelain)"'
  83. },
  84. gitAdd: {
  85. cmd: 'git add .'
  86. },
  87. gitCommit: {
  88. cmd: function(message) {
  89. return format('git commit -m "%s"', message);
  90. }
  91. },
  92. gitTag: {
  93. cmd: function(version) {
  94. return format('git tag v%s -am "%s"', version, version);
  95. }
  96. },
  97. gitPush: {
  98. cmd: [
  99. 'git push',
  100. 'git push --tags'
  101. ].join(' && ')
  102. }
  103. }
  104. });
  105. grunt.loadNpmTasks('grunt-exec');
  106. grunt.loadNpmTasks('grunt-contrib-jshint');
  107. grunt.loadNpmTasks('grunt-contrib-uglify');
  108. grunt.loadNpmTasks('grunt-contrib-cssmin');
  109. grunt.registerTask('build', ['jshint', 'uglify', 'cssmin']);
  110. grunt.registerTask('publish', ['exec:publish']);
  111. grunt.registerTask('default', ['build']);
  112. grunt.registerTask('release', 'Release lib.', function(version) {
  113. var pkg = grunt.file.readJSON('package.json');
  114. version = semver.inc(pkg.version, version) || version;
  115. if (!semver.valid(version) || semver.lte(version, pkg.version)) {
  116. grunt.fatal('Invalid version.');
  117. }
  118. pkg.version = version;
  119. grunt.config.data.pkg = pkg;
  120. grunt.task.run([
  121. 'exec:gitFailIfDirty',
  122. 'build',
  123. 'metadata:' + version,
  124. 'manifests:' + version,
  125. 'exec:gitAdd',
  126. 'exec:gitCommit:' + version,
  127. 'exec:gitTag:' + version,
  128. 'exec:gitPush',
  129. 'exec:publish'
  130. ]);
  131. });
  132. grunt.registerTask('manifests', 'Update manifests.', function(version) {
  133. var _ = grunt.util._,
  134. pkg = grunt.file.readJSON('package.json'),
  135. cpt = grunt.file.readJSON('component.json');
  136. if (!semver.valid(version)) {
  137. grunt.fatal('Invalid version');
  138. }
  139. pkg.version = version;
  140. cpt = JSON.stringify(_.extend(cpt,
  141. _.omit(pkg, 'dependencies', 'devDependencies')
  142. ), null, 2);
  143. pkg = JSON.stringify(pkg, null, 2);
  144. grunt.file.write('package.json', pkg);
  145. grunt.file.write('component.json', cpt);
  146. });
  147. grunt.registerTask('metadata', 'Create metadata file.', function(version) {
  148. var metadata = {
  149. 'date': grunt.template.today("yyyy-mm-dd HH:MM:ss"),
  150. 'version': version
  151. };
  152. grunt.file.write('dist/metadata.json', JSON.stringify(metadata, null, 2));
  153. });
  154. };