lib/hu/deploy.rb in hu-1.3.16 vs lib/hu/deploy.rb in hu-1.3.17

- old
+ new

@@ -37,14 +37,15 @@ exit 1 end end def deploy(_cmd, _opts, _argv) + Hu::Tm.t(:invoke, cmd: 'deploy') trap('INT') { shutdown; safe_abort; exit 1 } at_exit do + shutdown if $ERROR_INFO.class == SystemExit && 130 == $ERROR_INFO.status - shutdown puts safe_abort end end @@ -55,10 +56,11 @@ puts "Git error: #{e}".color(:red) puts 'You need to be inside the working copy of the app that you wish to deploy.'.color(:red) puts safe_abort print TTY::Cursor.prev_line + Hu::Tm.t(:error_not_in_working_copy, cmd: 'deploy') exit 1 end Dir.chdir(@git.workdir) @@ -66,19 +68,21 @@ puts puts "ERROR: Remote of branch 'master' does not point to 'origin'.".color(:red) puts puts ' Sorry, we need an origin here. We really do.' puts + Hu::Tm.t(:error_no_git_origin, cmd: 'deploy') exit 1 end if @git.config['gitflow.branch.master'].nil? puts puts "ERROR: This repository doesn't seem to be git-flow enabled.".color(:red) puts puts " Please run 'git flow init -d'" puts + Hu::Tm.t(:error_no_git_flow, cmd: 'deploy') exit 1 end unless @git.config['gitflow.prefix.versiontag'].nil? || @git.config['gitflow.prefix.versiontag'].empty? @@ -87,10 +91,11 @@ puts puts ' Please use this command to remove the prefix:' puts puts " git config --add gitflow.prefix.versiontag ''".bright puts + Hu::Tm.t(:error_git_flow_prefix_enabled, cmd: 'deploy') exit 1 end push_url = heroku_git_remote @@ -103,10 +108,11 @@ puts "ERROR: Found no heroku app for git remote #{push_url}".color(:red) puts ' Are you logged into the right heroku account?'.color(:red) puts puts " Please run 'git remote rm heroku'. Then run 'hu deploy' again to select a new remote." puts + Hu::Tm.t(:error_no_heroku_app_for_remote, cmd: 'deploy') exit 1 end pipeline_name, stag_app_id, prod_app_id = heroku_pipeline_details(app) @@ -118,10 +124,11 @@ puts puts ' The referenced app MUST be the staging member of the pipeline.' puts " Please run 'git remote rm heroku'. Then run 'hu deploy' again to select a new remote." puts + Hu::Tm.t(:error_remote_not_staging, cmd: 'deploy') sleep 2 exit 1 end stag_app_name = app['name'] @@ -197,28 +204,31 @@ unless git_revisions[:release] == git_revisions[stag_app_name] || !release_branch_exists puts 'Phase 1/3: The local release branch ' + "release/#{release_tag}".bright + ' was created.' puts ' Nothing else has happened so far. Push this branch to' puts ' ' + stag_app_name.to_s.bright + ' to begin the deploy procedure.' puts + Hu::Tm.t(:phase1, cmd: 'deploy') end if release_branch_exists && git_revisions[:release] == git_revisions[stag_app_name] puts 'Phase 2/3: Your local ' + "release/#{release_tag}".bright + ' (formerly ' + 'develop'.bright + ") is now live at #{stag_app_name}." puts ' Please test thoroughly: ' + (app['web_url']).to_s.bright puts ' If everything looks good, you may proceed and finish the release.' puts ' If there are problems: Quit, delete the release branch and start fixing.' puts + Hu::Tm.t(:phase2, cmd: 'deploy') elsif git_revisions[prod_app_name] != git_revisions[stag_app_name] && !release_branch_exists && git_revisions[:release] != git_revisions[stag_app_name] puts 'Phase 3/3: HEADS UP. This is the last chance to detect problems.' puts ' The final version of ' + "release/#{release_tag}".bright + ' is now staged.' puts puts ' Test here: ' + (app['web_url']).to_s.bright sleep 1 puts puts ' This is the exact version that will be promoted to production.' puts " From here you are on your own. Good luck #{`whoami`.chomp}!" puts + Hu::Tm.t(:phase3, cmd: 'deploy') end choice = prompt.select('Choose your destiny') do |menu| menu.enum '.' menu.choice 'Refresh', :refresh @@ -249,13 +259,16 @@ puts case choice when :DEPLOY + Hu::Tm.t(:promote_begin, cmd: 'deploy') promote_to_production + Hu::Tm.t(:promote_end, cmd: 'deploy') anykey when :finish_release + Hu::Tm.t(:finish_begin, cmd: 'deploy') old_editor = ENV['EDITOR'] old_git_editor = ENV['GIT_EDITOR'] tf = Tempfile.new('hu-tag') tf.write "#{release_tag}\n#{changelog}" tf.close @@ -268,40 +281,49 @@ unless 0 == finish_release(release_tag, env) abort_merge puts '*** ERROR! Could not finish release *** '.color(:red) puts puts 'This usually means a merge conflict or' - puts 'something similarly complicated has occured.' + puts 'something equally annoying has occured.' puts puts 'Please bring the universe into a state' - puts 'where the above command succeeds, then try again.' + puts 'where the above sequence of commands can' + puts 'succeed. Then try again.' puts + Hu::Tm.t(:finish_fail, cmd: 'deploy') exit 1 end ENV['EDITOR'] = old_editor ENV['GIT_EDITOR'] = old_git_editor + Hu::Tm.t(:finish_end, cmd: 'deploy') anykey when :push_to_staging + Hu::Tm.t(:stage_begin, cmd: 'deploy') run_each <<-EOS.strip_heredoc :stream git push #{push_url} release/#{release_tag}:master -f EOS + Hu::Tm.t(:stage_end, cmd: 'deploy') anykey when :abort_ask + Hu::Tm.t(:user_quit, cmd: 'deploy') puts if delete_branch("release/#{release_tag}") exit 0 when :bump_tiny if delete_branch("release/#{release_tag}") release_tag, branch_already_exists = prompt_for_release_tag(tiny_bump, tiny_bump) + Hu::Tm.t(:switch_release_type, bump: 'patch', cmd: 'deploy') end when :bump_minor if delete_branch("release/#{release_tag}") release_tag, branch_already_exists = prompt_for_release_tag(minor_bump, minor_bump) + Hu::Tm.t(:switch_release_type, bump: 'minor', cmd: 'deploy') end when :bump_major if delete_branch("release/#{release_tag}") release_tag, branch_already_exists = prompt_for_release_tag(major_bump, major_bump) + Hu::Tm.t(:switch_release_type, bump: 'major', cmd: 'deploy') end end end end @@ -394,10 +416,11 @@ puts "\e[H\e[2J" if clear puts " PIPELINE #{pipeline_name} ".inverse puts puts table.render(:unicode, padding: [0, 1, 0, 1], multiline: true) + Hu::Tm.t(:status_screen, cmd: 'deploy') revs end def heroku_app_by_git(git_url) busy('fetching heroku apps', :dots) @@ -512,10 +535,12 @@ end end next unless status.exitstatus != 0 shutdown if opts[:failfast] puts "Error, exit #{status.exitstatus}: #{line} (L#{i})".color(:red).bright + + Hu::Tm.t(:runeach_error, exitstatus: status.exitstatus, cmd: 'deploy') exit status.exitstatus if opts[:failfast] return status.exitstatus end 0 end @@ -525,11 +550,17 @@ if status.exitstatus != 0 puts 'Error fetching git tags.' exit status.exitstatus end - versions = output.lines.map(&:chomp).reject { |e| Versionomy.parse(e) rescue true; false } + versions = output.lines.map(&:chomp).reject do |e| + begin + Versionomy.parse(e) + rescue + true + end; false + end versions = versions.map { |e| e[0].casecmp('v').zero? ? e.downcase : "v#{e.downcase}" } versions = VersionSorter.sort(versions) latest = versions[-1] || 'v0.0.0' latest = "v#{latest}" unless latest[0] == 'v' latest @@ -547,10 +578,11 @@ :quiet # Delete branch #{branch_name} git checkout develop git branch -D #{branch_name} EOS + Hu::Tm.t(:delete_release_branch, cmd: 'deploy') puts "Branch #{branch_name} deleted.".color(:red) true end def checkout_branch(branch_name) @@ -564,20 +596,22 @@ def start_release(release_tag) run_each <<-EOS.strip_heredoc # Starting release #{release_tag.color(:green)} git flow release start #{release_tag} >/dev/null EOS + Hu::Tm.t(:start_release, cmd: 'deploy') end def update_working_copy run_each <<-EOS.strip_heredoc :quiet :nospinner # Ensure local repository is up to date git checkout develop && git pull git checkout master && git pull --rebase origin master EOS + Hu::Tm.t(:update_working_copy, cmd: 'deploy') end def heroku_git_remote ensure_repo_has_heroku_remote `git remote show -n heroku | grep Push`.chomp.split(':', 2)[1][1..-1] @@ -734,10 +768,11 @@ def abort_merge run_each <<-EOS.strip_heredoc # Abort failed merge git merge --abort EOS + Hu::Tm.t(:abort_merge, cmd: 'deploy') end def create_changelog(env) if File.executable? '.hu/hooks/changelog' env.each { |k, v| ENV[k] = v } @@ -746,9 +781,10 @@ `git log --pretty=format:" - %s" #{env['PREVIOUS_TAG']}..HEAD 2>/dev/null` end end def shutdown + Hu::Tm.flush! @@shutting_down = true unbusy end def busy(msg = '', format = :classic, clear = true)