diff --git a/Library/Homebrew/test/utils/github_spec.rb b/Library/Homebrew/test/utils/github_spec.rb index a132894f92..320704e196 100644 --- a/Library/Homebrew/test/utils/github_spec.rb +++ b/Library/Homebrew/test/utils/github_spec.rb @@ -31,9 +31,12 @@ describe GitHub do describe "::search_issues", :needs_network do it "queries GitHub issues with the passed parameters" do - results = subject.search_issues("brew search", repo: "Homebrew/brew", author: "avetamine", is: "closed") + results = subject.search_issues("brew search", + repo: "Homebrew/legacy-homebrew", + author: "MikeMcQuaid", + is: "closed") expect(results).not_to be_empty - expect(results.last["title"]).to eq("brew search : 422 Unprocessable Entity") + expect(results.first["title"]).to eq("Shall we run `brew update` automatically?") end end end diff --git a/Library/Homebrew/utils/github.rb b/Library/Homebrew/utils/github.rb index cbfe76a218..ba2abe7543 100644 --- a/Library/Homebrew/utils/github.rb +++ b/Library/Homebrew/utils/github.rb @@ -45,7 +45,7 @@ module GitHub class AuthenticationFailedError < Error def initialize(github_message) @github_message = github_message - message = "GitHub #{github_message}\n" + message = "GitHub #{github_message}:" if ENV["HOMEBREW_GITHUB_API_TOKEN"] message << <<~EOS HOMEBREW_GITHUB_API_TOKEN may be invalid or expired; check: @@ -65,6 +65,18 @@ module GitHub end end + class ValidationFailedError < Error + def initialize(github_message, errors) + @github_message = if errors.empty? + github_message + else + "#{github_message}: #{errors}" + end + + super(@github_message) + end + end + def api_credentials @api_credentials ||= begin if ENV["HOMEBREW_GITHUB_API_TOKEN"] @@ -231,6 +243,9 @@ module GitHub raise AuthenticationFailedError, message when "404" raise HTTPNotFoundError, message + when "422" + errors = json&.[]("errors") || [] + raise ValidationFailedError.new(message, errors) else raise Error, message end