From fb5b2ba186c2a7741dd13d75e836762a90aaea7a Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Tue, 16 Nov 2010 15:42:14 -0800 Subject: Add a new file containing tasks related to releasing --- tasks/release.rb | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 tasks/release.rb (limited to 'tasks/release.rb') diff --git a/tasks/release.rb b/tasks/release.rb new file mode 100644 index 0000000000..a136ff4b6e --- /dev/null +++ b/tasks/release.rb @@ -0,0 +1,85 @@ +FRAMEWORKS = %w( activesupport activemodel activerecord activeresource actionpack actionmailer railties ) + +root = File.expand_path('../../', __FILE__) +version = File.read("#{root}/RAILS_VERSION").strip + +directory "dist" + +(FRAMEWORKS + ['rails']).each do |framework| + namespace framework do + gem = "dist/#{framework}-#{version}.gem" + gemspec = "#{framework}.gemspec" + + task :clean do + rm_f gem + end + + task :update_version_rb do + glob = root.dup + glob << "/#{framework}/lib/*" unless framework == "rails" + glob << "/version.rb" + + file = Dir[glob].first + ruby = File.read(file) + + major, minor, tiny, pre = version.split('.') + pre ||= "nil" + + ruby.gsub! /^(\s*)MAJOR = .*?$/, "\\1MAJOR = #{major}" + raise "Could not insert MAJOR in #{file}" unless $1 + + ruby.gsub! /^(\s*)MINOR = .*?$/, "\\1MINOR = #{minor}" + raise "Could not insert MINOR in #{file}" unless $1 + + ruby.gsub! /^(\s*)TINY = .*?$/, "\\1TINY = #{tiny}" + raise "Could not insert TINY in #{file}" unless $1 + + ruby.gsub! /^(\s*)PRE = .*?$/, "\\1PRE = #{pre}" + raise "Could not insert PRE in #{file}" unless $1 + + File.open(file, 'w') { |f| f.write ruby } + end + + task gem => %w(update_version_rb dist) do + cmd = "" + cmd << "cd #{framework} && " unless framework == "rails" + cmd << "gem build #{gemspec} && mv #{framework}-#{version}.gem #{root}/dist/" + sh cmd + end + + task :build => [:clean, gem] + task :install => :build do + sh "gem install #{gem}" + end + + task :push => :build do + sh "gem push #{gem}" + end + end +end + +namespace :git do + task :tag do + sh "git tag v#{version}" + end +end + +namespace :all do + task :build => FRAMEWORKS.map { |f| "#{f}:build" } + ['rails:build'] + task :install => FRAMEWORKS.map { |f| "#{f}:install" } + ['rails:install'] + task :push => FRAMEWORKS.map { |f| "#{f}:push" } + ['rails:push'] +end + +__END__ +version = ARGV.pop + +%w( activesupport activemodel activerecord activeresource actionpack actionmailer railties ).each do |framework| + puts "Building and pushing #{framework}..." + `cd #{framework} && gem build #{framework}.gemspec && gem push #{framework}-#{version}.gem && rm #{framework}-#{version}.gem` +end + +puts "Building and pushing Rails..." +`gem build rails.gemspec` +`gem push rails-#{version}.gem` +`rm rails-#{version}.gem` + -- cgit v1.2.3 From 6b3f521b806614a073e4418307b56241fe287940 Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Tue, 16 Nov 2010 15:45:31 -0800 Subject: Remove some useless comments from the release task --- tasks/release.rb | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'tasks/release.rb') diff --git a/tasks/release.rb b/tasks/release.rb index a136ff4b6e..4c038f51f5 100644 --- a/tasks/release.rb +++ b/tasks/release.rb @@ -69,17 +69,3 @@ namespace :all do task :install => FRAMEWORKS.map { |f| "#{f}:install" } + ['rails:install'] task :push => FRAMEWORKS.map { |f| "#{f}:push" } + ['rails:push'] end - -__END__ -version = ARGV.pop - -%w( activesupport activemodel activerecord activeresource actionpack actionmailer railties ).each do |framework| - puts "Building and pushing #{framework}..." - `cd #{framework} && gem build #{framework}.gemspec && gem push #{framework}-#{version}.gem && rm #{framework}-#{version}.gem` -end - -puts "Building and pushing Rails..." -`gem build rails.gemspec` -`gem push rails-#{version}.gem` -`rm rails-#{version}.gem` - -- cgit v1.2.3 From dab1d8dcc6030a5c1f5e88744d3c40d771be23a3 Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Tue, 16 Nov 2010 16:03:57 -0800 Subject: Add some sanity checks to the gem push script --- tasks/release.rb | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'tasks/release.rb') diff --git a/tasks/release.rb b/tasks/release.rb index 4c038f51f5..8073965a50 100644 --- a/tasks/release.rb +++ b/tasks/release.rb @@ -2,6 +2,7 @@ FRAMEWORKS = %w( activesupport activemodel activerecord activeresource actionpac root = File.expand_path('../../', __FILE__) version = File.read("#{root}/RAILS_VERSION").strip +tag = "v#{version}" directory "dist" @@ -52,15 +53,28 @@ directory "dist" sh "gem install #{gem}" end + task :prep_release => [:ensure_clean_state, :build] + task :push => :build do sh "gem push #{gem}" end end end -namespace :git do +namespace :release do + task :ensure_clean_state do + unless `git status -s | grep -v RAILS_VERSION`.strip.empty? + abort "[ABORTING] `git status` reports a dirty tree. Make sure all changes are committed" + end + + unless ENV['SKIP_TAG'] || `git tag | grep #{tag}`.strip.empty? + 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 + task :tag do - sh "git tag v#{version}" + sh "git tag #{tag}" end end -- cgit v1.2.3 From 482790db6ce85b79a74b4f0f837fc848613daa4a Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Tue, 16 Nov 2010 16:14:53 -0800 Subject: Add a task to commit the changes --- tasks/release.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'tasks/release.rb') diff --git a/tasks/release.rb b/tasks/release.rb index 8073965a50..db82c6a563 100644 --- a/tasks/release.rb +++ b/tasks/release.rb @@ -73,9 +73,22 @@ namespace :release do end end + task :commit do + File.open('dist/commit_message.txt', 'w') do |f| + f.puts "# Preparing for #{version} release\n" + f.puts + f.puts "# UNCOMMENT THE LINE ABOVE TO APPROVE THIS COMMIT" + end + + sh "git add . && git commit --verbose --template=dist/commit_message.txt" + rm_f "dist/commit_message.txt" + end + task :tag do sh "git tag #{tag}" end + + task :full => %w(ensure_clean_state all:build commit) end namespace :all do -- cgit v1.2.3 From df5fe4d83c068bc2b87404d7e98ea7366d1fb000 Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Tue, 16 Nov 2010 16:28:53 -0800 Subject: Add a task to tag the commit and push --- tasks/release.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tasks/release.rb') diff --git a/tasks/release.rb b/tasks/release.rb index db82c6a563..c520b93111 100644 --- a/tasks/release.rb +++ b/tasks/release.rb @@ -88,7 +88,7 @@ namespace :release do sh "git tag #{tag}" end - task :full => %w(ensure_clean_state all:build commit) + task :full => %w(ensure_clean_state all:build commit tag all:push) end namespace :all do -- cgit v1.2.3 From c3dd1238c50424231bac682f08b43fc4a318a148 Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Tue, 16 Nov 2010 16:30:53 -0800 Subject: Small cleanup of the release task --- tasks/release.rb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'tasks/release.rb') diff --git a/tasks/release.rb b/tasks/release.rb index c520b93111..67b467d041 100644 --- a/tasks/release.rb +++ b/tasks/release.rb @@ -61,7 +61,11 @@ directory "dist" end end -namespace :release do +namespace :all do + task :build => FRAMEWORKS.map { |f| "#{f}:build" } + ['rails:build'] + task :install => FRAMEWORKS.map { |f| "#{f}:install" } + ['rails:install'] + task :push => FRAMEWORKS.map { |f| "#{f}:push" } + ['rails:push'] + task :ensure_clean_state do unless `git status -s | grep -v RAILS_VERSION`.strip.empty? abort "[ABORTING] `git status` reports a dirty tree. Make sure all changes are committed" @@ -88,11 +92,5 @@ namespace :release do sh "git tag #{tag}" end - task :full => %w(ensure_clean_state all:build commit tag all:push) -end - -namespace :all do - task :build => FRAMEWORKS.map { |f| "#{f}:build" } + ['rails:build'] - task :install => FRAMEWORKS.map { |f| "#{f}:install" } + ['rails:install'] - task :push => FRAMEWORKS.map { |f| "#{f}:push" } + ['rails:push'] + task :release => %w(ensure_clean_state build commit tag push) end -- cgit v1.2.3 From 1deeaf5495036dd7541e2085e8311c57e7130f0a Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Tue, 16 Nov 2010 17:22:29 -0800 Subject: The PRE part of the rails version is a string or nil --- tasks/release.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tasks/release.rb') diff --git a/tasks/release.rb b/tasks/release.rb index 67b467d041..a605fed160 100644 --- a/tasks/release.rb +++ b/tasks/release.rb @@ -24,7 +24,7 @@ directory "dist" ruby = File.read(file) major, minor, tiny, pre = version.split('.') - pre ||= "nil" + pre = pre ? pre.inspect : "nil" ruby.gsub! /^(\s*)MAJOR = .*?$/, "\\1MAJOR = #{major}" raise "Could not insert MAJOR in #{file}" unless $1 -- cgit v1.2.3