release.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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', 'bower', 'component']
  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. grunt.config.set('version', next)
  56. grunt.task.run([
  57. 'default',
  58. 'version:' + next
  59. // 'git:' + next
  60. ])
  61. }
  62. done()
  63. })
  64. })
  65. function blue (str) {
  66. return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  67. }
  68. }