release.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /**
  2. * Register release-related tasks.
  3. */
  4. module.exports = function (grunt) {
  5. /**
  6. * Update manifest file versions.
  7. */
  8. grunt.registerTask('version', function (version) {
  9. var manifests = ['package']
  10. manifests.forEach(function (file) {
  11. file = file + '.json'
  12. var json = grunt.file.read(file)
  13. json = json.replace(
  14. /"version"\s*:\s*"(.+?)"/,
  15. '"version": "' + version + '"'
  16. )
  17. grunt.file.write(file, json)
  18. console.log('updated ' + blue(file))
  19. })
  20. })
  21. /**
  22. * Commit & push to branches & tags + npm publish
  23. */
  24. grunt.registerTask('git', function (version) {
  25. var ShellTask = require('shell-task')
  26. new ShellTask('git add -A')
  27. .then('git commit -m "[release] ' + version + '"')
  28. .then('git tag ' + version)
  29. .then('git push')
  30. .then('git push origin refs/tags/' + version)
  31. .then('npm publish')
  32. .run(this.async())
  33. })
  34. /**
  35. * Main release routine.
  36. */
  37. grunt.registerTask('release', function (version) {
  38. var semver = require('semver')
  39. var readline = require('readline')
  40. var done = this.async()
  41. var current = grunt.config.get('version')
  42. var next = semver.inc(current, version || 'patch') || version
  43. if (!semver.valid(next)) {
  44. return grunt.fail.warn('Invalid version.')
  45. }
  46. if (semver.lt(next, current)) {
  47. return grunt.fail.warn('Version is older than current.')
  48. }
  49. readline.createInterface({
  50. input: process.stdin,
  51. output: process.stdout
  52. }).question('Releasing version ' + next + '. Continue? (Y/n)', function (answer) {
  53. if (!answer || answer.toLowerCase() === 'y') {
  54. console.log(blue('Releasing: ' + next))
  55. // set version in env
  56. process.env.VUE_VERSION = next
  57. grunt.task.run([
  58. 'eslint',
  59. 'cover',
  60. 'build',
  61. 'casper',
  62. 'sauce',
  63. 'version:' + next,
  64. 'git:' + next
  65. ])
  66. }
  67. done()
  68. })
  69. })
  70. function blue (str) {
  71. return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  72. }
  73. }