browser_review_gate 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/browser_review_gate/gate.rb +26 -7
- data/lib/browser_review_gate/github.rb +5 -0
- data/lib/browser_review_gate/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 71673ce11f3c85d5c6c2e825a4ce6511248c012268ba162cf1327a563bcb0cd9
|
|
4
|
+
data.tar.gz: 63f4074d54f198c7b2eac7163ed5bb3d5751d71609510eca6c4804db3fae4c8e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 26ff1bd4884a04a4523980e3ab60731089a81c50905e880d77fe82bf8a9d2ec924ef523737dbf0a6a92e0a62af23a950e8d4be652c5fcced50530ea0f08eb68a
|
|
7
|
+
data.tar.gz: 5688632755e3106a0f97b240b9012d2d70fc5de9b83b286e95e1f206d639ce476c35bf719a2a4f83c190f84ce03e2d1ba6e9ac621d971528465c09f5a10a5f27
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
- A reviewer who approved or asked for changes on the latest commit while their request was paused
|
|
6
|
+
is not asked again once the browser run is published. The notice names them instead. Someone whose
|
|
7
|
+
review is on an older commit, or who only commented, is still asked again.
|
|
8
|
+
|
|
3
9
|
## 0.2.0
|
|
4
10
|
|
|
5
11
|
Re-run `browser-review-gate install` after updating: the workflow and the playbook change.
|
|
@@ -81,20 +81,39 @@ module BrowserReviewGate
|
|
|
81
81
|
@log.puts "Took back reviewer requests until browser verification is available."
|
|
82
82
|
end
|
|
83
83
|
|
|
84
|
-
# Asks the people whose requests were taken back, now that review may proceed.
|
|
84
|
+
# Asks the people whose requests were taken back, now that review may proceed. Someone who
|
|
85
|
+
# reviewed the latest commit while the request was paused is not asked again.
|
|
85
86
|
def restore_requests(number, pull_request, comments)
|
|
86
87
|
waiting = paused(comments)
|
|
87
|
-
|
|
88
|
-
return if
|
|
88
|
+
waiting["reviewers"] -= [ pull_request.dig("user", "login") ]
|
|
89
|
+
return if waiting.values.all?(&:empty?)
|
|
89
90
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
reviewed = reviewed_head(number, pull_request) & waiting["reviewers"]
|
|
92
|
+
asked = { "reviewers" => waiting["reviewers"] - reviewed, "teams" => waiting["teams"] }
|
|
93
|
+
unless asked.values.all?(&:empty?)
|
|
94
|
+
@github.request_reviewers(number, reviewers: asked["reviewers"], team_reviewers: asked["teams"])
|
|
95
|
+
end
|
|
96
|
+
write_notice(number, comments, "#{author(pull_request)}#{restored_notice(asked, reviewed)}", "reviewers" => [], "teams" => [])
|
|
97
|
+
@log.puts restored_notice(asked, reviewed)
|
|
94
98
|
rescue Error => error
|
|
95
99
|
@log.puts "Review was not requested again: #{error.message.lines.first.to_s.strip}"
|
|
96
100
|
end
|
|
97
101
|
|
|
102
|
+
# People whose last review approved or asked for changes on the head commit.
|
|
103
|
+
def reviewed_head(number, pull_request)
|
|
104
|
+
head_sha = pull_request.fetch("head").fetch("sha")
|
|
105
|
+
last = @github.reviews(number).group_by { |review| review.dig("user", "login") }.transform_values(&:last)
|
|
106
|
+
last.select { |_login, review| review["commit_id"] == head_sha && %w[APPROVED CHANGES_REQUESTED].include?(review["state"]) }.keys
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def restored_notice(asked, reviewed)
|
|
110
|
+
parts = []
|
|
111
|
+
parts << "Review requested again from #{names(asked)}: browser verification no longer holds it back." unless asked.values.all?(&:empty?)
|
|
112
|
+
parts << "#{reviewed.map { |name| Markdown.escape(name) }.join(", ")} already reviewed the latest commit, so " \
|
|
113
|
+
"#{reviewed.one? ? "was" : "were"} not asked again." if reviewed.any?
|
|
114
|
+
parts.join(" ")
|
|
115
|
+
end
|
|
116
|
+
|
|
98
117
|
def notice_comment(comments)
|
|
99
118
|
comments.reverse.find { |comment| comment.dig("user", "login") == Assessment::AUTHOR && comment["body"].to_s.match?(PAUSED) }
|
|
100
119
|
end
|
|
@@ -92,6 +92,11 @@ module BrowserReviewGate
|
|
|
92
92
|
input: { reviewers: reviewers, team_reviewers: team_reviewers })
|
|
93
93
|
end
|
|
94
94
|
|
|
95
|
+
# Submitted reviews, oldest first.
|
|
96
|
+
def reviews(number)
|
|
97
|
+
pages("repos/#{repository}/pulls/#{number}/reviews")
|
|
98
|
+
end
|
|
99
|
+
|
|
95
100
|
def request_reviewers(number, reviewers:, team_reviewers:)
|
|
96
101
|
api("repos/#{repository}/pulls/#{number}/requested_reviewers", method: "POST",
|
|
97
102
|
input: { reviewers: reviewers, team_reviewers: team_reviewers })
|