brew/Library/Homebrew/dev-cmd/release-notes.rb

65 lines
2.1 KiB
Ruby
Raw Normal View History

2020-11-25 17:03:23 +01:00
# typed: true
# frozen_string_literal: true
2019-04-17 18:25:08 +09:00
require "cli/parser"
2021-01-21 17:43:52 -05:00
require "release_notes"
module Homebrew
2020-10-20 12:03:48 +02:00
extend T::Sig
module_function
2020-10-20 12:03:48 +02:00
sig { returns(CLI::Parser) }
def release_notes_args
Homebrew::CLI::Parser.new do
usage_banner "`release-notes` [<options>] [<previous_tag>] [<end_ref>]"
description <<~EOS
Print the merged pull requests on Homebrew/brew between two Git refs.
2018-09-28 21:39:52 +05:30
If no <previous_tag> is provided it defaults to the latest tag.
If no <end_ref> is provided it defaults to `origin/master`.
If `--markdown` and a <previous_tag> are passed, an extra line containing
a link to the Homebrew blog will be adding to the output. Additionally,
a warning will be shown if the latest minor release was less than one month ago.
2018-09-28 21:39:52 +05:30
EOS
switch "--markdown",
2019-04-30 08:44:35 +01:00
description: "Print as a Markdown list."
2020-11-12 10:40:41 -05:00
2021-01-10 14:26:40 -05:00
named_args max: 2
end
end
2018-09-08 22:21:04 +05:30
def release_notes
2020-07-30 18:40:10 +02:00
args = release_notes_args.parse
previous_tag = args.named.first
if previous_tag.present?
most_recent_major_minor_tag = previous_tag.sub(/\d+$/, "0")
one_month_ago = Date.today << 1
previous_tag_date = Date.parse Utils.popen_read(
"git", "-C", HOMEBREW_REPOSITORY, "log", "-1", "--format=%aI", most_recent_major_minor_tag
)
opoo "The latest major/minor release was less than one month ago." if previous_tag_date > one_month_ago
end
previous_tag ||= Utils.popen_read(
"git", "-C", HOMEBREW_REPOSITORY, "tag", "--list", "--sort=-version:refname"
).lines.first.chomp
odie "Could not find any previous tags!" unless previous_tag
end_ref = args.named.second || "origin/master"
[previous_tag, end_ref].each do |ref|
next if quiet_system "git", "-C", HOMEBREW_REPOSITORY, "rev-parse", "--verify", "--quiet", ref
2018-09-17 02:45:00 +02:00
odie "Ref #{ref} does not exist!"
end
2021-01-21 17:43:52 -05:00
release_notes = ReleaseNotes.generate_release_notes previous_tag, end_ref, markdown: T.must(args.markdown?)
$stderr.puts "Release notes between #{previous_tag} and #{end_ref}:"
2021-01-21 17:43:52 -05:00
puts release_notes
end
end