kapost_deploy 0.4.0 → 0.7.1

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: ec74484d566600db2d970d3cd10cdbc0d3bdf18a
4
- data.tar.gz: 9bea6eee09788817bf41aa9fe3b61896bc1ebd17
2
+ SHA256:
3
+ metadata.gz: 9946144c4a24cb25f8839558ed68853bc21bc15665b034f8ea4dab6dcdaf8a40
4
+ data.tar.gz: 3c98682b39c13573861145853c01decee5204ceaa90e04402d08965c0ac40c41
5
5
  SHA512:
6
- metadata.gz: 7957a7ca81654118b1749d8c54baf5ba5cbe71ffcce966ec3b4c6e94f4d5a588d30394efe6a12e1714135ef73784830fdc70675e7498e593bd8235e9bfc10e5a
7
- data.tar.gz: 5e12d896124256040f0880a90064d53425cf0d2c2cca7ebd329c4a748db67961e55b9199044763b05fcf4dc3de5a3b43ef9a16124b2061488461b88a54bb71a3
6
+ metadata.gz: 47420c24bd5ea117fd04426971e43c60a4af20f1b5ade7fd51660c3fa3ddf1f656e82fe9a8830e60784940fe49bb742e8edce5faf08efa27105eb816dc4fa8dc
7
+ data.tar.gz: 677d49d0ecddd4fa4e630f0bd5c048fc877cfe33b4a666c222743bcaebdc80471c76f8ef4189d8dea8cb7dc326c2f055afaa6d32ef873daaf9eb1a8445ed7144
data/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  <!-- Tocer[start]: Auto-generated, don't remove. -->
8
8
 
9
- # Table of Contents
9
+ ## Table of Contents
10
10
 
11
11
  - [Features](#features)
12
12
  - [Requirements](#requirements)
@@ -12,7 +12,7 @@ module KapostDeploy
12
12
  end
13
13
 
14
14
  def self.version
15
- "0.4.0"
15
+ "0.7.1"
16
16
  end
17
17
 
18
18
  def self.version_label
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "kapost_deploy/heroku/app_releases"
4
+ require "kapost_deploy/seismograph/notifier"
5
+
6
+ module KapostDeploy
7
+ module Plugins
8
+ # Notify Datadog (via seismograph) about deployments by:
9
+ # - sending deployment timing
10
+ # - logging an info event
11
+ class NotifyDatadogAfterPromote
12
+ def initialize(config,
13
+ notifier: KapostDeploy::Seismograph::Notifier.new,
14
+ ahead_releases: KapostDeploy::Heroku::AppReleases.new(config.app, token: config.heroku_api_token))
15
+ self.config = config
16
+ self.notifier = notifier
17
+ self.ahead_releases = ahead_releases
18
+ end
19
+
20
+ def before
21
+ @start_time = Time.now
22
+ end
23
+
24
+ def after
25
+ return unless start_time
26
+
27
+ notify_datadog
28
+ end
29
+
30
+ private
31
+
32
+ attr_accessor :config,
33
+ :notifier,
34
+ :ahead_releases,
35
+ :start_time
36
+
37
+ def notify_datadog
38
+ time_elapsed = Time.now - start_time
39
+
40
+ notifier.timing "deploy", time_elapsed, tags
41
+ notifier.info "Deployed #{github_repo} to #{env}"
42
+ end
43
+
44
+ def tags
45
+ [
46
+ "env:#{env}",
47
+ "sha:#{commit_sha}",
48
+ "repository:#{github_repo}"
49
+ ]
50
+ end
51
+
52
+ def env
53
+ config.to.split("-").last
54
+ end
55
+
56
+ def commit_sha
57
+ ci_sha || pipeline_sha
58
+ end
59
+
60
+ def ci_sha
61
+ ENV["CIRCLE_SHA1"]
62
+ end
63
+
64
+ def pipeline_sha
65
+ ahead_releases.latest_deploy_version
66
+ end
67
+
68
+ def github_repo
69
+ config.options.fetch(:git_config).fetch(:github_repo)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KapostDeploy
4
+ module Seismograph
5
+ def self.seismograph_adapter
6
+ require "seismograph"
7
+ ::Seismograph
8
+ rescue LoadError
9
+ NullAdapter
10
+ end
11
+
12
+ # Wrapper for seismograph gem
13
+ class Notifier
14
+ extend Forwardable
15
+
16
+ def_delegator :sensor, :timing
17
+ def_delegator :logger, :info
18
+
19
+ def initialize
20
+ self.adapter = KapostDeploy::Seismograph.seismograph_adapter
21
+ end
22
+
23
+ private
24
+
25
+ attr_accessor :adapter
26
+
27
+ def sensor
28
+ @sensor ||= adapter::Sensor.new(:kapost_deploy)
29
+ end
30
+
31
+ def logger
32
+ adapter::Log
33
+ end
34
+ end
35
+
36
+ module NullAdapter
37
+ class Sensor
38
+ def initialize(_namespace); end
39
+
40
+ def timing(_description, _duration, _params = {}); end
41
+ end
42
+
43
+ module Log
44
+ def self.info(_message, _params = {}); end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -87,21 +87,29 @@ module KapostDeploy
87
87
 
88
88
  private
89
89
 
90
- def initialize(name)
90
+ def initialize(name, scope: Rake.application.current_scope.path)
91
91
  defaults
92
- self.name = name
92
+ @name = name
93
+ @scope = scope
93
94
  end
94
95
 
95
96
  attr_accessor :plugins
97
+ attr_reader :scope
98
+
99
+ def hook_name(type)
100
+ return "#{name}:#{type}_#{name}" if scope.empty?
101
+ "#{scope}:#{name}:#{type}_#{name}"
102
+ end
96
103
 
97
104
  def promoter
105
+ fail "`HEROKU_DEPLOY_API_TOKEN` env var must be provided" unless heroku_api_token
98
106
  @promoter ||= KapostDeploy::Heroku::AppPromoter.new(pipeline, token: heroku_api_token)
99
107
  end
100
108
 
101
109
  def promote_with_hooks
102
- Rake.application[:"#{name}:before_#{name}"].execute
110
+ Rake.application[hook_name("before")].execute
103
111
  promoter.promote(from: app, to: to)
104
- Rake.application[:"#{name}:after_#{name}"].execute
112
+ Rake.application[hook_name("after")].execute
105
113
  end
106
114
 
107
115
  def shell(command)
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kapost_deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Croft
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-09 00:00:00.000000000 Z
11
+ date: 2020-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rake
14
+ name: honeybadger
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '10.0'
19
+ version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '10.0'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: platform-api
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -39,63 +39,77 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.6.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: slack-notify
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.4.1
47
+ version: '10.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.4.1
54
+ version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: honeybadger
56
+ name: slack-notify
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '2.0'
61
+ version: '0.6'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '2.0'
68
+ version: '0.6'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.11'
75
+ version: '2.1'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.11'
82
+ version: '2.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: climate_control
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: gemsmith
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '7.7'
103
+ version: '13.8'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '7.7'
110
+ version: '13.8'
97
111
  - !ruby/object:Gem::Dependency
98
- name: pry
112
+ name: guard-rspec
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -109,7 +123,7 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: pry-byebug
126
+ name: pry
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="
@@ -123,7 +137,7 @@ dependencies:
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
- name: pry-state
140
+ name: pry-byebug
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - ">="
@@ -137,19 +151,19 @@ dependencies:
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
- name: rspec
154
+ name: pry-state
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
- - - "~>"
157
+ - - ">="
144
158
  - !ruby/object:Gem::Version
145
- version: '3.4'
159
+ version: '0'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
- - - "~>"
164
+ - - ">="
151
165
  - !ruby/object:Gem::Version
152
- version: '3.4'
166
+ version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: rb-fsevent
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -165,35 +179,35 @@ dependencies:
165
179
  - !ruby/object:Gem::Version
166
180
  version: '0'
167
181
  - !ruby/object:Gem::Dependency
168
- name: guard-rspec
182
+ name: rspec
169
183
  requirement: !ruby/object:Gem::Requirement
170
184
  requirements:
171
- - - ">="
185
+ - - "~>"
172
186
  - !ruby/object:Gem::Version
173
- version: '0'
187
+ version: '3.4'
174
188
  type: :development
175
189
  prerelease: false
176
190
  version_requirements: !ruby/object:Gem::Requirement
177
191
  requirements:
178
- - - ">="
192
+ - - "~>"
179
193
  - !ruby/object:Gem::Version
180
- version: '0'
194
+ version: '3.4'
181
195
  - !ruby/object:Gem::Dependency
182
- name: terminal-notifier
196
+ name: rubocop
183
197
  requirement: !ruby/object:Gem::Requirement
184
198
  requirements:
185
- - - ">="
199
+ - - "~>"
186
200
  - !ruby/object:Gem::Version
187
- version: '0'
201
+ version: '0.52'
188
202
  type: :development
189
203
  prerelease: false
190
204
  version_requirements: !ruby/object:Gem::Requirement
191
205
  requirements:
192
- - - ">="
206
+ - - "~>"
193
207
  - !ruby/object:Gem::Version
194
- version: '0'
208
+ version: '0.52'
195
209
  - !ruby/object:Gem::Dependency
196
- name: terminal-notifier-guard
210
+ name: seismograph
197
211
  requirement: !ruby/object:Gem::Requirement
198
212
  requirements:
199
213
  - - ">="
@@ -207,21 +221,21 @@ dependencies:
207
221
  - !ruby/object:Gem::Version
208
222
  version: '0'
209
223
  - !ruby/object:Gem::Dependency
210
- name: rubocop
224
+ name: simplecov
211
225
  requirement: !ruby/object:Gem::Requirement
212
226
  requirements:
213
- - - "~>"
227
+ - - ">="
214
228
  - !ruby/object:Gem::Version
215
- version: '0.40'
229
+ version: '0'
216
230
  type: :development
217
231
  prerelease: false
218
232
  version_requirements: !ruby/object:Gem::Requirement
219
233
  requirements:
220
- - - "~>"
234
+ - - ">="
221
235
  - !ruby/object:Gem::Version
222
- version: '0.40'
236
+ version: '0'
223
237
  - !ruby/object:Gem::Dependency
224
- name: codeclimate-test-reporter
238
+ name: terminal-notifier
225
239
  requirement: !ruby/object:Gem::Requirement
226
240
  requirements:
227
241
  - - ">="
@@ -235,7 +249,7 @@ dependencies:
235
249
  - !ruby/object:Gem::Version
236
250
  version: '0'
237
251
  - !ruby/object:Gem::Dependency
238
- name: climate_control
252
+ name: terminal-notifier-guard
239
253
  requirement: !ruby/object:Gem::Requirement
240
254
  requirements:
241
255
  - - ">="
@@ -263,10 +277,12 @@ files:
263
277
  - lib/kapost_deploy/heroku/shell.rb
264
278
  - lib/kapost_deploy/identity.rb
265
279
  - lib/kapost_deploy/plugins/db_migrate.rb
280
+ - lib/kapost_deploy/plugins/notify_datadog_after_promote.rb
266
281
  - lib/kapost_deploy/plugins/notify_honeybadger_after_promote.rb
267
282
  - lib/kapost_deploy/plugins/slack_after_promote.rb
268
283
  - lib/kapost_deploy/plugins/slack_github_diff.rb
269
284
  - lib/kapost_deploy/plugins/validate_before_promote.rb
285
+ - lib/kapost_deploy/seismograph/notifier.rb
270
286
  - lib/kapost_deploy/slack/notifier.rb
271
287
  - lib/kapost_deploy/task.rb
272
288
  - lib/tasks/console.rake
@@ -276,7 +292,7 @@ homepage: https://github.com/kapost/kapost_deploy
276
292
  licenses:
277
293
  - MIT
278
294
  metadata: {}
279
- post_install_message:
295
+ post_install_message:
280
296
  rdoc_options: []
281
297
  require_paths:
282
298
  - lib
@@ -291,9 +307,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
291
307
  - !ruby/object:Gem::Version
292
308
  version: '0'
293
309
  requirements: []
294
- rubyforge_project:
295
- rubygems_version: 2.5.1
296
- signing_key:
310
+ rubygems_version: 3.0.3
311
+ signing_key:
297
312
  specification_version: 4
298
313
  summary: Deployment rake tasks for Kapost applications
299
314
  test_files: []