release.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. var semver = require('semver'),
  2. readline = require('readline'),
  3. ShellTask = require('shell-task')
  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. console.log('updated ' + blue(file))
  12. })
  13. })
  14. grunt.registerTask('git', function (version) {
  15. new ShellTask('git add -A')
  16. .then('git commit -m Release-v' + version)
  17. .then('git tag v' + version)
  18. .then('git push')
  19. .then('git push origin v' + version)
  20. .then('npm publish')
  21. .run(this.async(), function (err) {
  22. grunt.fail.fatal(err)
  23. })
  24. })
  25. grunt.registerTask('release', function (version) {
  26. var done = this.async(),
  27. current = grunt.config('version'),
  28. next = semver.inc(current, version || 'patch') || version
  29. if (!semver.valid(next)) {
  30. return grunt.fail.warn('Invalid version.')
  31. }
  32. if (semver.lt(next, current)) {
  33. return grunt.fail.warn('Version is older than current.')
  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(blue('Releasing: v' + next))
  41. grunt.task.run([
  42. 'jshint',
  43. 'build:' + next,
  44. 'test',
  45. 'version:' + next,
  46. 'git:' + next
  47. ])
  48. }
  49. done()
  50. })
  51. })
  52. }
  53. function blue (str) {
  54. return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  55. }