diff --git a/Library/Homebrew/dev-cmd/release-notes.rb b/Library/Homebrew/dev-cmd/release-notes.rb index b77b265456..cfa8b5479a 100644 --- a/Library/Homebrew/dev-cmd/release-notes.rb +++ b/Library/Homebrew/dev-cmd/release-notes.rb @@ -32,6 +32,9 @@ module Homebrew def release_notes args = release_notes_args.parse + # TODO: (2.8) Deprecate this command now that the `brew release` command exists. + # odeprecated "`brew release-notes`" + previous_tag = args.named.first if previous_tag.present? @@ -56,7 +59,7 @@ module Homebrew odie "Ref #{ref} does not exist!" end - release_notes = ReleaseNotes.generate_release_notes previous_tag, end_ref, markdown: T.must(args.markdown?) + release_notes = ReleaseNotes.generate_release_notes previous_tag, end_ref, markdown: args.markdown? $stderr.puts "Release notes between #{previous_tag} and #{end_ref}:" puts release_notes diff --git a/Library/Homebrew/release_notes.rb b/Library/Homebrew/release_notes.rb index 9ae0d6fc4a..19cdba9a17 100644 --- a/Library/Homebrew/release_notes.rb +++ b/Library/Homebrew/release_notes.rb @@ -10,7 +10,7 @@ module ReleaseNotes module_function sig { - params(start_ref: T.any(String, Version), end_ref: T.any(String, Version), markdown: T::Boolean) + params(start_ref: T.any(String, Version), end_ref: T.any(String, Version), markdown: T.nilable(T::Boolean)) .returns(String) } def generate_release_notes(start_ref, end_ref, markdown: false) diff --git a/Library/Homebrew/test/dev-cmd/release_spec.rb b/Library/Homebrew/test/dev-cmd/release_spec.rb new file mode 100644 index 0000000000..509e9a220e --- /dev/null +++ b/Library/Homebrew/test/dev-cmd/release_spec.rb @@ -0,0 +1,8 @@ +# typed: false +# frozen_string_literal: true + +require "cmd/shared_examples/args_parse" + +describe "Homebrew.release_args" do + it_behaves_like "parseable arguments" +end diff --git a/Library/Homebrew/test/release_notes_spec.rb b/Library/Homebrew/test/release_notes_spec.rb new file mode 100644 index 0000000000..a65e347b0a --- /dev/null +++ b/Library/Homebrew/test/release_notes_spec.rb @@ -0,0 +1,33 @@ +# typed: false +# frozen_string_literal: true + +require "release_notes" + +describe ReleaseNotes do + before do + HOMEBREW_REPOSITORY.cd do + system "git", "init" + system "git", "commit", "--allow-empty", "-m", "Initial commit" + system "git", "tag", "release-notes-testing" + system "git", "commit", "--allow-empty", "-m", "Merge pull request #1 from Homebrew/fix", "-m", "Do something" + system "git", "commit", "--allow-empty", "-m", "make a change" + system "git", "commit", "--allow-empty", "-m", "Merge pull request #2 from User/fix", "-m", "Do something else" + end + end + + describe ".generate_release_notes" do + it "generates release notes" do + expect(described_class.generate_release_notes("release-notes-testing", "HEAD")).to eq <<~NOTES + https://github.com/Homebrew/brew/pull/2 (@User) - Do something else + https://github.com/Homebrew/brew/pull/1 (@Homebrew) - Do something + NOTES + end + + it "generates markdown release notes" do + expect(described_class.generate_release_notes("release-notes-testing", "HEAD", markdown: true)).to eq <<~NOTES + - [Do something else](https://github.com/Homebrew/brew/pull/2) (@User) + - [Do something](https://github.com/Homebrew/brew/pull/1) (@Homebrew) + NOTES + end + end +end