From 973c3211c609f50031afdec43b885529abffb4c6 Mon Sep 17 00:00:00 2001 From: Kasper Timm Hansen Date: Sat, 22 Jul 2017 19:10:17 +0200 Subject: Support multiple versions in release announcement. So releasing 5.1 and 5.0 together won't require manual copy and paste. --- tasks/release.rb | 80 +++++++++++++----------------------- tasks/release_announcement_draft.erb | 38 +++++++++++++++++ 2 files changed, 67 insertions(+), 51 deletions(-) create mode 100644 tasks/release_announcement_draft.erb (limited to 'tasks') diff --git a/tasks/release.rb b/tasks/release.rb index ae16e6b80c..ac13612b91 100644 --- a/tasks/release.rb +++ b/tasks/release.rb @@ -200,69 +200,47 @@ namespace :all do task release: %w(prep_release tag push) end -task :announce do - Dir.chdir("pkg/") do - if gem_version.segments[2] == 0 || gem_version.segments[3].is_a?(Integer) - # Not major releases, and not security releases - raise "Only valid for patch releases" +module Announcement + class Version + def initialize(version) + @version, @gem_version = version, Gem::Version.new(version) end - sums = "$ shasum -a 256 *-#{version}.gem\n" + `shasum -a 256 *-#{version}.gem` + def to_s + @version + end - puts "Hi everyone," - puts + def previous + @gem_version.segments[0, 3].tap { |v| v[2] -= 1 }.join(".") + end - puts "I am happy to announce that Rails #{version} has been released." - puts + def major_or_security? + @gem_version.segments[2].zero? || @gem_version.segments[3].is_a?(Integer) + end + + def rc? + @version =~ /rc/ + end + end +end + +task :announce do + Dir.chdir("pkg/") do + versions = ENV["VERSIONS"] ? ENV["VERSIONS"].split(",") : [ version ] + versions = versions.sort.map { |v| Announcement::Version.new(v) } - previous_version = gem_version.segments[0, 3] - previous_version[2] -= 1 - previous_version = previous_version.join(".") + raise "Only valid for patch releases" if versions.any?(&:major_or_security?) - if version =~ /rc/ + if versions.any?(&:rc?) require "date" future_date = Date.today + 5 future_date += 1 while future_date.saturday? || future_date.sunday? github_user = `git config github.user`.chomp - - puts <").result(binding) end end diff --git a/tasks/release_announcement_draft.erb b/tasks/release_announcement_draft.erb new file mode 100644 index 0000000000..65d121fd4b --- /dev/null +++ b/tasks/release_announcement_draft.erb @@ -0,0 +1,38 @@ +Hi everyone, + +I am happy to announce that Rails <%= versions.join(" and ") %> <%= versions.size > 1 ? "have" : "has" %> been released. + +<% if future_date %> +If no regressions are found, expect the final release on <%= future_date.strftime("%A, %B %-d, %Y") %>. +If you find one, please open an [issue on GitHub](https://github.com/rails/rails/issues/new) +<%= "and mention me (@github_user}) on it, " unless github_user.empty? %>so that we can fix it before the final release. +<% end %> +<% versions.each do |version| %> + +## CHANGES since <%= version.previous %> + +To view the changes for each gem, please read the changelogs on GitHub: + <% FRAMEWORKS.sort.each do |framework| %> +<%= "* [#{FRAMEWORK_NAMES[framework]} CHANGELOG](https://github.com/rails/rails/blob/v#{version}/#{framework}/CHANGELOG.md)" %> + <% end %> + +*Full listing* + +To see the full list of changes, [check out all the commits on +GitHub](https://github.com/rails/rails/compare/v<%= "#{version.previous}...v#{version}" %>). + <% end %> +## SHA-256 + +If you'd like to verify that your gem is the same as the one I've uploaded, +please use these SHA-256 hashes. + +<% versions.each do |version| %> +Here are the checksums for <%= version %>: + +``` +$ shasum -a 256 *-<%= version %>.gem +<%= `shasum -a 256 *-#{version}.gem` %> +``` + +<% end %> +As always, huge thanks to the many contributors who helped with this release. -- cgit v1.2.3