discourse/script/version_bump.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

93 lines
2.4 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# frozen_string_literal: true
#
# 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.
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__)
if ARGV.length < 1
puts usage
exit 1
end
new_version = ARGV[0].split('.')
if new_version.length < (2) && !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
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__)
version = Discourse::VERSION::STRING
puts "New version is: #{version}"
unless ARGV.include?('no-commit') || !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
if ARGV.include?('push')
puts "Pushing..."
`git push origin master`
`git push origin v#{version}`
`git push origin latest-release`
end
puts "Done", ''