release.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. var semver = require('semver'),
  2. readline = require('readline'),
  3. exec = require('child_process').exec
  4. module.exports = function (grunt) {
  5. grunt.registerTask('version', function (version) {
  6. ;['package', 'bower', 'component'].forEach(function (file) {
  7. file = './' + file + '.json'
  8. var json = grunt.file.read(file)
  9. json = json.replace(/"version"\s*:\s*"(.+?)"/, '"version": "' + version + '"')
  10. grunt.file.write(file, json)
  11. })
  12. })
  13. grunt.registerTask('git', function (version) {
  14. exec(
  15. 'git add -A;' +
  16. 'git commit -m "Release v' + version + '";' +
  17. 'git tag v' + version + ';' +
  18. 'git push;' +
  19. 'git push origin v' + version,
  20. this.async()
  21. )
  22. })
  23. grunt.registerTask('release', function (version) {
  24. var done = this.async(),
  25. current = grunt.config('pkg.version'),
  26. next = semver.inc(current, version || 'patch')
  27. if (!next) {
  28. if (!semver.valid(version)) {
  29. return grunt.fail.warn('Invalid version.')
  30. }
  31. if (semver.lt(version, current)) {
  32. return grunt.fail.warn('Version is older than current.')
  33. }
  34. }
  35. readline.createInterface({
  36. input: process.stdin,
  37. output: process.stdout
  38. }).question('Releasing version v' + next + '. Continue? (Y/n)', function (answer) {
  39. if (!answer || answer.toLowerCase() === 'y') {
  40. console.log(
  41. '\n\x1b[1m\x1b[34m' +
  42. 'Releasing: v' + next +
  43. '\x1b[39m\x1b[22m'
  44. )
  45. grunt.config.set('version', next)
  46. grunt.task.run([
  47. 'jshint',
  48. 'test',
  49. 'version:' + next,
  50. 'uglify',
  51. 'git:' + next
  52. ])
  53. }
  54. done()
  55. })
  56. })
  57. }