A better script for bumping the version

This commit is contained in:
Neil Lalonde 2013-10-29 12:30:12 -04:00
parent f7d6ab579c
commit c9c7dc2002
1 changed files with 62 additions and 29 deletions

View File

@ -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:
<version>: 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",''