gruntfile.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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. publish: {
  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. 'cp -r dist/ tmp/',
  56. 'cd tmp',
  57. 'zip -r vegas.zip *',
  58. 'cd -',
  59. 'git checkout gh-pages',
  60. 'rm -rf releases/latest/',
  61. 'cp -r tmp/ releases/<%= pkg.version %>/',
  62. 'cp -r tmp/ releases/latest/',
  63. 'git add -A releases/<%= pkg.version %>',
  64. 'git add -A releases/latest',
  65. 'git commit -m "Published v<%= pkg.version %>."',
  66. 'git push origin gh-pages',
  67. 'git checkout -',
  68. 'rm -rf tmp/'
  69. ].join(' && ')
  70. },
  71. gitFailIfDirty: {
  72. cmd: 'test -z "$(git status --porcelain)"'
  73. },
  74. gitAdd: {
  75. cmd: 'git add .'
  76. },
  77. gitCommit: {
  78. cmd: function(message) {
  79. return format('git commit -m "Build %s"', message);
  80. }
  81. },
  82. gitTag: {
  83. cmd: function(version) {
  84. return format('git tag v%s -am "%s"', version, version);
  85. }
  86. },
  87. gitPush: {
  88. cmd: [
  89. 'git push origin master',
  90. 'git push origin master --tags'
  91. ].join(' && ')
  92. }
  93. }
  94. });
  95. grunt.loadNpmTasks('grunt-exec');
  96. grunt.loadNpmTasks('grunt-contrib-jshint');
  97. grunt.loadNpmTasks('grunt-contrib-uglify');
  98. grunt.loadNpmTasks('grunt-contrib-cssmin');
  99. grunt.registerTask('build', ['jshint', 'uglify', 'cssmin']);
  100. grunt.registerTask('publish', ['exec:publish']);
  101. grunt.registerTask('default', ['build']);
  102. grunt.registerTask('release', 'Release lib.', function(version) {
  103. var pkg = grunt.file.readJSON('package.json');
  104. version = semver.inc(pkg.version, version) || version;
  105. if (!semver.valid(version) || semver.lte(version, pkg.version)) {
  106. grunt.fatal('Invalid version.');
  107. }
  108. pkg.version = version;
  109. grunt.config.data.pkg = pkg;
  110. grunt.task.run([
  111. 'exec:gitFailIfDirty',
  112. 'build',
  113. 'metadata:' + version,
  114. 'manifests:' + version,
  115. 'exec:gitAdd',
  116. 'exec:gitCommit:' + version,
  117. 'exec:gitTag:' + version,
  118. 'exec:gitPush',
  119. 'exec:publish'
  120. ]);
  121. });
  122. grunt.registerTask('manifests', 'Update manifests.', function(version) {
  123. var _ = grunt.util._,
  124. pkg = grunt.file.readJSON('package.json'),
  125. cpt = grunt.file.readJSON('component.json');
  126. if (!semver.valid(version)) {
  127. grunt.fatal('Invalid version');
  128. }
  129. pkg.version = version;
  130. cpt = JSON.stringify(_.extend(cpt,
  131. _.omit(pkg, 'dependencies', 'devDependencies')
  132. ), null, 2);
  133. pkg = JSON.stringify(pkg, null, 2);
  134. grunt.file.write('package.json', pkg);
  135. grunt.file.write('component.json', cpt);
  136. });
  137. grunt.registerTask('metadata', 'Create metadata file.', function(version) {
  138. var metadata = {
  139. 'date': grunt.template.today("yyyy-mm-dd HH:MM:ss"),
  140. 'version': version
  141. };
  142. grunt.file.write('dist/metadata.json', JSON.stringify(metadata, null, 2));
  143. });
  144. };