hu 1.3.23 → 1.4.0
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/.rubocop_todo.yml +2 -2
- data/lib/hu/deploy.rb +62 -41
- data/lib/hu/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 154e304d7bbeb118a8dc0ff897ccb0dc6215bd1b
|
4
|
+
data.tar.gz: 8c8378d3a43cf0c3489ad3506093640732aa9482
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65d0637b1b9bde463b4c52e04239655fecc1a68e73fcfea8d41fdcd40807bb31b8c758a6de9e046b843842064b3716ffe51bc70dc17e500f880d2f2e9d726e60
|
7
|
+
data.tar.gz: 5283ad18537bd354ee872138279bd723919e3aeda0420f1371e3d8c3f9e5e498d71b8d087ce4a28f94b12b497283c5fae12fcc49e729b0b81a2b8f30800993a7
|
data/.rubocop_todo.yml
CHANGED
@@ -6,12 +6,12 @@ Lint/HandleExceptions:
|
|
6
6
|
|
7
7
|
# Offense count: 6
|
8
8
|
Metrics/CyclomaticComplexity:
|
9
|
-
Max:
|
9
|
+
Max: 450
|
10
10
|
|
11
11
|
# Offense count: 15
|
12
12
|
# Configuration parameters: CountComments.
|
13
13
|
Metrics/MethodLength:
|
14
|
-
Max:
|
14
|
+
Max: 500
|
15
15
|
|
16
16
|
# Offense count: 4
|
17
17
|
Metrics/PerceivedComplexity:
|
data/lib/hu/deploy.rb
CHANGED
@@ -137,7 +137,7 @@ module Hu
|
|
137
137
|
end
|
138
138
|
|
139
139
|
stag_app_name = app['name']
|
140
|
-
busy
|
140
|
+
busy 'synchronizing', :dots
|
141
141
|
prod_app_name = h.app.info(prod_app_id)['name']
|
142
142
|
unbusy
|
143
143
|
|
@@ -189,7 +189,7 @@ module Hu
|
|
189
189
|
release_branch_exists = branch_exists?("release/#{release_tag}")
|
190
190
|
|
191
191
|
if release_branch_exists
|
192
|
-
puts "\nThis release will be " + release_tag.color(:
|
192
|
+
puts "\nThis release will be " + release_tag.color(:green).bright
|
193
193
|
unless highest_version == 'v0.0.0'
|
194
194
|
env = {
|
195
195
|
'PREVIOUS_TAG' => highest_version,
|
@@ -207,29 +207,29 @@ module Hu
|
|
207
207
|
puts
|
208
208
|
|
209
209
|
unless git_revisions[:release] == git_revisions[stag_app_name] || !release_branch_exists
|
210
|
-
puts 'Phase 1/3
|
211
|
-
puts '
|
212
|
-
puts '
|
210
|
+
puts ' Phase 1/3 '.inverse + ' The local release branch ' + "release/#{release_tag}".bright + ' was created.'
|
211
|
+
puts ' Nothing else has happened so far. Push this branch to'
|
212
|
+
puts ' ' + stag_app_name.to_s.bright + ' to begin the deploy procedure.'
|
213
213
|
puts
|
214
214
|
Hu::Tm.t(:phase1, cmd: 'deploy')
|
215
215
|
end
|
216
216
|
|
217
217
|
if release_branch_exists && git_revisions[:release] == git_revisions[stag_app_name]
|
218
|
-
puts 'Phase 2/3
|
219
|
-
puts '
|
220
|
-
puts '
|
221
|
-
puts '
|
218
|
+
puts ' Phase 2/3 '.inverse + ' Your local ' + "release/#{release_tag}".bright + ' (formerly ' + 'develop'.bright + ') is live at ' + stag_app_name.to_s.bright + '.'
|
219
|
+
puts ' Please test here: ' + (app['web_url']).to_s.bright
|
220
|
+
puts ' If everything looks good, you may proceed and finish the release.'
|
221
|
+
puts ' If there are problems: Quit, delete the release branch and start fixing.'
|
222
222
|
puts
|
223
223
|
Hu::Tm.t(:phase2, cmd: 'deploy')
|
224
224
|
elsif git_revisions[prod_app_name] != git_revisions[stag_app_name] && !release_branch_exists && git_revisions[:release] != git_revisions[stag_app_name]
|
225
|
-
puts 'Phase 3/3
|
226
|
-
puts '
|
225
|
+
puts ' Phase 3/3 '.inverse + ' HEADS UP! This is the last chance to detect problems.'
|
226
|
+
puts ' The final version of ' + "release/#{release_tag}".bright + ' is now staged.'
|
227
227
|
puts
|
228
|
-
puts '
|
228
|
+
puts ' Test here: ' + (app['web_url']).to_s.bright
|
229
229
|
sleep 1
|
230
230
|
puts
|
231
|
-
puts '
|
232
|
-
puts "
|
231
|
+
puts ' This is the exact version that will be promoted to production.'
|
232
|
+
puts " From here you are on your own. Good luck #{`whoami`.chomp}!"
|
233
233
|
puts
|
234
234
|
Hu::Tm.t(:phase3, cmd: 'deploy')
|
235
235
|
end
|
@@ -262,8 +262,6 @@ module Hu
|
|
262
262
|
end
|
263
263
|
end
|
264
264
|
|
265
|
-
puts
|
266
|
-
|
267
265
|
case choice
|
268
266
|
when :DEPLOY
|
269
267
|
Hu::Tm.t(:promote_begin, cmd: 'deploy')
|
@@ -328,19 +326,23 @@ module Hu
|
|
328
326
|
release_tag, branch_already_exists = prompt_for_release_tag(major_bump, major_bump)
|
329
327
|
Hu::Tm.t(:switch_release_type, bump: 'major', cmd: 'deploy')
|
330
328
|
end
|
329
|
+
when :refresh
|
330
|
+
puts
|
331
331
|
end
|
332
332
|
end
|
333
333
|
end
|
334
334
|
|
335
335
|
def show_pipeline_status(pipeline_name, stag_app_name, prod_app_name, release_tag, clear = true)
|
336
336
|
table = TTY::Table.new header: %w(location commit tag app_last_modified app_last_modified_by dynos# state)
|
337
|
-
busy '
|
337
|
+
busy 'synchronizing', :huroku
|
338
338
|
ts = []
|
339
339
|
workers = []
|
340
340
|
tpl_row = ['?', '', '', '', '', '', '']
|
341
341
|
revs = ThreadSafe::Hash.new
|
342
342
|
app_config = ThreadSafe::Hash.new
|
343
343
|
|
344
|
+
revs[:develop] = `git rev-parse develop`[0..5]
|
345
|
+
|
344
346
|
[[0, stag_app_name], [1, prod_app_name]].each do |idx, app_name|
|
345
347
|
workers << Thread.new do
|
346
348
|
# config vars
|
@@ -375,6 +377,8 @@ module Hu
|
|
375
377
|
|
376
378
|
revs[app_name] = table_row[1] = slug_info['commit'][0..5]
|
377
379
|
|
380
|
+
table_row[1] = table_row[1].color(table_row[1] == revs[:develop] ? :green : :red)
|
381
|
+
|
378
382
|
table_row[2] = `git tag --points-at #{slug_info['commit']} 2>/dev/null`
|
379
383
|
table_row[2] = '' unless $?.success?
|
380
384
|
|
@@ -406,19 +410,21 @@ module Hu
|
|
406
410
|
row[0] = 'master'
|
407
411
|
revs[:master] = row[1] = `git rev-parse master`[0..5]
|
408
412
|
row[2] = `git tag --points-at master`
|
413
|
+
row[1] = row[1].color(row[1] == revs[:develop] ? :green : :red)
|
409
414
|
rows.unshift row
|
410
415
|
|
411
416
|
if branch_exists? "release/#{release_tag}"
|
412
417
|
row = tpl_row.dup
|
413
418
|
row[0] = "release/#{release_tag}"
|
414
419
|
revs["release/#{release_tag}"] = revs[:release] = row[1] = `git rev-parse release/#{release_tag}`[0..5]
|
420
|
+
row[1] = row[1].color(row[1] == revs[:release] ? :green : :red)
|
415
421
|
row[2] = `git tag --points-at release/#{release_tag} 2>/dev/null`
|
416
422
|
rows.unshift row
|
417
423
|
end
|
418
424
|
|
419
425
|
row = tpl_row.dup
|
420
426
|
row[0] = 'develop'
|
421
|
-
|
427
|
+
row[1] = revs[:develop].color(:green)
|
422
428
|
row[2] = `git tag --points-at develop`
|
423
429
|
rows.unshift row
|
424
430
|
|
@@ -448,7 +454,7 @@ module Hu
|
|
448
454
|
end
|
449
455
|
|
450
456
|
def heroku_app_by_git(git_url)
|
451
|
-
busy('
|
457
|
+
busy('synchronizing', :dots)
|
452
458
|
r = h.app.list.select { |e| e['git_url'] == git_url }
|
453
459
|
unbusy
|
454
460
|
raise "FATAL: Found multiple heroku apps with git_url=#{git_url}" if r.length > 1
|
@@ -456,7 +462,7 @@ module Hu
|
|
456
462
|
end
|
457
463
|
|
458
464
|
def heroku_pipeline_details(app)
|
459
|
-
busy('
|
465
|
+
busy('synchronizing', :dots)
|
460
466
|
couplings = h.pipeline_coupling.list
|
461
467
|
unbusy
|
462
468
|
r = couplings.select { |e| e['app']['id'] == app['id'] }
|
@@ -689,38 +695,53 @@ module Hu
|
|
689
695
|
EOS
|
690
696
|
end
|
691
697
|
|
692
|
-
def prompt_for_release_tag(
|
698
|
+
def prompt_for_release_tag(_propose_version = 'v0.0.1', try_version = nil, keep_existing = false)
|
693
699
|
prompt = TTY::Prompt.new
|
694
700
|
loop do
|
695
701
|
if try_version
|
696
702
|
release_tag = try_version
|
697
|
-
try_version = nil
|
698
|
-
else
|
699
|
-
show_existing_git_tags
|
700
|
-
release_tag = prompt.ask('Please enter a tag for this release', default: propose_version)
|
701
|
-
begin
|
702
|
-
unless release_tag[0] == 'v'
|
703
|
-
raise ArgumentError, 'Version string must start with the letter v'
|
704
|
-
end
|
705
|
-
raise ArgumentError, 'too short' if release_tag.length < 5
|
706
|
-
Versionomy.parse(release_tag)
|
707
|
-
rescue => e
|
708
|
-
puts "Error: Tag does not look like a semantic version (#{e})".color(:red)
|
709
|
-
next
|
710
|
-
end
|
703
|
+
# try_version = nil
|
711
704
|
end
|
705
|
+
# else
|
706
|
+
# show_existing_git_tags
|
707
|
+
# release_tag = prompt.ask('Please enter a tag for this release', default: propose_version)
|
708
|
+
# begin
|
709
|
+
# unless release_tag[0] == 'v'
|
710
|
+
# raise ArgumentError, 'Version string must start with the letter v'
|
711
|
+
# end
|
712
|
+
# raise ArgumentError, 'too short' if release_tag.length < 5
|
713
|
+
# Versionomy.parse(release_tag)
|
714
|
+
# rescue => e
|
715
|
+
# puts "Error: Tag does not look like a semantic version (#{e})".color(:red)
|
716
|
+
# next
|
717
|
+
# end
|
718
|
+
# end
|
712
719
|
|
713
720
|
branches = `git for-each-ref refs/heads/ --format='%(refname:short)'`.lines.map(&:chomp)
|
714
721
|
existing_branch = branches.find { |b| b.start_with? 'release/' }
|
715
722
|
branch_already_exists = !existing_branch.nil?
|
716
723
|
release_tag = existing_branch[8..-1] if keep_existing && branch_already_exists
|
717
724
|
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
725
|
+
revs = {}
|
726
|
+
revs[:develop] = `git rev-parse develop`[0..5]
|
727
|
+
revs[:release] = `git rev-parse release/#{release_tag}`[0..5] if branch_already_exists
|
728
|
+
|
729
|
+
if branch_already_exists && revs[:develop] != revs[:release]
|
730
|
+
puts
|
731
|
+
|
732
|
+
puts 'Oops!'.bright
|
733
|
+
puts
|
734
|
+
puts 'Your release-branch ' + "release/#{release_tag}".bright + ' is out of sync with ' + 'develop'.bright + '.'
|
735
|
+
puts
|
736
|
+
puts 'develop is at ' + revs[:develop].bright + ", release/#{release_tag} is at " + revs[:release].bright + '.'
|
737
|
+
puts
|
738
|
+
puts 'This usually means the release branch is old and does not'
|
739
|
+
puts 'not reflect what you actually want to deploy right now.'
|
740
|
+
puts
|
741
|
+
choice = prompt.select('What shall we do?') do |menu|
|
742
|
+
menu.enum '.'
|
743
|
+
menu.choice "Delete branch 'release/#{release_tag}' and create new release branch from 'develop'", :delete
|
744
|
+
menu.choice 'Quit - do nothing, let me inspect the situation', :quit
|
724
745
|
end
|
725
746
|
|
726
747
|
case choice
|
data/lib/hu/version.rb
CHANGED