hu 1.3.5 → 1.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hu/deploy.rb +93 -27
- data/lib/hu/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: 61e3b5270bf085d9b7027fba304081beafad7410
|
4
|
+
data.tar.gz: f109881ac2f36bb35e04b4d9bb98428d73b3f854
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: adbb4b03a6c2d9159b4e50b6a2717c1c7f55f43833df29fb648ebca76989a3c8e4ab03360684d8f0e9a569489eef852ce87bad556093d659a845963eb82b5a56
|
7
|
+
data.tar.gz: 98a39b7b4499614550b9209fa6b4d63005110fc4a638200b3b73b6fbe7eb113c8b1e6240b6f0f99374861e2023247b7bb8ada282f625e81f0a464fcfd47302c9
|
data/lib/hu/deploy.rb
CHANGED
@@ -13,6 +13,10 @@ require 'tempfile'
|
|
13
13
|
require 'thread_safe'
|
14
14
|
require 'io/console'
|
15
15
|
require 'rugged'
|
16
|
+
require 'pty'
|
17
|
+
require 'thread'
|
18
|
+
require 'paint'
|
19
|
+
require 'lolcat/lol'
|
16
20
|
|
17
21
|
module Hu
|
18
22
|
class Cli < Optix::Cli
|
@@ -203,7 +207,7 @@ module Hu
|
|
203
207
|
puts " If everything looks good, you may proceed and finish the release."
|
204
208
|
puts " If there are problems: Quit, delete the release branch and start fixing."
|
205
209
|
puts
|
206
|
-
elsif git_revisions[prod_app_name] != git_revisions[stag_app_name]
|
210
|
+
elsif git_revisions[prod_app_name] != git_revisions[stag_app_name] and !release_branch_exists and git_revisions[:release] != git_revisions[stag_app_name]
|
207
211
|
puts "Phase 3/3: HEADS UP. This is the last chance to detect problems."
|
208
212
|
puts " The final version of "+"release/#{release_tag}".bright+" is now staged."
|
209
213
|
puts
|
@@ -263,13 +267,23 @@ module Hu
|
|
263
267
|
}
|
264
268
|
unless 0 == finish_release(release_tag, env)
|
265
269
|
abort_merge
|
266
|
-
puts "*** ERROR!
|
270
|
+
puts "*** ERROR! Could not finish release *** ".color(:red)
|
271
|
+
puts
|
272
|
+
puts "This usually means a merge conflict or"
|
273
|
+
puts "something similarly complicated has occured."
|
274
|
+
puts
|
275
|
+
puts "Please bring the universe into a state"
|
276
|
+
puts "where the above command succeeds, then try again."
|
277
|
+
puts
|
278
|
+
exit 1
|
267
279
|
end
|
268
280
|
ENV['EDITOR'] = old_editor
|
269
281
|
anykey
|
270
282
|
when :push_to_staging
|
271
|
-
|
272
|
-
|
283
|
+
run_each <<-EOS.strip_heredoc
|
284
|
+
:stream
|
285
|
+
git push #{push_url} release/#{release_tag}:master -f
|
286
|
+
EOS
|
273
287
|
anykey
|
274
288
|
when :abort_ask
|
275
289
|
puts if delete_branch("release/#{release_tag}")
|
@@ -292,7 +306,7 @@ module Hu
|
|
292
306
|
|
293
307
|
def show_pipeline_status(pipeline_name, stag_app_name, prod_app_name, release_tag, clear=true)
|
294
308
|
table = TTY::Table.new header: %w{location commit tag app_last_modified app_last_modified_by dynos# state}
|
295
|
-
busy '
|
309
|
+
busy 'loading', :classic
|
296
310
|
ts = []
|
297
311
|
tpl_row = ['?', '', '', '', '', '', '']
|
298
312
|
revs = ThreadSafe::Hash.new
|
@@ -415,34 +429,84 @@ module Hu
|
|
415
429
|
@h ||= PlatformAPI.connect_oauth(Hu::API_TOKEN)
|
416
430
|
end
|
417
431
|
|
418
|
-
def run_each(script)
|
419
|
-
|
420
|
-
|
421
|
-
|
432
|
+
def run_each(script, opts={})
|
433
|
+
opts = {
|
434
|
+
quiet: false,
|
435
|
+
failfast: true,
|
436
|
+
spinner: true,
|
437
|
+
stream: false
|
438
|
+
}.merge(opts)
|
439
|
+
|
440
|
+
@spinlock ||= Mutex.new # :P
|
422
441
|
script.lines.each_with_index do |line, i|
|
423
442
|
line.chomp!
|
424
443
|
case line[0]
|
425
444
|
when '#'
|
426
|
-
puts "\n" + line.bright unless quiet
|
445
|
+
puts "\n" + line.bright unless opts[:quiet]
|
427
446
|
when ':'
|
428
|
-
quiet
|
429
|
-
failfast = false if line == ':return'
|
430
|
-
spinner = false if line == ':nospinner'
|
447
|
+
opts[:quiet] = true if line == ':quiet'
|
448
|
+
opts[:failfast] = false if line == ':return'
|
449
|
+
opts[:spinner] = false if line == ':nospinner'
|
450
|
+
if line == ':stream'
|
451
|
+
opts[:stream] = true
|
452
|
+
opts[:quiet] = false
|
453
|
+
end
|
431
454
|
end
|
432
455
|
next if line.empty? or ['#', ':'].include? line[0]
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
456
|
+
|
457
|
+
status = nil
|
458
|
+
if opts[:stream]
|
459
|
+
puts "\n> ".color(:green) + line.color(:black).bright
|
460
|
+
PTY.spawn(line) do |r,w,pid|
|
461
|
+
@tspin ||= Thread.new do
|
462
|
+
@minispin_last_char = Time.now
|
463
|
+
i = 0
|
464
|
+
loop do
|
465
|
+
break if @minispin_last_char == :end
|
466
|
+
if 0.23 > Time.now - @minispin_last_char
|
467
|
+
sleep 0.1
|
468
|
+
next
|
469
|
+
end
|
470
|
+
@spinlock.synchronize {
|
471
|
+
print "\e[?25l"
|
472
|
+
print Paint[' ', '#000', Lol.rainbow(1, i/3.0)]
|
473
|
+
sleep 0.12
|
474
|
+
print 8.chr
|
475
|
+
print ' '
|
476
|
+
print 8.chr
|
477
|
+
i += 1
|
478
|
+
print "\e[?25h"
|
479
|
+
}
|
480
|
+
end
|
481
|
+
end
|
482
|
+
|
483
|
+
while !r.eof?
|
484
|
+
c = r.getc
|
485
|
+
@spinlock.synchronize {
|
486
|
+
print c
|
487
|
+
@minispin_last_char = Time.now
|
488
|
+
}
|
489
|
+
end
|
490
|
+
pid, status = Process.wait2(pid)
|
491
|
+
@minispin_last_char = :end
|
492
|
+
@tspin.join
|
493
|
+
@tspin = nil
|
494
|
+
#status = PTY.check(pid)
|
495
|
+
end
|
496
|
+
else
|
497
|
+
busy line if opts[:spinner]
|
498
|
+
output, status = Open3.capture2e(line)
|
499
|
+
unbusy if opts[:spinner]
|
500
|
+
color = (status.exitstatus == 0) ? :green : :red
|
501
|
+
if status.exitstatus != 0 or !opts[:quiet]
|
502
|
+
puts "\n> ".color(color) + line.color(:black).bright
|
503
|
+
puts output
|
504
|
+
end
|
440
505
|
end
|
441
506
|
if status.exitstatus != 0
|
442
|
-
shutdown if failfast
|
443
|
-
puts "Error
|
444
|
-
|
445
|
-
exit status.exitstatus if failfast
|
507
|
+
shutdown if opts[:failfast]
|
508
|
+
puts "Error, exit #{status.exitstatus}: #{line} (L#{i})".color(:red).bright
|
509
|
+
exit status.exitstatus if opts[:failfast]
|
446
510
|
return status.exitstatus
|
447
511
|
end
|
448
512
|
end
|
@@ -621,6 +685,7 @@ module Hu
|
|
621
685
|
|
622
686
|
def promote_to_production
|
623
687
|
run_each <<-EOS.strip_heredoc
|
688
|
+
:stream
|
624
689
|
:return
|
625
690
|
|
626
691
|
# Promote staging to production
|
@@ -641,6 +706,7 @@ module Hu
|
|
641
706
|
end
|
642
707
|
|
643
708
|
run_each <<-EOS.strip_heredoc
|
709
|
+
:stream
|
644
710
|
:return
|
645
711
|
# Finish release
|
646
712
|
git flow release finish #{release_tag}
|
@@ -679,10 +745,10 @@ module Hu
|
|
679
745
|
unbusy
|
680
746
|
end
|
681
747
|
|
682
|
-
def busy(msg='', format=:classic)
|
748
|
+
def busy(msg='', format=:classic, clear=true)
|
683
749
|
return if @@shutting_down
|
684
750
|
format ||= TTY::Formats::FORMATS.keys.sample
|
685
|
-
options = {format: format, hide_cursor: true, error_mark: "\e[31;1m✖\e[0m", success_mark: "\e[32;1m✔\e[0m", clear:
|
751
|
+
options = {format: format, hide_cursor: true, error_mark: "\e[31;1m✖\e[0m", success_mark: "\e[32;1m✔\e[0m", clear: clear}
|
686
752
|
@@spinner = TTY::Spinner.new("\e[0;1m#{msg}#{msg.empty? ? '' : ' '}\e[0m\e[32;1m:spinner\e[0m", options)
|
687
753
|
@@spinner.start
|
688
754
|
end
|
@@ -713,7 +779,7 @@ module Hu
|
|
713
779
|
end
|
714
780
|
|
715
781
|
def safe_abort
|
716
|
-
|
782
|
+
@spinner&.stop
|
717
783
|
printf "\e[0m\e[?25l"
|
718
784
|
printf '(ヘ・_・)ヘ┳━┳'
|
719
785
|
sleep 0.5
|
data/lib/hu/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- moe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|