Permalink
Browse files

Support multiple versions in release announcement.

So releasing 5.1 and 5.0 together won't require manual copy
and paste.
  • Loading branch information...
kaspth committed Jul 22, 2017
1 parent 1e7acf8 commit 973c3211c609f50031afdec43b885529abffb4c6
Showing with 67 additions and 51 deletions.
  1. +29 −51 tasks/release.rb
  2. +38 −0 tasks/release_announcement_draft.erb
View
@@ -200,69 +200,47 @@
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 <<MSG
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.
MSG
end
puts <<MSG
## CHANGES since #{previous_version}
To view the changes for each gem, please read the changelogs on GitHub:
MSG
FRAMEWORKS.sort.each do |framework|
puts "* [#{FRAMEWORK_NAMES[framework]} CHANGELOG](https://github.com/rails/rails/blob/v#{version}/#{framework}/CHANGELOG.md)"
end
puts <<MSG
*Full listing*
To see the full list of changes, [check out all the commits on
GitHub](https://github.com/rails/rails/compare/v#{previous_version}...v#{version}).
## 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.
Here are the checksums for #{version}:
```
#{sums}
```
As always, huge thanks to the many contributors who helped with this release.
MSG
require "erb"
template = File.read("../tasks/release_announcement_draft.erb")
puts ERB.new(template, nil, "<>").result(binding)
end
end
@@ -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.

0 comments on commit 973c321

Please sign in to comment.