Rakefile in rbs-3.0.0.dev.1 vs Rakefile in rbs-3.0.0.dev.2

- old
+ new

@@ -67,13 +67,21 @@ FileList["test/stdlib/**/*_test.rb"].each do |test| task test => :compile do sh "#{ruby} -Ilib #{bin}/test_runner.rb #{test}" end - task stdlib_test: test end +task :stdlib_test do + test_files = FileList["test/stdlib/**/*_test.rb"].reject do |path| + path =~ %r{Ractor} + end + sh "#{ruby} -Ilib #{bin}/test_runner.rb #{test_files.join(' ')}" + # TODO: Ractor tests need to be run in a separate process + sh "#{ruby} -Ilib #{bin}/test_runner.rb test/stdlib/Ractor_test.rb" +end + task :rubocop do sh "rubocop --parallel" end namespace :generate do @@ -222,6 +230,72 @@ task :test_generate_stdlib do sh "RBS_GENERATE_TEST_PATH=/tmp/Array_test.rb rake 'generate:stdlib_test[Array]'" sh "ruby -c /tmp/Array_test.rb" sh "RBS_GENERATE_TEST_PATH=/tmp/Thread_Mutex_test.rb rake 'generate:stdlib_test[Thread::Mutex]'" sh "ruby -c /tmp/Thread_Mutex_test.rb" +end + +Rake::Task[:release].enhance do + Rake::Task[:"release:note"].invoke +end + +namespace :release do + desc "Explain the post-release steps automatically" + task :note do + version = Gem::Version.new(RBS::VERSION) + major, minor, patch, *_ = RBS::VERSION.split(".") + major = major.to_i + minor = minor.to_i + patch = patch.to_i + + puts "🎉🎉🎉🎉 Congratulations for **#{version}** release! 🎉🎉🎉🎉" + puts + puts "There are a few things left to complete the release. 💪" + puts + + if patch == 0 || version.prerelease? + puts "* [ ] Update release note: https://github.com/ruby/rbs/wiki/Release-Note-#{major}.#{minor}" + end + + if patch == 0 && !version.prerelease? + puts "* [ ] Delete `RBS XYZ is the latest version of...` from release note: https://github.com/ruby/rbs/wiki/Release-Note-#{major}.#{minor}" + end + + puts "* [ ] Publish a release at GitHub" + puts "* [ ] Make some announcements on Twitter/Mustdon/Slack/???" + + puts + puts + + puts "✏️ Making a draft release on GitHub..." + + content = File.read(File.join(__dir__, "CHANGELOG.md")) + changelog = content.scan(/^## \d.*?(?=^## \d)/m)[0] + changelog = changelog.sub(/^.*\n^.*\n/, "").rstrip + + notes = <<NOTES +[Release note](https://github.com/ruby/rbs/wiki/Release-Note-#{major}.#{minor}) + +#{changelog} +NOTES + + command = [ + "gh", + "release", + "create", + "--draft", + "v#{RBS::VERSION}", + "--title=#{RBS::VERSION}", + "--notes=#{notes}" + ] + + if version.prerelease? + command << "--prerelease" + end + + require "open3" + output, status = Open3.capture2(*command) + if status.success? + puts " >> Done! Open #{output.chomp} and publish the release!" + end + end end