lita-github-pinger 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 24f8027c591f287e67c566c12de074b78419374b
4
- data.tar.gz: 2c43fec1e9138ec89ae150d9ffc725d27bdc7fbe
2
+ SHA256:
3
+ metadata.gz: 322d659976706040591b8a6adace708b6e62f993e4a9a2eeb9de11962313cd43
4
+ data.tar.gz: 267a815221c9c91ab85d08b132489557a0e637da78e6bccfb671fbb0dd37c15c
5
5
  SHA512:
6
- metadata.gz: f4cfc8b1e864a6e99621e4e78270ff6b8ceef2e65100393cbdc0bc26c3ba9684456d1414d93d74f8978201889a1b14046812527f481ebd3423f0407d40a842dc
7
- data.tar.gz: ccb7dff2e4cab3295634faec9db1b59445d20be31faa5189529c4dd2470de7217435f5e3cdbad4ed3132cc2f058ae02d91a48803cfec351616e1c3d631df1144
6
+ metadata.gz: bd1d060e1173b44d67146db57da5561651be71c931a3709cb246a27c50691a41523617123326a5f26da1022ceab31aa2681be850d99df375d414ebc8394a5588
7
+ data.tar.gz: '0769961ff55185d99db6b3b84f336a2d1face79a2aafcbf00de381e84b6c6beee99cdc356da5012ad12b2aaaa1943dd9a2bec5e9ae691e6a7d315f33004833c9'
data/README.md CHANGED
@@ -2,12 +2,13 @@
2
2
 
3
3
  This is a Lita handler for pinging you about github events that you should know about.
4
4
 
5
- In particular, it will ping you under four circumstances (right now):
5
+ In particular, it can ping you under four circumstances (right now):
6
6
 
7
7
  1. Somebody has commented on your pull request
8
8
  2. Somebody has @mentioned you through a comment on a pull request
9
9
  3. Somebody has assigned you to a pull request
10
- 4. The status of your pull request was set to "failing"
10
+ 4. Somebody has requested a pull request review from you
11
+ 5. The status of your pull request was set to "failing"
11
12
 
12
13
  ## Installation
13
14
 
@@ -38,9 +39,11 @@ config.handlers.github_pinger.engineers = {
38
39
  },
39
40
  github_preferences: {
40
41
  frequency: "all_discussion",
42
+ notify_about_assignment: true,
43
+ notify_about_review_requests: true,
41
44
  location: "dm"
42
45
  },
43
- travis_preferences: { # I know, not everybody uses travis - this will still work.
46
+ status_preferences: {
44
47
  frequency: "only_failures"
45
48
  }
46
49
  },
@@ -16,7 +16,9 @@ module Lita
16
16
  # },
17
17
  # :github_preferences => {
18
18
  # :frequency => "only_mentions",
19
- # :ping_location => "dm"
19
+ # :ping_location => "dm",
20
+ # :notify_about_review_requests: true,
21
+ # :notify_about_assignment: true,
20
22
  # },
21
23
  # :travis_preferences => {
22
24
  # :frequency => "only_failures"
@@ -34,12 +36,12 @@ module Lita
34
36
  # - "off"
35
37
  # default: "all_discussion"
36
38
  #
37
- # :travis_preferences[:frequency] can be
39
+ # :status_preferences[:frequency] can be
38
40
  # - "only_passes"
39
41
  # - "only_failures"
40
42
  # - "everything"
41
43
  # - "off"
42
- # default: "all_discussion"
44
+ # default: "everything"
43
45
  config :engineers, type: Hash, required: true
44
46
  config :enable_round_robin, types: [TrueClass, FalseClass]
45
47
 
@@ -60,6 +62,10 @@ module Lita
60
62
  act_on_assign(body, response)
61
63
  end
62
64
 
65
+ if body["action"] && body["action"] == "review_requested"
66
+ act_on_review_requested(body, response)
67
+ end
68
+
63
69
  if body["action"] && body["action"] == "labeled"
64
70
  act_on_pr_labeled(body, response)
65
71
  end
@@ -77,12 +83,23 @@ module Lita
77
83
  commit_url = body["commit"]["html_url"]
78
84
  committer = find_engineer(github: body["commit"]["committer"]["login"])
79
85
 
80
- puts "Detected a travis build failure for commit #{body["sha"]}"
81
- message = ":x: Your commit failed some tests."
86
+ puts "Detected a status failure for commit #{body["sha"]}"
87
+ message = ":x: Your commit failed CI."
82
88
  message += "\n#{commit_url}"
83
89
 
84
- return if ["off", "only_passes"].include?(committer[:travis_preferences][:frequency])
85
- send_dm(committer[:usernames][:slack], message)
90
+ if committer
91
+ frequency = if committer[:travis_preferences]
92
+ committer[:travis_preferences][:frequency]
93
+ else
94
+ committer[:status_preferences][:frequency]
95
+ end
96
+
97
+ return if ["off", "only_passes"].include?(frequency)
98
+
99
+ send_dm(committer[:usernames][:slack], message)
100
+ else
101
+ puts "Could not find configuration for GitHub username " + body["commit"]["committer"]["login"]}
102
+ end
86
103
 
87
104
  response
88
105
  end
@@ -91,12 +108,23 @@ module Lita
91
108
  commit_url = body["commit"]["html_url"]
92
109
  committer = find_engineer(github: body["commit"]["committer"]["login"])
93
110
 
94
- puts "Detected a travis build success for commit #{body["sha"]}"
95
- message = ":white_check_mark: Your commit has passed its travis build."
111
+ puts "Detected a status success for commit #{body["sha"]}"
112
+ message = ":white_check_mark: Your commit has passed CI."
96
113
  message += "\n#{commit_url}"
97
114
 
98
- return if ["off", "only_failures"].include?(committer[:travis_preferences][:frequency])
99
- send_dm(committer[:usernames][:slack], message)
115
+ if committer
116
+ frequency = if committer[:travis_preferences]
117
+ committer[:travis_preferences][:frequency]
118
+ else
119
+ committer[:status_preferences][:frequency]
120
+ end
121
+
122
+ return if ["off", "only_failures"].include?(frequency)
123
+
124
+ send_dm(committer[:usernames][:slack], message)
125
+ else
126
+ puts "Could not find configuration for GitHub username " + body["commit"]["committer"]["login"]}
127
+ end
100
128
 
101
129
  response
102
130
  end
@@ -105,18 +133,26 @@ module Lita
105
133
  type = detect_type(body)
106
134
 
107
135
  if type.nil?
108
- puts 'Neither pull request or issue detected, exiting...'
136
+ puts "Neither pull request or issue detected, exiting..."
109
137
  return
110
138
  end
111
139
 
112
140
  puts "Detected that someone got assigned to a #{type.tr('_', ' ')}."
113
141
 
114
- assignee_login = body[type]['assignee']['login']
142
+ assignee_login = body[type]["assignee"]["login"]
115
143
  assignee = find_engineer(github: assignee_login)
116
144
 
145
+ puts "Looking up preferences..."
146
+ should_notify = assignee[:github_preferences][:notify_about_assignment]
147
+
148
+ if !should_notify
149
+ puts "will not notify, preference for :github_preferences[:notify_about_assignment] is not true"
150
+ return response
151
+ end
152
+
117
153
  puts "#{assignee} determined as the assignee."
118
154
 
119
- url = body[type]['html_url']
155
+ url = body[type]["html_url"]
120
156
 
121
157
  message = "*Heads up!* You've been assigned to review a #{type.tr('_', ' ')}:\n#{url}"
122
158
 
@@ -126,17 +162,49 @@ module Lita
126
162
  response
127
163
  end
128
164
 
165
+ def act_on_review_requested(body, response)
166
+ puts "Detected a review request."
167
+
168
+ reviewers = body["pull_request"]["requested_reviewers"]
169
+
170
+ reviewers.each do |reviewer|
171
+ engineer = find_engineer(github: reviewer["login"])
172
+
173
+ if engineer
174
+ puts "#{engineer} determined as a reviewer."
175
+
176
+ puts "Looking up preferences..."
177
+ should_notify = engineer[:github_preferences][:notify_about_review_requests]
178
+
179
+ if !should_notify
180
+ puts "will not notify, preference for :github_preferences[:notify_about_review_requests] is not true"
181
+ else
182
+ url = body["pull_request"]["html_url"]
183
+
184
+ message = "You've been asked to review a pull request:\n#{url}"
185
+
186
+ puts "Sending DM to #{engineer}..."
187
+ send_dm(engineer[:usernames][:slack], message)
188
+ end
189
+ else
190
+ puts "Could not find engineer #{reviewer["login"]}"
191
+ end
192
+ end
193
+
194
+ response
195
+ end
196
+
129
197
  def act_on_pr_labeled(body, response)
130
198
  type = detect_type(body)
131
199
  puts "Detected that someone labeled a #{type.tr('_', ' ')}."
132
200
 
133
201
  if type.nil?
134
- puts 'Neither pull request or issue detected, exiting...'
202
+ puts "Neither pull request or issue detected, exiting..."
135
203
  return
136
204
  end
137
205
 
138
206
  if body["pull_request"]["labels"].none? { |label| label["name"].downcase.include?('review') }
139
- puts 'Labels do not include a review label, exiting...'
207
+ puts "Labels do not include a review label, exiting..."
140
208
  return
141
209
  end
142
210
 
@@ -155,7 +223,7 @@ module Lita
155
223
 
156
224
  puts "#{chosen_reviewer} determined as the reviewer."
157
225
 
158
- url = body[type]['html_url']
226
+ url = body[type]["html_url"]
159
227
 
160
228
  message_for_reviewer = "You're next in line to review a PR! Please review, or assign to an engineer with more context if you think you are unable to give a thorough review. \n#{url}"
161
229
  message_for_owner = "#{chosen_reviewer} has been notified via round-robin to review #{body["pull_request"]["html_url"]}"
@@ -211,8 +279,8 @@ module Lita
211
279
 
212
280
  # get each @mentioned engineer in the comment
213
281
  mentions = comment
214
- .split('@')[1..-1] # "a @b @c d" => ["b ", "c d"]
215
- .map { |snip| snip.split(' ').first } # ["b ", "c d"] => ["b", "c"]
282
+ .split("@")[1..-1] # "a @b @c d" => ["b ", "c d"]
283
+ .map { |snip| snip.split(" ").first } # ["b ", "c d"] => ["b", "c"]
216
284
  .map { |name| name.gsub(/[^0-9a-z\-_]/i, '') }
217
285
 
218
286
  puts "Done. Got #{mentions}"
@@ -310,10 +378,10 @@ module Lita
310
378
  end
311
379
 
312
380
  def detect_type(body)
313
- if body['pull_request']
314
- 'pull_request'
315
- elsif body['issue']
316
- 'issue'
381
+ if body["pull_request"]
382
+ "pull_request"
383
+ elsif body["issue"]
384
+ "issue"
317
385
  end
318
386
  end
319
387
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-github-pinger"
3
- spec.version = "0.8.0"
3
+ spec.version = "0.9.0"
4
4
  spec.authors = ["Taylor Lapeyre"]
5
5
  spec.email = ["taylorlapeyre@gmail.com"]
6
6
  spec.description = "A Lita handler that detects github comment notifications and regurgitates a ping to the correct slack username."
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-github-pinger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taylor Lapeyre
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-15 00:00:00.000000000 Z
11
+ date: 2018-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
134
  version: '0'
135
135
  requirements: []
136
136
  rubyforge_project:
137
- rubygems_version: 2.5.1
137
+ rubygems_version: 2.7.6
138
138
  signing_key:
139
139
  specification_version: 4
140
140
  summary: A Lita handler that detects github comment notifications and regurgitates