build-buddy 1.14.12 → 1.15.0
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/lib/build_buddy.rb +1 -1
- data/lib/build_buddy/build_data.rb +17 -3
- data/lib/build_buddy/recorder.rb +0 -1
- data/lib/build_buddy/slacker.rb +68 -77
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b047d2b1bc2a825a18ba63df01115b0f7564a965
|
4
|
+
data.tar.gz: 02cfc587d188363d5e48aba4d7234e423498a129
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1fd06cea76d507a0e03d9248ae7f5f5d440071d9dcde85362d1736501634f32aa8b9c63049d287624a722af3a2898591e6bc74aba459038ab5caebb5a1d5adc5
|
7
|
+
data.tar.gz: d68577afdc4f51a768265c85b671a1374aed7c3aed6bd7b70c34d85cce3d00510efc3e255c5dbf5d99c7ff9fd98713d339c717a9ca19cac57ed8b5c1b3e39e52
|
data/lib/build_buddy.rb
CHANGED
@@ -35,6 +35,8 @@ module BuildBuddy
|
|
35
35
|
attr_accessor :flags
|
36
36
|
attr_accessor :metrics
|
37
37
|
|
38
|
+
GITHUB_URL = "https://github.com"
|
39
|
+
|
38
40
|
def initialize(args)
|
39
41
|
args.each do |key, value|
|
40
42
|
begin
|
@@ -72,14 +74,26 @@ module BuildBuddy
|
|
72
74
|
|
73
75
|
def status_verb
|
74
76
|
if @termination_type == :killed
|
75
|
-
'
|
77
|
+
'stopped'
|
76
78
|
else
|
77
79
|
@exit_code != 0 ? 'failed' : 'succeeded'
|
78
80
|
end
|
79
81
|
end
|
80
82
|
|
81
|
-
def
|
82
|
-
|
83
|
+
def url_and_branch_name
|
84
|
+
if @type == :branch
|
85
|
+
branch_name = "#{@repo_full_name}/#{@branch}"
|
86
|
+
url = "#{GITHUB_URL}/#{@repo_full_name}/tree/#{@branch}"
|
87
|
+
else
|
88
|
+
branch_name = "#{@repo_full_name}/pr/#{@pull_request}"
|
89
|
+
url = "#{GITHUB_URL}/#{@repo_full_name}/pull/#{@pull_request}"
|
90
|
+
end
|
91
|
+
[url, branch_name]
|
92
|
+
end
|
93
|
+
|
94
|
+
def run_time
|
95
|
+
end_time = @end_time.nil? ? Time.now.utc : @end_time
|
96
|
+
Time.at(end_time - @start_time).utc.strftime('%H:%M:%S.%L')
|
83
97
|
end
|
84
98
|
end
|
85
99
|
end
|
data/lib/build_buddy/recorder.rb
CHANGED
data/lib/build_buddy/slacker.rb
CHANGED
@@ -110,24 +110,27 @@ module BuildBuddy
|
|
110
110
|
response
|
111
111
|
end
|
112
112
|
|
113
|
-
def do_show_help(is_from_slack_channel)
|
114
|
-
|
113
|
+
def do_show_help(is_from_slack_channel, slack_user_name)
|
114
|
+
text_for_branch_list = Config.allowed_build_branches.count > 0 ? " or " + Config.allowed_build_branches.map { |branch| "`build #{branch}`"}.join(', ') : 0
|
115
115
|
|
116
|
-
|
116
|
+
%Q(Hello#{is_from_slack_channel ? '' : " <@#{slack_user_name}>"}, I'm the *@#{@rt_client.self['name']}* build bot v#{BuildBuddy::VERSION}!
|
117
117
|
|
118
|
-
|
118
|
+
I understand _pull requests_ and _branch builds_.
|
119
119
|
|
120
|
-
|
120
|
+
A _pull request_ build happens when you make a pull request to the `<#{BuildData::GITHUB_URL}/#{Config.github_webhook_repo_full_name}|#{Config.github_webhook_repo_full_name}>` GitHub repository. *TIP* you can restart a failed pull request by pushing more changes to the branch. Use `git commit --allow-empty` if you simply need to retry the build.
|
121
121
|
|
122
|
-
|
122
|
+
To do a _branch build_ you can tell me to `build master`#{text_for_branch_list}.
|
123
|
+
|
124
|
+
I will let the *#{Config.slack_build_channel}* channel know about _branch build_ activity and the *#{Config.slack_pr_channel}* channel know about _pull request_ activity.
|
123
125
|
|
124
126
|
I have lots of `show` commands:
|
125
127
|
|
126
128
|
- `show status` and I'll tell you what my status is
|
127
|
-
- `show queue` and I will show you what is in the queue
|
128
|
-
- `show options` to a see a list of build options
|
129
|
+
- `show queue` and I will show you what is in the queue to build
|
129
130
|
- `show builds` to see the last 5 builds or `show last N builds` to see a list of the last N builds
|
130
|
-
- `show report` to get a link to the latest build report
|
131
|
+
- `show report` to get a link to the latest build report, if there is one
|
132
|
+
|
133
|
+
Stop any running build with `stop build bb-xxx`. Use `show queue` to get a valid `bb-xxx` identifier.
|
131
134
|
)
|
132
135
|
end
|
133
136
|
|
@@ -155,30 +158,32 @@ I have lots of `show` commands:
|
|
155
158
|
else
|
156
159
|
response = ''
|
157
160
|
if build_datas.count < limit
|
158
|
-
response += "There have only been #{build_datas.count} builds
|
161
|
+
response += "There have only been #{build_datas.count} builds"
|
159
162
|
else
|
160
|
-
response += "Here are the last #{build_datas.count} builds
|
163
|
+
response += "Here are the last #{build_datas.count} builds"
|
161
164
|
end
|
165
|
+
attachments = []
|
162
166
|
build_datas.each do |build_data|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
when :pull_request
|
168
|
-
"pull request build #{build_data.pull_request_uri}"
|
169
|
-
end
|
170
|
-
response += " at #{build_data.start_time.to_s}. #{BuildData.server_log_uri(build_data._id)}"
|
167
|
+
text = "[`#{build_data.start_time.to_s}`]"
|
168
|
+
branch_url, branch_name = build_data.url_and_branch_name
|
169
|
+
text += " `<#{branch_url}|#{branch_name}>`"
|
170
|
+
text += "\n`<#{BuildData.server_log_uri(build_data._id)}|#{build_data._id.to_s}>`"
|
171
171
|
unless build_data.started_by.nil?
|
172
|
-
|
172
|
+
text += " by *@#{build_data.started_by}*"
|
173
173
|
end
|
174
|
-
|
174
|
+
text += " #{build_data.status_verb}"
|
175
175
|
unless build_data.stopped_by.nil?
|
176
|
-
|
176
|
+
text += " by *@#{build_data.stopped_by}*"
|
177
177
|
end
|
178
|
-
|
178
|
+
text += " ran for `#{build_data.run_time}`"
|
179
|
+
attachments.push({
|
180
|
+
:mrkdwn_in => [ :text ],
|
181
|
+
:text => text,
|
182
|
+
:color => build_data.termination_type == :killed ? :warning : build_data.exit_code != 0 ? :danger : :good,
|
183
|
+
})
|
179
184
|
end
|
180
185
|
end
|
181
|
-
response
|
186
|
+
[response, attachments]
|
182
187
|
end
|
183
188
|
|
184
189
|
def do_show_status
|
@@ -187,63 +192,51 @@ I have lots of `show` commands:
|
|
187
192
|
queue_length = scheduler.queue_length
|
188
193
|
response = ''
|
189
194
|
if build_data.nil?
|
190
|
-
response = "There
|
195
|
+
response = "There are no builds running"
|
191
196
|
if queue_length == 0
|
192
197
|
response += " and no builds in the queue."
|
193
198
|
else
|
194
199
|
response += " and #{queue_length} in the queue."
|
195
200
|
end
|
196
201
|
else
|
197
|
-
|
198
|
-
|
199
|
-
response = "There is a pull request build in progress for https://github.com/#{build_data.repo_full_name}/pull/#{build_data.pull_request} (#{build_data.bb_id})"
|
200
|
-
when :branch
|
201
|
-
response = "There is a build of the `#{build_data.branch}` branch of https://github.com/#{build_data.repo_full_name} in progress (#{build_data.bb_id})"
|
202
|
-
end
|
202
|
+
branch_url, branch_name = build_data.url_and_branch_name
|
203
|
+
response = "`<#{branch_url}|#{branch_name}>` `<#{build_data.server_log_uri}|#{build_data._id.to_s}>` in progress (`#{build_data.bb_id}`)"
|
203
204
|
unless build_data.started_by.nil?
|
204
|
-
response += "
|
205
|
-
end
|
206
|
-
unless build_data.stopped_by.nil?
|
207
|
-
response += " stopped by #{build_data.stopped_by}"
|
205
|
+
response += " by *@#{build_data.started_by}*"
|
208
206
|
end
|
209
|
-
response +=
|
210
|
-
if queue_length ==
|
211
|
-
response += "
|
207
|
+
response += " running for `#{build_data.run_time}`."
|
208
|
+
if queue_length == 0
|
209
|
+
response += " No builds in the queue."
|
212
210
|
elsif queue_length > 1
|
213
|
-
response += "
|
211
|
+
response += " #{queue_length} build#{queue_length > 1 ? 's' : ''} in the queue."
|
214
212
|
end
|
215
213
|
end
|
216
214
|
response
|
217
215
|
end
|
218
216
|
|
219
|
-
def do_show_options
|
220
|
-
%Q(You can add the following options to builds:
|
221
|
-
- *test channel* to have notifications go to the test channel
|
222
|
-
- *no upload* to not have the build upload
|
223
|
-
)
|
224
|
-
end
|
225
|
-
|
226
217
|
def do_show_queue
|
227
218
|
build_datas = Celluloid::Actor[:scheduler].get_build_queue
|
228
|
-
|
219
|
+
queue_length = build_datas.count
|
220
|
+
if queue_length == 0
|
229
221
|
response = "There are no builds in the queue."
|
230
222
|
else
|
231
|
-
response = '
|
223
|
+
response = "There are #{queue_length} build#{queue_length > 1 ? 's' : ''} in the queue"
|
224
|
+
attachments = []
|
232
225
|
build_datas.each { |build_data|
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
"`#{build_data.branch}` branch build"
|
237
|
-
when :pull_request
|
238
|
-
"pull request build #{build_data.pull_request_uri}"
|
239
|
-
end
|
226
|
+
text = "`#{build_data.bb_id}`"
|
227
|
+
branch_url, branch_name = build_data.url_and_branch_name
|
228
|
+
text += " `<#{branch_url}|#{branch_name}>`"
|
240
229
|
unless build_data.started_by.nil?
|
241
|
-
|
230
|
+
text += " by *@#{build_data.started_by}*"
|
242
231
|
end
|
243
|
-
|
232
|
+
attachments.push({
|
233
|
+
:mrkdwn_in => [ :text ],
|
234
|
+
:text => text,
|
235
|
+
:color => "#439FE0"
|
236
|
+
})
|
244
237
|
}
|
245
238
|
end
|
246
|
-
response
|
239
|
+
[response, attachments]
|
247
240
|
end
|
248
241
|
|
249
242
|
def do_show_report
|
@@ -332,7 +325,7 @@ I have lots of `show` commands:
|
|
332
325
|
|
333
326
|
message = message.strip
|
334
327
|
|
335
|
-
response = case message
|
328
|
+
response, attachments = case message
|
336
329
|
when /stop +build +(bb-\d+)/i
|
337
330
|
do_stop $1, is_from_slack_channel, slack_user_name
|
338
331
|
when /build +([a-z0-9\.]+)/i
|
@@ -349,49 +342,47 @@ I have lots of `show` commands:
|
|
349
342
|
do_show_report
|
350
343
|
when /show queue/
|
351
344
|
do_show_queue
|
352
|
-
when /show options/
|
353
|
-
do_show_options
|
354
345
|
when /help/i
|
355
|
-
do_show_help is_from_slack_channel
|
346
|
+
do_show_help is_from_slack_channel, slack_user_name
|
356
347
|
when /^relay(.*)/i # This must be sent directly to build-buddy
|
357
348
|
do_relay $1, slack_user_name
|
358
349
|
else
|
359
350
|
"Sorry#{is_from_slack_channel ? ' ' + slack_user_name : ''}, I'm not sure how to respond."
|
360
|
-
|
361
|
-
@rt_client.
|
351
|
+
end
|
352
|
+
@rt_client.web_client.chat_postMessage(channel: data['channel'], text: response, attachments: attachments, as_user: true)
|
353
|
+
#@rt_client.message channel: data['channel'], text: response
|
362
354
|
info "Slack message '#{message}' from #{data['channel']} handled"
|
363
355
|
end
|
364
356
|
|
365
357
|
def notify_channel(build_data)
|
366
358
|
status_verb = build_data.status_verb
|
359
|
+
attachment_message = ''
|
367
360
|
|
361
|
+
branch_url, branch_name = build_data.url_and_branch_name
|
368
362
|
if build_data.type == :branch
|
369
|
-
message = "A `#{build_data.branch}` branch build #{status_verb}"
|
370
|
-
short_message = message
|
371
363
|
info "Branch build #{status_verb}"
|
372
364
|
else
|
373
|
-
|
374
|
-
short_message = "Pull request #{build_data.pull_request} #{status_verb}"
|
365
|
+
attachment_message += "<#{branch_url}|*#{build_data.pull_request_title}*>"
|
375
366
|
info "Pull request build #{status_verb}"
|
376
367
|
end
|
377
368
|
|
369
|
+
message = "`<#{branch_url}|#{branch_name}>` build #{status_verb}"
|
378
370
|
if build_data.termination_type == :killed and build_data.stopped_by != nil
|
379
|
-
message += " by
|
371
|
+
message += " by *@#{build_data.stopped_by}*"
|
380
372
|
end
|
381
|
-
|
382
|
-
message += ". Log file at #{build_data.server_log_uri}"
|
373
|
+
attachment_message += "\n`<#{build_data.server_log_uri}|#{build_data._id.to_s}>` ran for `#{build_data.run_time}`"
|
383
374
|
|
384
375
|
# See https://api.slack.com/docs/attachments for more information about formatting Slack attachments
|
385
|
-
attachments = [
|
386
|
-
:
|
387
|
-
:text =>
|
376
|
+
attachments = [{
|
377
|
+
:mrkdwn_in => [ :text ],
|
378
|
+
:text => attachment_message,
|
388
379
|
:color => build_data.termination_type == :killed ? :warning : build_data.exit_code != 0 ? :danger : :good,
|
389
|
-
]
|
380
|
+
}]
|
390
381
|
|
391
382
|
if build_data.type == :branch
|
392
|
-
@rt_client.web_client.chat_postMessage(channel: @build_channel_id, text:
|
383
|
+
@rt_client.web_client.chat_postMessage(channel: @build_channel_id, text: message, attachments: attachments, as_user: true) unless @build_channel_id.nil?
|
393
384
|
else
|
394
|
-
@rt_client.web_client.chat_postMessage(channel: @pr_channel_id, text:
|
385
|
+
@rt_client.web_client.chat_postMessage(channel: @pr_channel_id, text: message, attachments: attachments, as_user: true) unless @pr_channel_id.nil?
|
395
386
|
end
|
396
387
|
end
|
397
388
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: build-buddy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Lyon-smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: timers
|
@@ -150,20 +150,6 @@ dependencies:
|
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '2.2'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: gruff
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - "~>"
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0.7'
|
160
|
-
type: :runtime
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - "~>"
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0.7'
|
167
153
|
- !ruby/object:Gem::Dependency
|
168
154
|
name: code-tools
|
169
155
|
requirement: !ruby/object:Gem::Requirement
|