2
0

release.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. 'jshint',
  58. 'cover',
  59. 'build',
  60. 'casper',
  61. 'sauce',
  62. 'version:' + next,
  63. 'git:' + next
  64. ])
  65. }
  66. done()
  67. })
  68. })
  69. function blue (str) {
  70. return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  71. }
  72. }