kitchen_hooks 1.5.8 → 1.6.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
2
  SHA1:
3
- metadata.gz: 50100dd02824f80b639343180a6ff96e82570f1b
4
- data.tar.gz: 410484be1fde8357b5340607b61b06fcc9ec27b6
3
+ metadata.gz: 9eb74c5dbbe7c83206e30120671a1bf59553258a
4
+ data.tar.gz: 9a722f4f0cf0ed44da7eaa7cf8668cc871a0ddd5
5
5
  SHA512:
6
- metadata.gz: f53fdb8d519a757f5e19fa6a700c269062efcdfc6483b99318ffecd3b3fe62695c0530686cab0099c13a1e3eee3a2cb5b2d7cb7d19e660180b863cd4872e40d7
7
- data.tar.gz: bb8df9b4cce3a81a690949fef12553c805791a94ec51f79e28c0bd2139a93aa63eeba64e01be34c2ffea2028cc98f4f798e25b908d2c8e3443a089c8395a9017
6
+ metadata.gz: 1ad297874b1379c5ba0ac75ff27288ee47bc64633969c27103abbdcf74ae6303a8545138b36ff6cd06e3d7ea43c5537c073843b27baf13bd4eb76b7a85255012
7
+ data.tar.gz: ed60bee3bfaffbf40f2395888a4c77f57537ac1c2bd4fab1da04552f58c6b7b2a9c85fa72f8012d79acdcafb233f079a585b393f6de24b566918d2f8d1a365f2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.8
1
+ 1.6.0
data/etc/commit.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "before": "08f20548e398f634979047d0c8114260bcc2949a",
3
- "after": "7b238ce9c6cff250db5a0b727b9661b618b82e1d",
4
- "ref": "refs/tags/bjn_test",
3
+ "after": "0835e7c74314cfe2aa9f98fe47338031b637ef95",
4
+ "ref": "refs/tags/v0.0.4",
5
5
  "user_id": 645,
6
6
  "user_name": "Sean Clemmer",
7
7
  "repository": {
8
- "name": "realm_logger",
9
- "url": "git@git.bluejeansnet.com:chef/realm_logger.git",
8
+ "name": "realm_catalyst",
9
+ "url": "git@git.bluejeansnet.com:chef/realm_catalyst.git",
10
10
  "description": "",
11
- "homepage": "http://git.bluejeansnet.com/chef/realm_logger"
11
+ "homepage": "http://git.bluejeansnet.com/chef/realm_catalyst"
12
12
  },
13
13
  "commits": [
14
14
  {
15
- "id": "7b238ce9c6cff250db5a0b727b9661b618b82e1d",
15
+ "id": "0835e7c74314cfe2aa9f98fe47338031b637ef95",
16
16
  "message": "XYZ",
17
17
  "timestamp": "2014-11-25T18:30:57-08:00",
18
- "url": "http://git.bluejeansnet.com/chef/realm_logger/commit/7b238ce9c6cff250db5a0b727b9661b618b82e1d",
18
+ "url": "http://git.bluejeansnet.com/chef/realm_catalyst/commit/7b238ce9c6cff250db5a0b727b9661b618b82e1d",
19
19
  "author": {
20
20
  "name": "Sean Clemmer",
21
21
  "email": "sclemmer@bluejeans.com"
@@ -16,15 +16,26 @@ module KitchenHooks
16
16
 
17
17
  enable :sessions
18
18
 
19
- include KitchenHooks::Helpers
20
-
21
19
  def self.db! path
22
20
  @@db = Daybreak::DB.new path
23
21
  end
24
22
 
25
23
  def self.tmp! dir ; @@tmp = dir end
26
24
 
27
- def self.close! ; @@db.close end
25
+ def self.close!
26
+ @@backlog_worker.kill
27
+ @@db.close
28
+ end
29
+
30
+ def self.backlog!
31
+ @@backlog = Queue.new
32
+ @@backlog_worker = Thread.new do
33
+ loop do
34
+ event = @@backlog.shift
35
+ App.process event
36
+ end
37
+ end
38
+ end
28
39
 
29
40
  def self.config! config
30
41
  @@hipchat = nil
@@ -38,11 +49,17 @@ module KitchenHooks
38
49
  end
39
50
  end
40
51
 
52
+ get '/backlog' do
53
+ content_type :json
54
+ JSON.pretty_generate \
55
+ backlog: @@backlog.inspect,
56
+ length: @@backlog.length
57
+ end
41
58
 
42
59
  get '/' do
43
- process_release
60
+ App.process_release
44
61
  db_entries = {}
45
- db.each do |k, v|
62
+ @@db.each do |k, v|
46
63
  db_entries[k] = v unless k =~ /^meta/
47
64
  end
48
65
  erb :app, locals: {
@@ -63,28 +80,26 @@ module KitchenHooks
63
80
  post '/' do
64
81
  request.body.rewind
65
82
  event = JSON::parse request.body.read rescue nil
66
- Thread.new do
67
- process event
68
- end
83
+ @@backlog.push event
69
84
  end
70
85
 
71
86
 
72
87
 
73
88
  private
74
- def tmp ; @@tmp ||= '/tmp' end
89
+ def self.db ; @@db end
75
90
 
76
- def knives ; @@knives ||= [] end
91
+ def self.tmp ; @@tmp ||= '/tmp' end
77
92
 
78
- def db ; @@db end
93
+ def self.knives ; @@knives ||= [] end
79
94
 
80
- def hipchat message, color
95
+ def self.hipchat message, color
81
96
  return if @@hipchat.nil?
82
97
  @@hipchat[@@hipchat_room].send @@hipchat_nick, message, \
83
98
  color: color, notify: false, message_format: 'html'
84
99
  end
85
100
 
86
101
 
87
- def notify entry
102
+ def self.notify entry
88
103
  color = case entry[:type]
89
104
  when 'failure' ; 'red'
90
105
  when 'release' ; 'purple'
@@ -98,7 +113,7 @@ module KitchenHooks
98
113
  # error == true => success
99
114
  # error == false => nop
100
115
  # otherwise => failure
101
- def mark event, type, error=nil
116
+ def self.mark event, type, error=nil
102
117
  return if error == false
103
118
  error = nil if error == true
104
119
  entry = { type: type, event: event }
@@ -111,14 +126,14 @@ module KitchenHooks
111
126
  end
112
127
 
113
128
 
114
- def process_release version=KitchenHooks::VERSION
129
+ def self.process_release version=KitchenHooks::VERSION
115
130
  return if db['meta_version'] == version
116
131
  db.set! 'meta_version', version
117
132
  mark version, 'release'
118
133
  end
119
134
 
120
135
 
121
- def process event
136
+ def self.process event
122
137
  if event.nil? # JSON parse failed
123
138
  mark event, 'failure', 'Could not parse WebHook payload'
124
139
  return
@@ -7,33 +7,33 @@ require 'json'
7
7
  require 'git'
8
8
  require 'ridley'
9
9
  require 'berkshelf'
10
+ require 'sinatra/base'
10
11
 
11
12
 
12
13
  Celluloid.logger = nil
13
14
  Berkshelf.logger = Logger.new $stdout
14
15
 
15
16
  module KitchenHooks
16
- module Helpers
17
-
18
- def report_error e, msg=nil
17
+ class App < Sinatra::Application
18
+ def self.report_error e, msg=nil
19
19
  msg = e.message if msg.nil?
20
- logger.error msg
21
- logger.error e.message
22
- logger.error e.backtrace.inspect
20
+ $stdout.puts msg
21
+ $stdout.puts e.message
22
+ $stdout.puts e.backtrace.inspect
23
23
  msg
24
24
  end
25
25
 
26
26
 
27
27
 
28
- def perform_constraint_application event, knives
29
- logger.debug 'started perform_constraint_application event=%s, knives=%s' % [
28
+ def self.perform_constraint_application event, knives
29
+ $stdout.puts 'started perform_constraint_application event=%s, knives=%s' % [
30
30
  event['after'], knives.inspect
31
31
  ]
32
32
 
33
33
  tmp_clone event, :tagged_commit do |clone|
34
34
  Dir.chdir clone do
35
35
 
36
- logger.info 'Applying constraints'
36
+ $stdout.puts 'Applying constraints'
37
37
  constraints = lockfile_constraints 'Berksfile.lock'
38
38
  environment = tag_name event
39
39
  knives.each do |k|
@@ -44,14 +44,14 @@ module KitchenHooks
44
44
  end
45
45
  end
46
46
 
47
- logger.debug "finished perform_constraint_application: #{event['after']}"
47
+ $stdout.puts "finished perform_constraint_application: #{event['after']}"
48
48
  return # no error
49
49
  end
50
50
 
51
51
 
52
- def perform_kitchen_upload event, knives
52
+ def self.perform_kitchen_upload event, knives
53
53
  return false unless commit_to_master?(event)
54
- logger.debug 'started perform_kitchen_upload event=%s, knives=%s' % [
54
+ $stdout.puts 'started perform_kitchen_upload event=%s, knives=%s' % [
55
55
  event['after'], knives.inspect
56
56
  ]
57
57
 
@@ -61,13 +61,13 @@ module KitchenHooks
61
61
  end
62
62
  end
63
63
 
64
- logger.debug "finished perform_kitchen_upload: #{event['after']}"
64
+ $stdout.puts "finished perform_kitchen_upload: #{event['after']}"
65
65
  return # no error
66
66
  end
67
67
 
68
68
 
69
- def perform_cookbook_upload event, knives
70
- logger.debug 'started perform_cookbook_upload event=%s, knives=%s' % [
69
+ def self.perform_cookbook_upload event, knives
70
+ $stdout.puts 'started perform_cookbook_upload event=%s, knives=%s' % [
71
71
  event['after'], knives.inspect
72
72
  ]
73
73
 
@@ -79,10 +79,10 @@ module KitchenHooks
79
79
  raise 'Tagged version does not match cookbook version'
80
80
  end
81
81
 
82
- logger.info 'Uploading cookbook'
82
+ $stdout.puts 'Uploading cookbook'
83
83
  with_each_knife_do "cookbook upload #{cookbook_name event} -o .. --freeze", knives
84
84
 
85
- logger.info 'Uploading bundled roles, environments, and data bags'
85
+ $stdout.puts 'Uploading bundled roles, environments, and data bags'
86
86
  kitchen_upload knives
87
87
  end
88
88
 
@@ -90,7 +90,7 @@ module KitchenHooks
90
90
  berksfile_lock = berksfile + '.lock'
91
91
 
92
92
  if File::exist? berksfile_lock
93
- logger.info 'Uploading dependencies'
93
+ $stdout.puts 'Uploading dependencies'
94
94
  berks_install berksfile
95
95
  knives.each do |knife|
96
96
  berks_upload berksfile, knife
@@ -98,20 +98,20 @@ module KitchenHooks
98
98
  end
99
99
  end
100
100
 
101
- logger.debug "finished cookbook_upload: #{event['after']}"
101
+ $stdout.puts "finished cookbook_upload: #{event['after']}"
102
102
  return # no error
103
103
  end
104
104
 
105
105
 
106
106
 
107
- def kitchen_upload knives
108
- logger.info 'Uploading data_bags'
107
+ def self.kitchen_upload knives
108
+ $stdout.puts 'Uploading data_bags'
109
109
  with_each_knife_do 'upload data_bags --chef-repo-path .', knives
110
110
 
111
- logger.info 'Uploading roles'
111
+ $stdout.puts 'Uploading roles'
112
112
  with_each_knife_do 'upload roles --chef-repo-path .', knives
113
113
 
114
- logger.info 'Uploading environments'
114
+ $stdout.puts 'Uploading environments'
115
115
  Dir['environments/*'].each do |e|
116
116
  knives.each do |k|
117
117
  upload_environment e, k
@@ -120,7 +120,7 @@ module KitchenHooks
120
120
  end
121
121
 
122
122
 
123
- def berkshelf_config knife
123
+ def self.berkshelf_config knife
124
124
  ridley = Ridley::from_chef_config knife
125
125
  config = {
126
126
  chef: {
@@ -140,15 +140,15 @@ module KitchenHooks
140
140
  end
141
141
 
142
142
 
143
- def berks_install berksfile
144
- logger.debug 'started berks_install berksfile=%s' % berksfile.inspect
143
+ def self.berks_install berksfile
144
+ $stdout.puts 'started berks_install berksfile=%s' % berksfile.inspect
145
145
  env_git_dir = ENV.delete 'GIT_DIR'
146
146
  env_git_work_tree = ENV.delete 'GIT_WORK_TREE'
147
147
 
148
148
  cmd = "berks install --debug --berksfile %s" % [
149
149
  Shellwords::escape(berksfile)
150
150
  ]
151
- logger.debug "berks_install: %s" % cmd
151
+ $stdout.puts "berks_install: %s" % cmd
152
152
  system cmd
153
153
  raise 'Could not perform berks_install with config %s' % [
154
154
  berksfile.inspect
@@ -156,12 +156,12 @@ module KitchenHooks
156
156
 
157
157
  ENV['GIT_DIR'] = env_git_dir
158
158
  ENV['GIT_WORK_TREE'] = env_git_work_tree
159
- logger.debug 'finished berks_install: %s' % berksfile
159
+ $stdout.puts 'finished berks_install: %s' % berksfile
160
160
  end
161
161
 
162
162
 
163
- def berks_upload berksfile, knife, options={}
164
- logger.debug 'started berks_upload berksfile=%s, knife=%s' % [
163
+ def self.berks_upload berksfile, knife, options={}
164
+ $stdout.puts 'started berks_upload berksfile=%s, knife=%s' % [
165
165
  berksfile.inspect, knife.inspect
166
166
  ]
167
167
  config_path = berkshelf_config(knife)
@@ -169,19 +169,19 @@ module KitchenHooks
169
169
  cmd = "berks upload --debug --berksfile %s --config %s" % [
170
170
  Shellwords::escape(berksfile), Shellwords::escape(config_path)
171
171
  ]
172
- logger.debug "berks_upload: %s" % cmd
172
+ $stdout.puts "berks_upload: %s" % cmd
173
173
  system cmd
174
174
  raise 'Could not perform berks_upload with config %s, knife %s' % [
175
175
  berksfile.inspect, knife.inspect
176
176
  ] unless $?.exitstatus.zero?
177
177
 
178
178
  FileUtils.rm_rf config_path
179
- logger.debug 'finished berks_upload: %s' % berksfile
179
+ $stdout.puts 'finished berks_upload: %s' % berksfile
180
180
  end
181
181
 
182
182
 
183
- def tmp_clone event, commit_method, &block
184
- logger.debug 'starting tmp_clone event=%s, commit_method=%s' % [
183
+ def self.tmp_clone event, commit_method, &block
184
+ $stdout.puts 'starting tmp_clone event=%s, commit_method=%s' % [
185
185
  event['after'], commit_method.inspect
186
186
  ]
187
187
 
@@ -193,7 +193,7 @@ module KitchenHooks
193
193
 
194
194
  commit = self.send(commit_method, event)
195
195
 
196
- logger.debug 'creating tmp_clone dir=%s, commit=%s' % [
196
+ $stdout.puts 'creating tmp_clone dir=%s, commit=%s' % [
197
197
  dir.inspect, commit.inspect
198
198
  ]
199
199
 
@@ -202,58 +202,58 @@ module KitchenHooks
202
202
  yield dir
203
203
 
204
204
  FileUtils.rm_rf root
205
- logger.debug 'finished tmp_clone'
205
+ $stdout.puts 'finished tmp_clone'
206
206
  end
207
207
 
208
208
 
209
- def with_each_knife_do command, knives
209
+ def self.with_each_knife_do command, knives
210
210
  with_each_knife "knife #{command} --config %{knife}", knives
211
211
  end
212
212
 
213
- def with_each_knife command, knives
213
+ def self.with_each_knife command, knives
214
214
  knives.map do |k|
215
215
  cmd = command % { knife: Shellwords::escape(k) }
216
- logger.debug 'with_each_knife: %s' % cmd
216
+ $stdout.puts 'with_each_knife: %s' % cmd
217
217
  system cmd
218
218
  # No error handling here; do that on "berks upload"
219
219
  end
220
220
  end
221
221
 
222
222
 
223
- def get_environment environment, knife
223
+ def self.get_environment environment, knife
224
224
  ridley = Ridley::from_chef_config knife
225
225
  ridley.environment.find environment
226
226
  end
227
227
 
228
228
 
229
- def verify_constraints constraints, environment, knife
230
- logger.debug 'started verify_constraints environment=%s, knife=%s' % [
229
+ def self.verify_constraints constraints, environment, knife
230
+ $stdout.puts 'started verify_constraints environment=%s, knife=%s' % [
231
231
  environment.inspect, knife.inspect
232
232
  ]
233
233
  chef_environment = get_environment environment, knife
234
234
  unless constraints == chef_environment.cookbook_versions
235
235
  raise 'Environment did not match constraints'
236
236
  end
237
- logger.debug 'finished verify_constraints: %s' % environment
237
+ $stdout.puts 'finished verify_constraints: %s' % environment
238
238
  end
239
239
 
240
240
 
241
- def apply_constraints constraints, environment, knife
241
+ def self.apply_constraints constraints, environment, knife
242
242
  # Ripped from Berkshelf::Cli::apply and Berkshelf::Lockfile::apply
243
243
  # https://github.com/berkshelf/berkshelf/blob/master/lib/berkshelf/cli.rb
244
244
  # https://github.com/berkshelf/berkshelf/blob/master/lib/berkshelf/lockfile.rb
245
- logger.debug 'started apply_constraints environment=%s, knife=%s' % [
245
+ $stdout.puts 'started apply_constraints environment=%s, knife=%s' % [
246
246
  environment.inspect, knife.inspect
247
247
  ]
248
248
  chef_environment = get_environment environment, knife
249
249
  raise 'Could not find environment "%s"' % environment if chef_environment.nil?
250
250
  chef_environment.cookbook_versions = constraints
251
251
  chef_environment.save
252
- logger.debug 'finished apply_constraints: %s' % environment
252
+ $stdout.puts 'finished apply_constraints: %s' % environment
253
253
  end
254
254
 
255
255
 
256
- def lockfile_constraints lockfile_path
256
+ def self.lockfile_constraints lockfile_path
257
257
  # Ripped from Berkshelf::Cli::apply and Berkshelf::Lockfile::apply
258
258
  # https://github.com/berkshelf/berkshelf/blob/master/lib/berkshelf/cli.rb
259
259
  # https://github.com/berkshelf/berkshelf/blob/master/lib/berkshelf/lockfile.rb
@@ -262,13 +262,13 @@ module KitchenHooks
262
262
  hash[name] = "= #{dependency.locked_version.to_s}"
263
263
  hash
264
264
  end
265
- logger.debug 'constraints: %s -> %s' % [ lockfile_path, constraints ]
265
+ $stdout.puts 'constraints: %s -> %s' % [ lockfile_path, constraints ]
266
266
  return constraints
267
267
  end
268
268
 
269
269
 
270
- def upload_environment environment, knife
271
- logger.debug 'started upload_environment environment=%s, knife=%s' % [
270
+ def self.upload_environment environment, knife
271
+ $stdout.puts 'started upload_environment environment=%s, knife=%s' % [
272
272
  environment.inspect, knife.inspect
273
273
  ]
274
274
  # Load the local environment from a JSON file
@@ -294,11 +294,13 @@ module KitchenHooks
294
294
 
295
295
  # Make it so!
296
296
  chef_environment.save
297
- logger.debug 'finished upload_environment: %s' % environment
297
+ $stdout.puts 'finished upload_environment: %s' % environment
298
298
  end
299
299
 
300
300
 
301
- def notification entry
301
+ def notification e ; App.notification e end
302
+
303
+ def self.notification entry
302
304
  return entry[:error] if entry[:error]
303
305
  event = entry[:event]
304
306
  case entry[:type]
@@ -314,7 +316,9 @@ module KitchenHooks
314
316
  end
315
317
 
316
318
 
317
- def generic_details event
319
+ def generic_details e ; App.generic_details e end
320
+
321
+ def self.generic_details event
318
322
  return if event.nil?
319
323
  %Q|
320
324
  <i>#{author(event)}</i> pushed #{push_details(event)}
@@ -322,7 +326,9 @@ module KitchenHooks
322
326
  end
323
327
 
324
328
 
325
- def push_details event
329
+ def push_details e ; App.push_details e end
330
+
331
+ def self.push_details event
326
332
  return if event.nil?
327
333
  %Q|
328
334
  <a href="#{gitlab_url(event)}">#{event['after']}</a> to <a href="#{repo_url(event)}">#{repo_name(event)}</a>
@@ -330,84 +336,87 @@ module KitchenHooks
330
336
  end
331
337
 
332
338
 
333
- def author event
339
+ def self.author event
334
340
  event['user_name']
335
341
  end
336
342
 
337
343
 
338
- def repo_name event
344
+ def self.repo_name event
339
345
  File::basename event['repository']['url'], '.git'
340
346
  end
341
347
 
342
348
 
343
- def cookbook_name event
349
+ def self.cookbook_name event
344
350
  repo_name(event).sub /^(app|base|realm|fork)_/, 'bjn_'
345
351
  end
346
352
 
347
353
 
348
- def cookbook_repo? event
354
+ def self.cookbook_repo? event
349
355
  repo_name(event) =~ /^(app|base|realm|fork)_/
350
356
  end
351
357
 
352
358
 
353
- def repo_url event
359
+ def self.repo_url event
354
360
  git_daemon_style_url(event).sub(/^git/, 'http').sub(/\.git$/, '')
355
361
  end
356
362
 
357
363
 
358
- def git_daemon_style_url event
364
+ def self.git_daemon_style_url event
359
365
  event['repository']['url'].sub(':', '/').sub('@', '://')
360
366
  end
361
367
 
362
368
 
363
- def gitlab_url event
369
+ def self.gitlab_url event
364
370
  url = git_daemon_style_url(event).sub(/^git/, 'http').sub(/\.git$/, '')
365
371
  "#{url}/commit/#{event['after']}"
366
372
  end
367
373
 
368
374
 
369
- def gitlab_tag_url event
375
+ def self.gitlab_tag_url event
370
376
  url = git_daemon_style_url(event).sub(/^git/, 'http').sub(/\.git$/, '')
371
377
  "#{url}/commits/#{tag_name(event)}"
372
378
  end
373
379
 
374
380
 
375
- def latest_commit event
381
+ def self.latest_commit event
376
382
  event['commits'].last['id']
377
383
  end
378
384
 
379
385
 
380
- def tagged_commit event
386
+ def self.tagged_commit event
381
387
  event['ref'] =~ %r{/tags/(.*)$}
382
388
  return $1 # First regex capture
383
389
  end
384
390
 
385
- alias_method :tag_name, :tagged_commit
391
+
392
+ def self.tag_name event
393
+ tagged_commit event
394
+ end
386
395
 
387
396
 
388
- def commit_to_master? event
397
+ def self.commit_to_master? event
389
398
  event['ref'] == 'refs/heads/master'
390
399
  end
391
400
 
392
401
 
393
- def not_deleted? event
402
+ def self.not_deleted? event
394
403
  event['after'] != '0000000000000000000000000000000000000000'
395
404
  end
396
405
 
397
406
 
398
- def commit_to_kitchen? event
407
+ def self.commit_to_kitchen? event
399
408
  repo_name(event) == 'kitchen' && not_deleted?(event)
400
409
  end
401
410
 
402
411
 
403
- def tagged_commit_to_cookbook? event
412
+ def self.tagged_commit_to_cookbook? event
404
413
  cookbook_repo?(event) &&
405
414
  event['ref'] =~ %r{/tags/} &&
406
415
  not_deleted?(event)
407
416
  end
408
417
 
409
418
 
410
- def tagged_commit_to_realm? event
419
+ def self.tagged_commit_to_realm? event
411
420
  tagged_commit_to_cookbook?(event) &&
412
421
  repo_name(event) =~ /^realm_/
413
422
  end
@@ -61,6 +61,7 @@ module KitchenHooks
61
61
  desc: 'Location of temporary directory',
62
62
  default: '/tmp'
63
63
  def server
64
+ App.backlog!
64
65
  App.db! options.database
65
66
  App.tmp! options.tmpdir
66
67
  App.config! JSON::parse(File.read(options.config))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen_hooks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.8
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Wong
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-18 00:00:00.000000000 Z
11
+ date: 2015-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hipchat