github: fetch approved reviews for a pull request
This commit is contained in:
parent
b4cd99c67c
commit
90309e5f42
@ -42,6 +42,13 @@ describe GitHub do
|
||||
end
|
||||
end
|
||||
|
||||
describe "::approved_reviews", :needs_network do
|
||||
it "can get reviews for a pull request" do
|
||||
reviews = subject.approved_reviews("Homebrew", "homebrew-core", 1, commit: "deadbeef")
|
||||
expect(reviews).to eq([])
|
||||
end
|
||||
end
|
||||
|
||||
describe "::get_artifact_url", :needs_network do
|
||||
it "fails to find a nonexistant workflow" do
|
||||
expect {
|
||||
|
||||
@ -394,6 +394,52 @@ module GitHub
|
||||
open_api(uri) { |json| json.fetch("items", []) }
|
||||
end
|
||||
|
||||
def approved_reviews(user, repo, pr, commit: nil)
|
||||
url = "https://api.github.com/graphql"
|
||||
data = {
|
||||
query: <<~EOS,
|
||||
{ repository(name: "#{repo}", owner: "#{user}") {
|
||||
pullRequest(number: #{pr}) {
|
||||
reviews(states: APPROVED, first: 100) {
|
||||
nodes {
|
||||
author {
|
||||
... on User { email login name databaseId }
|
||||
... on Organization { email login name databaseId }
|
||||
}
|
||||
authorAssociation
|
||||
commit { oid }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EOS
|
||||
}
|
||||
result = open_api(url, data: data, request_method: "POST")
|
||||
raise Error, result["errors"] if result["errors"].present?
|
||||
|
||||
reviews = result["data"]["repository"]["pullRequest"]["reviews"]["nodes"]
|
||||
|
||||
reviews.map do |r|
|
||||
next if commit.present? && commit != r["commit"]["oid"]
|
||||
next unless %w[MEMBER OWNER].include? r["authorAssociation"]
|
||||
|
||||
email = if r["author"]["email"].empty?
|
||||
"#{r["author"]["databaseId"]}+#{r["author"]["login"]}@users.noreply.github.com"
|
||||
else
|
||||
r["author"]["email"]
|
||||
end
|
||||
|
||||
name = r["author"]["name"] || r["author"]["login"]
|
||||
|
||||
{
|
||||
"email" => email,
|
||||
"name" => name,
|
||||
"login" => r["author"]["login"],
|
||||
}
|
||||
end.compact
|
||||
end
|
||||
|
||||
def dispatch_event(user, repo, event, **payload)
|
||||
url = "#{API_URL}/repos/#{user}/#{repo}/dispatches"
|
||||
open_api(url, data: { event_type: event, client_payload: payload },
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user