From c9c7dc20022cc92147b9b8f18f940c889703a86c Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Tue, 29 Oct 2013 12:30:12 -0400 Subject: [PATCH] A better script for bumping the version --- script/version_bump.rb | 91 ++++++++++++++++++++++++++++-------------- 1 file changed, 62 insertions(+), 29 deletions(-) diff --git a/script/version_bump.rb b/script/version_bump.rb index 3797043b7bf..b29765a67c6 100644 --- a/script/version_bump.rb +++ b/script/version_bump.rb @@ -3,33 +3,63 @@ # Increases the version. e.g., from 0.8.5 to 0.8.6. # If you want to bump the minor or major version numbers, do it manually # or edit lib/version.rb before running this file. -# -# Optional arguments: -# no-commit: Don't commit the file changes -# no-push: Don't push the commits to github. no-commit implies no-push too. + +usage = <<-END + + Arguments: + : The new version. Must have at least 2 parts. Examples: 0.9.8, 0.10, 0.9.7.3 + no-commit: Don't commit the changes. + push: Push the commits to github. If used by itself without the version argument, + it's assumed that the commit and tags are ready to be pushed. + + Example: + + To update the version in one step, and then push the commits in a second step: + + ruby script/version_bump.rb 0.9.7.3 + ruby script/version_bump.rb push + + To do everything in one step: + + ruby script/version_bump.rb 0.9.8 push + + END VERSION_FILE_PATH = File.expand_path('../../lib/version.rb', __FILE__) -puts '', "Updating #{VERSION_FILE_PATH}..." - -contents = '' -tiny_version_bumped = false -File.open(VERSION_FILE_PATH) do |f| - line = f.read - m = /TINY\s*=\s*([\d]+)/.match(line) - tiny_version_bumped = true if m - contents += m ? line.sub(m[0], m[0].sub(m[1], (m[1].to_i + 1).to_s)) : line -end - -unless tiny_version_bumped - puts "ERROR: couldn't update lib/version.rb. Is it missing the TINY constant?" +if ARGV.length < 1 + puts usage exit 1 end -puts "Saving..." +new_version = ARGV[0].split('.') +if new_version.length < 2 and !ARGV.include?('push') + puts "First argument must be a version number with at least 2 parts. Examples: 0.9.8, 0.10, 0.9.7.3" + exit 1 +end -File.open(VERSION_FILE_PATH, 'w+') do |f| - f.write(contents) +update_version_file = new_version.length >= 2 + +if update_version_file + puts '', "New Version: #{new_version.join('.')}", "Updating #{VERSION_FILE_PATH}..." + + contents = '' + tiny_version_bumped = false + File.open(VERSION_FILE_PATH) do |f| + contents = f.read + ['MAJOR', 'MINOR', 'TINY', 'PRE'].each_with_index do |name, i| + r = Regexp.new(name + '\s*=\s*(nil|[\d]+)') + m = r.match(contents) + v = new_version[i].to_i > 0 ? new_version[i] : (name == 'PRE' ? 'nil' : '0') + contents.sub!(m[0], m[0].sub(m[1], v)) if m + end + end + + puts "Saving..." + + File.open(VERSION_FILE_PATH, 'w+') do |f| + f.write(contents) + end end require File.expand_path('../../lib/version', __FILE__) @@ -37,21 +67,24 @@ require File.expand_path('../../lib/version', __FILE__) version = Discourse::VERSION::STRING puts "New version is: #{version}" -puts ARGV - -unless ARGV.include?('no-commit') - puts "Commiting..." +unless ARGV.include?('no-commit') or !update_version_file + puts "Committing..." `git add lib/version.rb` `git commit -m "Version bump to v#{version}"` sha = `git rev-parse HEAD`.strip + `git tag -d latest-release` + `git push origin :latest-release` `git tag -a v#{version} -m "version #{version}" #{sha}` + `git tag -a latest-release -m "latest release" #{sha}` +end - unless ARGV.include?('no-push') - puts "Pushing..." - `git push origin master` - `git push origin v#{version}` - end +if ARGV.include?('push') + puts "Pushing..." + + `git push origin master` + `git push origin v#{version}` + `git push origin latest-release` end puts "Done",''