diff options
author | Xavier Noria <fxn@hashref.com> | 2010-11-21 03:30:06 +0100 |
---|---|---|
committer | Xavier Noria <fxn@hashref.com> | 2010-11-21 03:30:06 +0100 |
commit | 6af08ab6d835d1c2aa8648a0d3a4a86e678c3f52 (patch) | |
tree | 96bd668692b62d3829322232877b70c9011ce446 /tasks/release.rb | |
parent | f326221c701e4f9d991e3eadcc793a73795fb218 (diff) | |
parent | 7c51d1fcf9dc504c2dfd6e7184bbe8186f09819d (diff) | |
download | rails-6af08ab6d835d1c2aa8648a0d3a4a86e678c3f52.tar.gz rails-6af08ab6d835d1c2aa8648a0d3a4a86e678c3f52.tar.bz2 rails-6af08ab6d835d1c2aa8648a0d3a4a86e678c3f52.zip |
Merge branch 'master' of git://github.com/rails/rails
Diffstat (limited to 'tasks/release.rb')
-rw-r--r-- | tasks/release.rb | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/tasks/release.rb b/tasks/release.rb new file mode 100644 index 0000000000..a605fed160 --- /dev/null +++ b/tasks/release.rb @@ -0,0 +1,96 @@ +FRAMEWORKS = %w( activesupport activemodel activerecord activeresource actionpack actionmailer railties ) + +root = File.expand_path('../../', __FILE__) +version = File.read("#{root}/RAILS_VERSION").strip +tag = "v#{version}" + +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 = pre ? pre.inspect : "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 :prep_release => [:ensure_clean_state, :build] + + task :push => :build do + sh "gem push #{gem}" + end + 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'] + + 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 :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 :release => %w(ensure_clean_state build commit tag push) +end |