2015-12-17 10:08:02 -05:00
|
|
|
FRAMEWORKS = %w( activesupport activemodel activerecord actionview actionpack activejob actionmailer actioncable railties )
|
2010-11-16 18:42:14 -05:00
|
|
|
|
|
|
|
root = File.expand_path('../../', __FILE__)
|
|
|
|
version = File.read("#{root}/RAILS_VERSION").strip
|
2010-11-16 19:03:57 -05:00
|
|
|
tag = "v#{version}"
|
2010-11-16 18:42:14 -05:00
|
|
|
|
2011-08-04 17:29:37 -04:00
|
|
|
directory "pkg"
|
2010-11-16 18:42:14 -05:00
|
|
|
|
|
|
|
(FRAMEWORKS + ['rails']).each do |framework|
|
|
|
|
namespace framework do
|
2011-08-04 17:29:37 -04:00
|
|
|
gem = "pkg/#{framework}-#{version}.gem"
|
2010-11-16 18:42:14 -05:00
|
|
|
gemspec = "#{framework}.gemspec"
|
|
|
|
|
|
|
|
task :clean do
|
|
|
|
rm_f gem
|
|
|
|
end
|
|
|
|
|
2014-03-25 14:35:06 -04:00
|
|
|
task :update_versions do
|
2010-11-16 18:42:14 -05:00
|
|
|
glob = root.dup
|
2014-03-25 14:35:06 -04:00
|
|
|
if framework == "rails"
|
|
|
|
glob << "/version.rb"
|
|
|
|
else
|
|
|
|
glob << "/#{framework}/lib/*"
|
|
|
|
glob << "/gem_version.rb"
|
|
|
|
end
|
2010-11-16 18:42:14 -05:00
|
|
|
|
|
|
|
file = Dir[glob].first
|
|
|
|
ruby = File.read(file)
|
|
|
|
|
2016-01-25 13:22:03 -05:00
|
|
|
major, minor, tiny, pre = version.split('.', 4)
|
2014-03-25 14:35:06 -04:00
|
|
|
pre = pre ? pre.inspect : "nil"
|
2013-04-01 17:26:34 -04:00
|
|
|
|
2014-03-25 14:35:06 -04:00
|
|
|
ruby.gsub!(/^(\s*)MAJOR(\s*)= .*?$/, "\\1MAJOR = #{major}")
|
|
|
|
raise "Could not insert MAJOR in #{file}" unless $1
|
2013-04-01 17:26:34 -04:00
|
|
|
|
2014-03-25 14:35:06 -04:00
|
|
|
ruby.gsub!(/^(\s*)MINOR(\s*)= .*?$/, "\\1MINOR = #{minor}")
|
|
|
|
raise "Could not insert MINOR in #{file}" unless $1
|
2013-04-01 17:26:34 -04:00
|
|
|
|
2014-03-25 14:35:06 -04:00
|
|
|
ruby.gsub!(/^(\s*)TINY(\s*)= .*?$/, "\\1TINY = #{tiny}")
|
|
|
|
raise "Could not insert TINY in #{file}" unless $1
|
2013-04-01 17:26:34 -04:00
|
|
|
|
2014-03-25 14:35:06 -04:00
|
|
|
ruby.gsub!(/^(\s*)PRE(\s*)= .*?$/, "\\1PRE = #{pre}")
|
|
|
|
raise "Could not insert PRE in #{file}" unless $1
|
2010-11-16 18:42:14 -05:00
|
|
|
|
|
|
|
File.open(file, 'w') { |f| f.write ruby }
|
2016-07-01 10:47:11 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
task gem => %w(update_versions pkg) do
|
|
|
|
cmd = ""
|
|
|
|
cmd << "cd #{framework} && " unless framework == "rails"
|
|
|
|
cmd << "bundle exec rake package && " unless framework == "rails"
|
|
|
|
cmd << "gem build #{gemspec} && mv #{framework}-#{version}.gem #{root}/pkg/"
|
|
|
|
sh cmd
|
|
|
|
end
|
|
|
|
|
|
|
|
task :build => [:clean, gem]
|
|
|
|
task :install => :build do
|
|
|
|
sh "gem install --pre #{gem}"
|
|
|
|
end
|
|
|
|
|
|
|
|
task :push => :build do
|
|
|
|
sh "gem push #{gem}"
|
2016-05-07 10:41:23 -04:00
|
|
|
|
2016-07-01 10:47:11 -04:00
|
|
|
# When running the release task we usually run build first to check that the gem works properly.
|
|
|
|
# NPM will refuse to publish or rebuild the gem if the version is changed when the Rails gem
|
|
|
|
# versions are changed. This then causes the gem push to fail. Because of this we need to update
|
|
|
|
# the version and publish at the same time.
|
2016-05-07 10:41:23 -04:00
|
|
|
if File.exist?("#{framework}/package.json")
|
|
|
|
Dir.chdir("#{framework}") do
|
|
|
|
# This "npm-ifies" the current version
|
|
|
|
# With npm, versions such as "5.0.0.rc1" or "5.0.0.beta1.1" are not compliant with its
|
|
|
|
# versioning system, so they must be transformed to "5.0.0-rc1" and "5.0.0-beta1-1" respectively.
|
|
|
|
|
|
|
|
# In essence, the code below runs through all "."s that appear in the version,
|
|
|
|
# and checks to see if their index in the version string is greater than or equal to 2,
|
|
|
|
# and if so, it will change the "." to a "-".
|
|
|
|
|
|
|
|
# Sample version transformations:
|
|
|
|
# irb(main):001:0> version = "5.0.1.1"
|
|
|
|
# => "5.0.1.1"
|
|
|
|
# irb(main):002:0> version.gsub(/\./).with_index { |s, i| i >= 2 ? '-' : s }
|
|
|
|
# => "5.0.1-1"
|
|
|
|
# irb(main):003:0> version = "5.0.0.rc1"
|
|
|
|
# => "5.0.0.rc1"
|
|
|
|
# irb(main):004:0> version.gsub(/\./).with_index { |s, i| i >= 2 ? '-' : s }
|
|
|
|
# => "5.0.0-rc1"
|
|
|
|
version = version.gsub(/\./).with_index { |s, i| i >= 2 ? '-' : s }
|
|
|
|
|
|
|
|
# Check if npm is installed, and raise an error if not
|
|
|
|
if sh 'which npm'
|
|
|
|
sh "npm version #{version} --no-git-tag-version"
|
2016-07-01 10:47:11 -04:00
|
|
|
sh "npm publish"
|
2016-05-07 10:41:23 -04:00
|
|
|
else
|
|
|
|
raise 'You must have npm installed to release Rails.'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2010-11-16 18:42:14 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2011-04-18 17:43:24 -04:00
|
|
|
namespace :changelog do
|
2015-10-30 15:33:31 -04:00
|
|
|
task :header do
|
|
|
|
(FRAMEWORKS + ['guides']).each do |fw|
|
|
|
|
require 'date'
|
|
|
|
fname = File.join fw, 'CHANGELOG.md'
|
|
|
|
|
|
|
|
header = "## Rails #{version} (#{Date.today.strftime('%B %d, %Y')}) ##\n\n* No changes.\n\n\n"
|
|
|
|
contents = header + File.read(fname)
|
|
|
|
File.open(fname, 'wb') { |f| f.write contents }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2011-04-18 17:43:24 -04:00
|
|
|
task :release_date do
|
2014-03-31 14:45:34 -04:00
|
|
|
(FRAMEWORKS + ['guides']).each do |fw|
|
2011-04-18 17:43:24 -04:00
|
|
|
require 'date'
|
2015-10-30 15:33:31 -04:00
|
|
|
replace = "## Rails #{version} (#{Date.today.strftime('%B %d, %Y')}) ##\n"
|
2011-11-08 02:26:51 -05:00
|
|
|
fname = File.join fw, 'CHANGELOG.md'
|
2011-04-18 17:43:24 -04:00
|
|
|
|
2015-10-30 15:33:31 -04:00
|
|
|
contents = File.read(fname).sub(/^(## Rails .*)\n/, replace)
|
2011-04-18 17:43:24 -04:00
|
|
|
File.open(fname, 'wb') { |f| f.write contents }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
task :release_summary do
|
2014-03-31 14:45:34 -04:00
|
|
|
(FRAMEWORKS + ['guides']).each do |fw|
|
2011-04-18 17:43:24 -04:00
|
|
|
puts "## #{fw}"
|
2011-11-08 02:26:51 -05:00
|
|
|
fname = File.join fw, 'CHANGELOG.md'
|
2011-04-18 17:43:24 -04:00
|
|
|
contents = File.readlines fname
|
|
|
|
contents.shift
|
|
|
|
changes = []
|
|
|
|
changes << contents.shift until contents.first =~ /^\*Rails \d+\.\d+\.\d+/
|
|
|
|
puts changes.reject { |change| change.strip.empty? }.join
|
|
|
|
puts
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-11-16 19:30:53 -05:00
|
|
|
namespace :all do
|
2014-03-25 14:35:06 -04:00
|
|
|
task :build => FRAMEWORKS.map { |f| "#{f}:build" } + ['rails:build']
|
|
|
|
task :update_versions => FRAMEWORKS.map { |f| "#{f}:update_versions" } + ['rails:update_versions']
|
|
|
|
task :install => FRAMEWORKS.map { |f| "#{f}:install" } + ['rails:install']
|
|
|
|
task :push => FRAMEWORKS.map { |f| "#{f}:push" } + ['rails:push']
|
2010-11-16 19:30:53 -05:00
|
|
|
|
2010-11-16 19:03:57 -05:00
|
|
|
task :ensure_clean_state do
|
2015-11-12 12:00:05 -05:00
|
|
|
unless `git status -s | grep -v 'RAILS_VERSION\\|CHANGELOG\\|Gemfile.lock'`.strip.empty?
|
2010-11-16 19:03:57 -05:00
|
|
|
abort "[ABORTING] `git status` reports a dirty tree. Make sure all changes are committed"
|
|
|
|
end
|
|
|
|
|
2014-11-19 15:30:06 -05:00
|
|
|
unless ENV['SKIP_TAG'] || `git tag | grep '^#{tag}$'`.strip.empty?
|
2010-11-16 19:03:57 -05:00
|
|
|
abort "[ABORTING] `git tag` shows that #{tag} already exists. Has this version already\n"\
|
|
|
|
" been released? Git tagging can be skipped by setting SKIP_TAG=1"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-11-04 21:52:35 -05:00
|
|
|
task :bundle do
|
|
|
|
sh 'bundle check'
|
|
|
|
end
|
|
|
|
|
2010-11-16 19:14:53 -05:00
|
|
|
task :commit do
|
2011-08-04 17:29:37 -04:00
|
|
|
File.open('pkg/commit_message.txt', 'w') do |f|
|
2010-11-16 19:14:53 -05:00
|
|
|
f.puts "# Preparing for #{version} release\n"
|
|
|
|
f.puts
|
|
|
|
f.puts "# UNCOMMENT THE LINE ABOVE TO APPROVE THIS COMMIT"
|
|
|
|
end
|
|
|
|
|
2011-08-04 17:29:37 -04:00
|
|
|
sh "git add . && git commit --verbose --template=pkg/commit_message.txt"
|
|
|
|
rm_f "pkg/commit_message.txt"
|
2010-11-16 19:14:53 -05:00
|
|
|
end
|
|
|
|
|
2010-11-16 18:42:14 -05:00
|
|
|
task :tag do
|
2016-05-06 17:23:37 -04:00
|
|
|
sh "git tag -s -m '#{tag} release' #{tag}"
|
2011-11-14 11:51:02 -05:00
|
|
|
sh "git push --tags"
|
2010-11-16 18:42:14 -05:00
|
|
|
end
|
2010-11-16 19:14:53 -05:00
|
|
|
|
2015-12-18 11:56:26 -05:00
|
|
|
task :prep_release => %w(ensure_clean_state build)
|
|
|
|
|
2015-11-04 21:52:35 -05:00
|
|
|
task :release => %w(ensure_clean_state build bundle commit tag push)
|
2010-11-16 18:42:14 -05:00
|
|
|
end
|