Merge pull request #18150 from Homebrew/pr-count-fix

utils/github: fix `too_many_open_prs?`
This commit is contained in:
Bo Anderson 2024-08-24 20:16:54 +01:00 committed by GitHub
commit a208b1bee4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -890,46 +890,46 @@ module GitHub
odie "Cannot count PRs, HOMEBREW_NO_GITHUB_API set!" if Homebrew::EnvConfig.no_github_api? odie "Cannot count PRs, HOMEBREW_NO_GITHUB_API set!" if Homebrew::EnvConfig.no_github_api?
query = <<~EOS query = <<~EOS
query { query($after: String) {
viewer { viewer {
login login
pullRequests(first: 100, states: OPEN) { pullRequests(first: 100, states: OPEN, after: $after) {
totalCount
nodes { nodes {
headRepositoryOwner { baseRepository {
login owner {
login
}
} }
} }
pageInfo { pageInfo {
hasNextPage hasNextPage
endCursor
} }
} }
} }
} }
EOS EOS
graphql_result = API.open_graphql(query)
puts puts
github_user = graphql_result.dig("viewer", "login") homebrew_prs_count = 0
odie "Cannot count PRs, cannot get GitHub username from GraphQL API!" if github_user.blank?
# BrewTestBot can open as many PRs as it wants. API.paginate_graphql(query) do |result|
return false if github_user.casecmp("brewtestbot").zero? data = result.fetch("viewer")
github_user = data.fetch("login")
prs = graphql_result.dig("viewer", "pullRequests", "nodes") # BrewTestBot can open as many PRs as it wants.
more_graphql_data = graphql_result.dig("viewer", "pullRequests", "pageInfo", "hasNextPage") return false if github_user.casecmp("brewtestbot").zero?
return false if !more_graphql_data && prs.length < MAXIMUM_OPEN_PRS return false if data.dig("pullRequests", "totalCount") < MAXIMUM_OPEN_PRS
homebrew_prs_count = graphql_result.dig("viewer", "pullRequests", "nodes").count do |pr| homebrew_prs_count += data.dig("pullRequests", "nodes").count do |node|
pr["headRepositoryOwner"]["login"] == "Homebrew" node.dig("baseRepository", "owner", "login").casecmp?("homebrew")
end
return true if homebrew_prs_count >= MAXIMUM_OPEN_PRS
data.dig("pullRequests", "pageInfo")
end end
return true if homebrew_prs_count >= MAXIMUM_OPEN_PRS
return false unless more_graphql_data
return false if tap.nil?
url = "#{API_URL}/repos/#{tap.full_name}/issues?state=open&creator=#{github_user}" false
rest_result = API.open_rest(url)
repo_prs_count = rest_result.count { |issue_or_pr| issue_or_pr.key?("pull_request") }
repo_prs_count >= MAXIMUM_OPEN_PRS
end end
end end