hu 1.3.5 → 1.3.6
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/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
|