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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7511e93bcb04cb1c8afa751bb179553eb29e70f4d0173e5c4b9fe899009f83ed
4
- data.tar.gz: 638a66f37095d8421b21528f5718e9a550644112cffdca8695b0978f7f9ff646
3
+ metadata.gz: 71673ce11f3c85d5c6c2e825a4ce6511248c012268ba162cf1327a563bcb0cd9
4
+ data.tar.gz: 63f4074d54f198c7b2eac7163ed5bb3d5751d71609510eca6c4804db3fae4c8e
5
5
  SHA512:
6
- metadata.gz: 3bf5fba978609414d2a0a191bee336805ec9c8ce7923c94c1f4e44bb135037b1252d44c549a7a29961575f7a9776da2161ecbd5e23028d54ac281c4e5878425d
7
- data.tar.gz: 6b4350eb758928d89cb1ba3dd0b7da3e26b0c1d192c76b306bf30a600b2a9412b17066fcee02c9ce47717bc14a2869ead36bf5338e4d300bc73f2d760cb4fd62
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
- reviewers = waiting["reviewers"] - [ pull_request.dig("user", "login") ]
88
- return if reviewers.empty? && waiting["teams"].empty?
88
+ waiting["reviewers"] -= [ pull_request.dig("user", "login") ]
89
+ return if waiting.values.all?(&:empty?)
89
90
 
90
- @github.request_reviewers(number, reviewers: reviewers, team_reviewers: waiting["teams"])
91
- write_notice(number, comments, "#{author(pull_request)}Review requested again from #{names(waiting)}: browser verification no longer holds it back.",
92
- "reviewers" => [], "teams" => [])
93
- @log.puts "Requested review again from #{names(waiting)}."
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 })
@@ -1,3 +1,3 @@
1
1
  module BrowserReviewGate
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browser_review_gate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - JetRockets