hr_deploy 0.0.1 → 0.0.2
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/bin/hr_deploy +50 -11
- data/lib/hr_deploy/deployer.rb +63 -44
- data/lib/hr_deploy/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93edb710600a30c90ce512be9dae066d6cfb64f5
|
4
|
+
data.tar.gz: 9129a7c55e56c7fed6c3a269763c22ccc6a01ceb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d84c22c58a26875b651ef921ae5ac61c25e9e4791be78f523d0abf7ceb77f6089ad9a48a834302540b3f4bce6b316a577362e8391fd66699910cf62c867df29e
|
7
|
+
data.tar.gz: 8447cc2204afa97ee798a40201a7ee2efecb13688f199f0fca99e9776a5f98fd010cc763598c5e2a3e5d24923c1f7b1d04fb45b1fcaa927df01a03d49f1a357c
|
data/bin/hr_deploy
CHANGED
@@ -29,10 +29,34 @@ def parse(opts)
|
|
29
29
|
elsif opts == ['generate']
|
30
30
|
{ command: :generate }
|
31
31
|
|
32
|
-
elsif opts.first == 'deploy'
|
33
|
-
#
|
34
|
-
|
35
|
-
|
32
|
+
elsif opts.first == 'deploy'
|
33
|
+
# Deploy command
|
34
|
+
# Possible combinations:
|
35
|
+
#
|
36
|
+
# (empty)
|
37
|
+
# (target)
|
38
|
+
# --no-confirm
|
39
|
+
# (target) --no-confirm
|
40
|
+
# --no-confirm target
|
41
|
+
|
42
|
+
deploy_options = opts[1, opts.length]
|
43
|
+
|
44
|
+
# 0 to 2 additional options to 'deploy' command
|
45
|
+
return nil unless deploy_options.length <= 2
|
46
|
+
|
47
|
+
confirm = true
|
48
|
+
confirm = false if deploy_options.delete('--no-confirm')
|
49
|
+
|
50
|
+
# After we have removed '--no-confirm', we either have one param (target) or nothing
|
51
|
+
return nil unless deploy_options.length <= 1
|
52
|
+
|
53
|
+
# 'nil' for no target (default target)
|
54
|
+
target = deploy_options.first
|
55
|
+
|
56
|
+
# Explicit target should not be a command argument
|
57
|
+
return nil if target && target.start_with?('--')
|
58
|
+
|
59
|
+
{ command: :deploy, target: target, confirm: confirm }
|
36
60
|
|
37
61
|
else
|
38
62
|
nil
|
@@ -48,8 +72,12 @@ def react(command)
|
|
48
72
|
|
49
73
|
elsif command[:command] == :generate || command[:command] == :deploy
|
50
74
|
if inside_app?
|
51
|
-
|
52
|
-
|
75
|
+
if command[:command] == :generate
|
76
|
+
generate
|
77
|
+
else
|
78
|
+
attempt_deploy(command[:target], command[:confirm])
|
79
|
+
end
|
80
|
+
|
53
81
|
else
|
54
82
|
puts 'You should be inside a Heroku app to run this command'
|
55
83
|
exit 1
|
@@ -74,7 +102,7 @@ def generate
|
|
74
102
|
end
|
75
103
|
end
|
76
104
|
|
77
|
-
def attempt_deploy(target_name)
|
105
|
+
def attempt_deploy(target_name, confirm)
|
78
106
|
|
79
107
|
# These tools are needed for all deploys
|
80
108
|
exit 1 unless tools_available?('heroku', 'git')
|
@@ -86,9 +114,11 @@ def attempt_deploy(target_name)
|
|
86
114
|
targets = raw_targets.map { |raw_target| HR_Deploy::Target.new(raw_target) }
|
87
115
|
|
88
116
|
if target_name
|
117
|
+
# Explicit target name given
|
118
|
+
|
89
119
|
target = targets.find { |target| target.name == target_name }
|
90
120
|
if target
|
91
|
-
deploy(target)
|
121
|
+
deploy(target, confirm)
|
92
122
|
else
|
93
123
|
puts "No such target: #{target_name}"
|
94
124
|
exit 1
|
@@ -106,7 +136,7 @@ def attempt_deploy(target_name)
|
|
106
136
|
exit 1
|
107
137
|
else
|
108
138
|
# Deploy default target
|
109
|
-
deploy(default_targets.first)
|
139
|
+
deploy(default_targets.first, confirm)
|
110
140
|
end
|
111
141
|
end
|
112
142
|
else
|
@@ -119,12 +149,12 @@ def attempt_deploy(target_name)
|
|
119
149
|
end
|
120
150
|
end
|
121
151
|
|
122
|
-
def deploy(target)
|
152
|
+
def deploy(target, confirm)
|
123
153
|
# Some targets need 'curl' to disable/enable New Relic pinger
|
124
154
|
exit 1 if target.requires_curl? && !tools_available?('curl')
|
125
155
|
|
126
156
|
# Actual deployment
|
127
|
-
deployer = HR_Deploy::Deployer.new(target)
|
157
|
+
deployer = HR_Deploy::Deployer.new(target, confirm)
|
128
158
|
deployer.deploy
|
129
159
|
end
|
130
160
|
|
@@ -175,10 +205,19 @@ generate Generate a config file which specifies targets to deploy to.
|
|
175
205
|
|
176
206
|
deploy [target] Deploy to [target]. If no [target] is specified, deploy
|
177
207
|
to default target specified in config.
|
208
|
+
This command supports the following options:
|
209
|
+
|
210
|
+
--no-confirm Skip confirmations while deploying.
|
211
|
+
This does not affect the initial
|
212
|
+
confirmation that triggers the deploy itself.
|
213
|
+
Default behavior is to confirm actions.
|
178
214
|
|
179
215
|
version Show gem version.
|
180
216
|
|
181
217
|
help Show help.
|
218
|
+
|
219
|
+
Verbose documentation is at:
|
220
|
+
https://github.com/enthrops/hr_deploy/blob/master/README.md
|
182
221
|
eos
|
183
222
|
|
184
223
|
puts help_string
|
data/lib/hr_deploy/deployer.rb
CHANGED
@@ -2,14 +2,18 @@ module HR_Deploy
|
|
2
2
|
|
3
3
|
class Deployer
|
4
4
|
|
5
|
+
DEBUG = false
|
6
|
+
|
5
7
|
attr_reader :target
|
6
8
|
attr_reader :pinging_interaction
|
7
9
|
attr_reader :perform_db_backup
|
10
|
+
attr_reader :confirm
|
8
11
|
|
9
|
-
def initialize(target)
|
12
|
+
def initialize(target, confirm)
|
10
13
|
@target = target
|
11
14
|
@pinging_interaction = target.requires_pinging_interaction?
|
12
15
|
@perform_db_backup = target.backup_db?
|
16
|
+
@confirm = confirm
|
13
17
|
end
|
14
18
|
|
15
19
|
def deploy
|
@@ -50,7 +54,7 @@ module HR_Deploy
|
|
50
54
|
puts 'Waiting 10 seconds for application to go live...'
|
51
55
|
sleep 10
|
52
56
|
puts 'Opening application...'
|
53
|
-
|
57
|
+
execute_system_command("heroku open --remote #{target.name}")
|
54
58
|
puts
|
55
59
|
|
56
60
|
puts "Deploy completed in #{(Time.now - start_time).round} seconds"
|
@@ -200,46 +204,61 @@ module HR_Deploy
|
|
200
204
|
end
|
201
205
|
|
202
206
|
def continue?(stage)
|
203
|
-
answered = false
|
204
207
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
208
|
+
if confirm
|
209
|
+
# User wants confirmations
|
210
|
+
|
211
|
+
answered = false
|
212
|
+
until answered
|
213
|
+
|
214
|
+
case stage
|
215
|
+
when :disabling_pinger
|
216
|
+
print 'Pinger disabled? (Yes / No) > '
|
217
|
+
when :enabling_maintenance
|
218
|
+
print 'Maintenance mode enabled? (Yes / No) > '
|
219
|
+
when :backing_up_db
|
220
|
+
print 'Database backed up? (Yes / No) > '
|
221
|
+
when :pushing_code
|
222
|
+
print 'Code pushed successfully? (Yes / No) > '
|
223
|
+
when :migrating_db
|
224
|
+
print 'Database migrated? (Yes / No) > '
|
225
|
+
when :restarting
|
226
|
+
print 'Restarted? (Yes / No) > '
|
227
|
+
when :enabling_pinger
|
228
|
+
print 'Pinger enabled? (Yes / No) > '
|
229
|
+
when :disabling_maintenance
|
230
|
+
print 'Maintenance mode disabled? (Yes / No) > '
|
231
|
+
else
|
232
|
+
raise 'Unknown stage'
|
233
|
+
end
|
227
234
|
|
228
|
-
|
235
|
+
answer = $stdin.gets.chomp
|
229
236
|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
237
|
+
if answer == 'Yes' || answer == 'yes'
|
238
|
+
answered = true
|
239
|
+
puts
|
240
|
+
yield
|
241
|
+
elsif answer == 'No' || answer == 'no'
|
242
|
+
puts
|
243
|
+
abort_deploy(nil, stage)
|
244
|
+
else
|
245
|
+
puts 'Unknown answer'
|
246
|
+
puts
|
247
|
+
end
|
240
248
|
end
|
249
|
+
|
250
|
+
else
|
251
|
+
# User does not want confirmations, continue
|
252
|
+
yield
|
241
253
|
end
|
254
|
+
end
|
242
255
|
|
256
|
+
def execute_system_command(cmd)
|
257
|
+
if DEBUG
|
258
|
+
puts "Executing command: #{cmd}"
|
259
|
+
else
|
260
|
+
system(cmd)
|
261
|
+
end
|
243
262
|
end
|
244
263
|
|
245
264
|
def check_connectivity
|
@@ -319,49 +338,49 @@ module HR_Deploy
|
|
319
338
|
|
320
339
|
def disable_pinging
|
321
340
|
puts 'Disabling availability pinger...'
|
322
|
-
|
341
|
+
execute_system_command("curl #{target.disable_pinger_url}")
|
323
342
|
puts
|
324
343
|
end
|
325
344
|
|
326
345
|
def enable_maintenance
|
327
346
|
puts 'Enabling maintenance mode...'
|
328
|
-
|
347
|
+
execute_system_command("heroku maintenance:on --remote #{target.name}")
|
329
348
|
puts
|
330
349
|
end
|
331
350
|
|
332
351
|
def backup_db
|
333
352
|
puts 'Backing up database...'
|
334
|
-
|
353
|
+
execute_system_command("heroku pgbackups:capture --expire --remote #{target.name}")
|
335
354
|
puts
|
336
355
|
end
|
337
356
|
|
338
357
|
def push_code
|
339
358
|
puts 'Pushing code...'
|
340
|
-
|
359
|
+
execute_system_command("git push #{target.name} master")
|
341
360
|
puts
|
342
361
|
end
|
343
362
|
|
344
363
|
def migrate_db
|
345
364
|
puts 'Migrating database...'
|
346
|
-
|
365
|
+
execute_system_command("heroku run rake db:migrate --remote #{target.name}")
|
347
366
|
puts
|
348
367
|
end
|
349
368
|
|
350
369
|
def restart
|
351
370
|
puts 'Restarting...'
|
352
|
-
|
371
|
+
execute_system_command("heroku restart --remote #{target.name}")
|
353
372
|
puts
|
354
373
|
end
|
355
374
|
|
356
375
|
def enable_pinging
|
357
376
|
puts 'Enabling availability pinger...'
|
358
|
-
|
377
|
+
execute_system_command("curl #{target.enable_pinger_url}")
|
359
378
|
puts
|
360
379
|
end
|
361
380
|
|
362
381
|
def disable_maintenance
|
363
382
|
puts 'Disabling maintenance mode...'
|
364
|
-
|
383
|
+
execute_system_command("heroku maintenance:off --remote #{target.name}")
|
365
384
|
puts
|
366
385
|
end
|
367
386
|
end
|
data/lib/hr_deploy/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hr_deploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Gubitskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Easily deploy your Rails apps to Heroku with one command, automatically
|
14
14
|
taking care of things such as checking current Heroku status, enabling maintenance
|