From 0566b57b371b43c6ad9b78d536db9d08583e9433 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Wed, 15 Oct 2025 00:02:31 +0100 Subject: [PATCH] utils/github/api: print more info on rate limits --- Library/Homebrew/utils/github/api.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/utils/github/api.rb b/Library/Homebrew/utils/github/api.rb index 35bc8d0a18ebc..20e1a25070499 100644 --- a/Library/Homebrew/utils/github/api.rb +++ b/Library/Homebrew/utils/github/api.rb @@ -66,12 +66,13 @@ def initialize(github_message) # Error when the API rate limit is exceeded. class RateLimitExceededError < Error - sig { params(reset: Integer, github_message: String).void } - def initialize(reset, github_message) + sig { params(github_message: String, reset: Integer, resource: String, limit: Integer).void } + def initialize(github_message, reset:, resource:, limit:) @reset = T.let(reset, Integer) new_pat_message = ", or:\n#{GitHub.pat_blurb}" if API.credentials.blank? message = <<~EOS GitHub API Error: #{github_message} + Rate limit exceeded for #{resource} resource (#{limit} limit). Try again in #{pretty_ratelimit_reset}#{new_pat_message} EOS super(message, github_message) @@ -456,7 +457,9 @@ def self.raise_error(output, errors, http_code, headers, scopes) when "403" if meta.fetch("x-ratelimit-remaining", 1).to_i <= 0 reset = meta.fetch("x-ratelimit-reset").to_i - raise RateLimitExceededError.new(reset, message) + resource = meta.fetch("x-ratelimit-resource") + limit = meta.fetch("x-ratelimit-limit").to_i + raise RateLimitExceededError.new(message, reset:, resource:, limit:) end raise AuthenticationFailedError.new(credentials_type, message)