geordi 2.10.1 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +8 -2
  5. data/CHANGELOG.md +46 -0
  6. data/Gemfile +2 -5
  7. data/Gemfile.lock +10 -10
  8. data/README.md +11 -6
  9. data/Rakefile +6 -10
  10. data/{bin → exe}/b +0 -0
  11. data/{bin → exe}/cap-all +0 -0
  12. data/{bin → exe}/console-for +0 -0
  13. data/{bin → exe}/cuc +0 -0
  14. data/{bin → exe}/cuc-show +0 -0
  15. data/{bin → exe}/cuc-vnc-setup +0 -0
  16. data/{bin → exe}/deploy-to-production +0 -0
  17. data/{bin → exe}/dump-for +0 -0
  18. data/{bin → exe}/dumple +0 -0
  19. data/{bin → exe}/geordi +0 -0
  20. data/{bin → exe}/gitpt +0 -0
  21. data/{bin → exe}/launchy_browser +0 -0
  22. data/{bin → exe}/load-dump +0 -0
  23. data/{bin → exe}/migrate-all +0 -0
  24. data/{bin → exe}/rs +0 -0
  25. data/{bin → exe}/run_tests +0 -0
  26. data/{bin → exe}/shell-for +0 -0
  27. data/{bin → exe}/tests +0 -0
  28. data/geordi.gemspec +23 -20
  29. data/lib/geordi/COMMAND_TEMPLATE +4 -6
  30. data/lib/geordi/capistrano_config.rb +20 -17
  31. data/lib/geordi/chromedriver_updater.rb +9 -10
  32. data/lib/geordi/cli.rb +5 -2
  33. data/lib/geordi/commands/_setup_vnc.rb +23 -23
  34. data/lib/geordi/commands/apache_site.rb +3 -3
  35. data/lib/geordi/commands/bundle_install.rb +3 -3
  36. data/lib/geordi/commands/capistrano.rb +5 -6
  37. data/lib/geordi/commands/chromedriver_update.rb +0 -9
  38. data/lib/geordi/commands/clean.rb +5 -6
  39. data/lib/geordi/commands/commit.rb +0 -1
  40. data/lib/geordi/commands/console.rb +4 -4
  41. data/lib/geordi/commands/create_database_yml.rb +4 -4
  42. data/lib/geordi/commands/create_databases.rb +3 -3
  43. data/lib/geordi/commands/cucumber.rb +25 -25
  44. data/lib/geordi/commands/delete_dumps.rb +12 -12
  45. data/lib/geordi/commands/deploy.rb +27 -28
  46. data/lib/geordi/commands/drop_databases.rb +13 -15
  47. data/lib/geordi/commands/dump.rb +12 -13
  48. data/lib/geordi/commands/eurest.rb +2 -2
  49. data/lib/geordi/commands/firefox.rb +4 -4
  50. data/lib/geordi/commands/migrate.rb +3 -3
  51. data/lib/geordi/commands/png_optimize.rb +15 -14
  52. data/lib/geordi/commands/rake.rb +3 -3
  53. data/lib/geordi/commands/remove_executable_flags.rb +3 -3
  54. data/lib/geordi/commands/rspec.rb +11 -11
  55. data/lib/geordi/commands/security_update.rb +25 -25
  56. data/lib/geordi/commands/server.rb +6 -6
  57. data/lib/geordi/commands/setup.rb +8 -8
  58. data/lib/geordi/commands/shell.rb +3 -3
  59. data/lib/geordi/commands/tests.rb +1 -1
  60. data/lib/geordi/commands/unit.rb +3 -3
  61. data/lib/geordi/commands/update.rb +7 -7
  62. data/lib/geordi/commands/vnc.rb +1 -1
  63. data/lib/geordi/commands/with_rake.rb +3 -3
  64. data/lib/geordi/commands/yarn_install.rb +3 -3
  65. data/lib/geordi/cucumber.rb +35 -36
  66. data/lib/geordi/db_cleaner.rb +40 -41
  67. data/lib/geordi/dump_loader.rb +6 -5
  68. data/lib/geordi/firefox_for_selenium.rb +26 -29
  69. data/lib/geordi/gitpt.rb +14 -15
  70. data/lib/geordi/interaction.rb +2 -6
  71. data/lib/geordi/remote.rb +9 -10
  72. data/lib/geordi/util.rb +28 -25
  73. data/lib/geordi/version.rb +1 -1
  74. metadata +27 -39
  75. data/features/commit.feature +0 -17
  76. data/features/console.feature +0 -7
  77. data/features/cucumber.feature +0 -261
  78. data/features/deploy.feature +0 -66
  79. data/features/dump.feature +0 -34
  80. data/features/firefox.feature +0 -44
  81. data/features/server.feature +0 -31
  82. data/features/setup.feature +0 -11
  83. data/features/shell.feature +0 -78
  84. data/features/support/env.rb +0 -8
  85. data/features/support/step_definitions/aruba_backport_steps.rb +0 -5
  86. data/features/support/step_definitions/miscellaneous_steps.rb +0 -11
@@ -5,10 +5,13 @@ require 'geordi/util'
5
5
 
6
6
  module Geordi
7
7
  class CLI < Thor
8
- include Geordi::Interaction
8
+
9
+ def self.exit_on_failure?
10
+ true
11
+ end
9
12
 
10
13
  # load all tasks defined in lib/geordi/commands
11
- Dir[File.expand_path '../commands/*.rb', __FILE__].each do |file|
14
+ Dir[File.expand_path 'commands/*.rb', __dir__].each do |file|
12
15
  class_eval File.read(file), file
13
16
  end
14
17
 
@@ -1,34 +1,34 @@
1
- desc '-setup-vnc', 'Setup VNC for running Selenium tests there', :hide => true
1
+ desc '-setup-vnc', 'Setup VNC for running Selenium tests there', hide: true
2
2
  def _setup_vnc
3
3
  `clear`
4
4
 
5
- note 'This script will help you install a VNC server and a VNC viewer.'
5
+ Interaction.note 'This script will help you install a VNC server and a VNC viewer.'
6
6
  puts
7
- puts strip_heredoc <<-TEXT
7
+ puts Util.strip_heredoc <<-TEXT
8
8
  With those you will be able to use our cucumber script without being
9
9
  disturbed by focus-stealing Selenium windows. Instead, they will open
10
10
  inside a VNC session.
11
11
 
12
12
  You can still inspect everything with:
13
13
  TEXT
14
- note_cmd 'geordi vnc'
14
+ Interaction.note_cmd 'geordi vnc'
15
15
  puts
16
- note 'Please open a second shell to execute instructions.'
17
- prompt 'Continue ...'
16
+ Interaction.note 'Please open a second shell to execute instructions.'
17
+ Interaction.prompt 'Continue ...'
18
18
 
19
- announce 'Setup VNC server'
19
+ Interaction.announce 'Setup VNC server'
20
20
 
21
21
  vnc_server_installed = system('which vncserver > /dev/null 2>&1')
22
22
  if vnc_server_installed
23
- success 'It appears you already have a VNC server installed. Good job!'
23
+ Interaction.success 'It appears you already have a VNC server installed. Good job!'
24
24
  else
25
25
  puts 'Please run:'
26
- note_cmd 'sudo apt-get install vnc4server'
27
- prompt 'Continue ...'
26
+ Interaction.note_cmd 'sudo apt-get install vnc4server'
27
+ Interaction.prompt 'Continue ...'
28
28
 
29
29
  puts
30
- note 'We will now set a password for your VNC server.'
31
- puts strip_heredoc <<-TEXT
30
+ Interaction.note 'We will now set a password for your VNC server.'
31
+ puts Util.strip_heredoc <<-TEXT
32
32
  When running our cucumber script, you will not actually need this
33
33
  password, and there is no security risk. However, if you start a vncserver
34
34
  without our cucumber script, a user with your password can connect to
@@ -36,31 +36,31 @@ def _setup_vnc
36
36
 
37
37
  TEXT
38
38
  puts 'Please run:'
39
- note_cmd 'vncserver :20'
40
- warn 'Enter a secure password!'
41
- prompt 'Continue ...'
39
+ Interaction.note_cmd 'vncserver :20'
40
+ Interaction.warn 'Enter a secure password!'
41
+ Interaction.prompt 'Continue ...'
42
42
 
43
43
  puts 'Now stop the server again. Please run:'
44
- note_cmd 'vncserver -kill :20'
45
- prompt 'Continue ...'
44
+ Interaction.note_cmd 'vncserver -kill :20'
45
+ Interaction.prompt 'Continue ...'
46
46
  end
47
47
 
48
- announce 'Setup VNC viewer'
48
+ Interaction.announce 'Setup VNC viewer'
49
49
 
50
50
  vnc_viewer_installed = system('which vncviewer > /dev/null 2>&1')
51
51
  if vnc_viewer_installed
52
- success 'It appears you already have a VNC viewer installed. Good job!'
52
+ Interaction.success 'It appears you already have a VNC viewer installed. Good job!'
53
53
  else
54
54
  puts 'Please run:'
55
- note_cmd 'sudo apt-get install xtightvncviewer'
56
- prompt 'Continue ...'
55
+ Interaction.note_cmd 'sudo apt-get install xtightvncviewer'
56
+ Interaction.prompt 'Continue ...'
57
57
  end
58
58
 
59
59
  puts
60
- puts strip_heredoc <<-TEXT
60
+ puts Util.strip_heredoc <<-TEXT
61
61
  All done. Our cucumber script will now automatically run Selenium features
62
62
  in VNC.
63
63
  TEXT
64
64
 
65
- success 'Happy cuking!'
65
+ Interaction.success 'Happy cuking!'
66
66
  end
@@ -10,13 +10,13 @@ def apache_site(*args)
10
10
  puts 'Please call: apache-site my-site'
11
11
  puts
12
12
  puts 'Available sites:'
13
- Dir.new(".").each do |file|
13
+ Dir.new('.').each do |file|
14
14
  puts "- #{file}" if file != '.' && file != '..'
15
15
  end
16
16
  exit
17
17
  end
18
18
 
19
- has_default = File.exists?('default')
20
- exec "sudo a2dissite \*; sudo a2ensite #{"default " if has_default}#{site} && sudo apache2ctl restart"
19
+ has_default = File.exist?('default')
20
+ exec "sudo a2dissite \*; sudo a2ensite #{'default ' if has_default}#{site} && sudo apache2ctl restart"
21
21
  Dir.chdir old_cwd
22
22
  end
@@ -1,7 +1,7 @@
1
- desc 'bundle-install', 'Run bundle install if required', :hide => true
1
+ desc 'bundle-install', 'Run bundle install if required', hide: true
2
2
  def bundle_install
3
- if File.exists?('Gemfile') and !system('bundle check > /dev/null 2>&1')
4
- announce 'Bundling'
3
+ if File.exist?('Gemfile') && !system('bundle check > /dev/null 2>&1')
4
+ Interaction.announce 'Bundling'
5
5
  Util.system! 'bundle install'
6
6
  end
7
7
  end
@@ -6,18 +6,17 @@ LONGDESC
6
6
  def capistrano(*args)
7
7
  targets = Dir['config/deploy/*.rb'].map { |file| File.basename(file, '.rb') }.sort
8
8
 
9
- note 'Found the following deploy targets:'
9
+ Interaction.note 'Found the following deploy targets:'
10
10
  puts targets
11
- prompt('Continue?', 'n', /y|yes/) or fail 'Cancelled.'
11
+ Interaction.prompt('Continue?', 'n', /y|yes/) || Interaction.fail('Cancelled.')
12
12
 
13
13
  targets << nil if targets.empty? # default target
14
14
  targets.each do |stage|
15
- announce 'Target: ' + (stage || '(default)')
15
+ Interaction.announce 'Target: ' + (stage || '(default)')
16
16
 
17
17
  command = "bundle exec cap #{stage} " + args.join(' ')
18
- note_cmd command
18
+ Interaction.note_cmd command
19
19
 
20
- Util.system!(command, :fail_message => 'Capistrano failed. Have a look!')
20
+ Util.system!(command, fail_message: 'Capistrano failed. Have a look!')
21
21
  end
22
-
23
22
  end
@@ -9,14 +9,5 @@ LONGDESC
9
9
  def chromedriver_update
10
10
  require 'geordi/chromedriver_updater'
11
11
 
12
- # Ruby 1.9.3 introduces #capture3 in open3
13
- supported_ruby_version = '1.9.2'
14
-
15
- # We do not want to backport this command to Ruby 1.8.7, a user can just use a newer Ruby version to run it. For all
16
- # other commands it still is necessary to have a proper Ruby 1.8.7 support.
17
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new(supported_ruby_version)
18
- raise("Unsupported ruby version #{RUBY_VERSION}, please use at least #{supported_ruby_version} to run this command!")
19
- end
20
-
21
12
  ChromedriverUpdater.new.run
22
13
  end
@@ -1,16 +1,15 @@
1
1
  desc 'clean', 'Remove unneeded files from the current directory'
2
2
  def clean
3
3
 
4
- announce 'Removing tempfiles'
4
+ Interaction.announce 'Removing tempfiles'
5
5
  for pattern in %w[ webrat-* capybara-* tmp/webrat-* tmp/capybara-* tmp/rtex/* log/*.log ]
6
- note pattern
6
+ Interaction.note pattern
7
7
  puts `rm -vfR #{pattern}`
8
8
  end
9
9
 
10
- announce 'Finding recursively and removing backup files'
11
- for pattern in %w[ *~ ]
12
- note pattern
10
+ Interaction.announce 'Finding recursively and removing backup files'
11
+ %w[*~].each do |pattern|
12
+ Interaction.note pattern
13
13
  `find . -name #{pattern} -exec rm {} ';'`
14
14
  end
15
-
16
15
  end
@@ -21,4 +21,3 @@ Unsupported Ruby Version #{RUBY_VERSION}. `geordi commit` requires Ruby 2.1+.
21
21
 
22
22
  Gitpt.new.run(git_args)
23
23
  end
24
-
@@ -6,19 +6,19 @@ Open a Rails console on `staging`: `geordi console staging`
6
6
  LONGDESC
7
7
 
8
8
 
9
- option :select_server, :default => false, :type => :boolean, :aliases => '-s'
9
+ option :select_server, default: false, type: :boolean, aliases: '-s'
10
10
 
11
- def console(target = 'development', *args)
11
+ def console(target = 'development', *_args)
12
12
  require 'geordi/remote'
13
13
 
14
14
  if target == 'development'
15
15
  invoke_cmd 'yarn_install'
16
16
 
17
- announce 'Opening a local Rails console'
17
+ Interaction.announce 'Opening a local Rails console'
18
18
 
19
19
  Util.system! Util.console_command(target)
20
20
  else
21
- announce 'Opening a Rails console on ' + target
21
+ Interaction.announce 'Opening a Rails console on ' + target
22
22
 
23
23
  Geordi::Remote.new(target).console(options)
24
24
  end
@@ -1,10 +1,10 @@
1
- desc 'create-database-yml', '[sic]', :hide => true
1
+ desc 'create-database-yml', '[sic]', hide: true
2
2
  def create_database_yml
3
3
  real_yml = 'config/database.yml'
4
4
  sample_yml = 'config/database.sample.yml'
5
5
 
6
- if File.exists?(sample_yml) and not File.exists?(real_yml)
7
- announce 'Creating ' + real_yml
6
+ if File.exist?(sample_yml) && !File.exist?(real_yml)
7
+ Interaction.announce 'Creating ' + real_yml
8
8
 
9
9
  sample = File.read(sample_yml)
10
10
  adapter = sample.match(/adapter: (\w+)\n/).captures.first
@@ -15,6 +15,6 @@ def create_database_yml
15
15
  real = sample.gsub(/password:.*$/, "password: #{db_password}")
16
16
  File.open(real_yml, 'w') { |f| f.write(real) }
17
17
 
18
- note "Created #{real_yml}."
18
+ Interaction.note "Created #{real_yml}."
19
19
  end
20
20
  end
@@ -1,11 +1,11 @@
1
- desc 'create-databases', 'Create all databases', :hide => true
1
+ desc 'create-databases', 'Create all databases', hide: true
2
2
  def create_databases
3
3
  invoke_cmd 'create_database_yml'
4
4
  invoke_cmd 'bundle_install'
5
5
 
6
- announce 'Creating databases'
6
+ Interaction.announce 'Creating databases'
7
7
 
8
- if File.exists?('config/database.yml')
8
+ if File.exist?('config/database.yml')
9
9
  command = 'bundle exec rake db:create:all'
10
10
  command << ' parallel:create' if Util.file_containing?('Gemfile', /parallel_tests/)
11
11
 
@@ -17,30 +17,30 @@ or `-d`.
17
17
  e.g. `--format pretty`.
18
18
  LONGDESC
19
19
 
20
- option :modified, :aliases => '-m', :type => :boolean,
21
- :desc => 'Run all modified features'
22
- option :containing, :aliases => '-c', :banner => 'STRING',
23
- :desc => 'Run all features that contain STRING'
24
- option :verbose, :aliases => '-v', :type => :boolean,
25
- :desc => 'Print the testrun command'
26
- option :debug, :aliases => '-d', :type => :boolean,
27
- :desc => 'Run with `-f pretty -b` which helps hunting down bugs'
28
- option :rerun, :aliases => '-r', :type => :numeric, :default => 0,
29
- :desc => 'Rerun features up to N times while failing'
20
+ option :modified, aliases: '-m', type: :boolean,
21
+ desc: 'Run all modified features'
22
+ option :containing, aliases: '-c', banner: 'STRING',
23
+ desc: 'Run all features that contain STRING'
24
+ option :verbose, aliases: '-v', type: :boolean,
25
+ desc: 'Print the testrun command'
26
+ option :debug, aliases: '-d', type: :boolean,
27
+ desc: 'Run with `-f pretty -b` which helps hunting down bugs'
28
+ option :rerun, aliases: '-r', type: :numeric, default: 0,
29
+ desc: 'Rerun features up to N times while failing'
30
30
 
31
31
  def cucumber(*args)
32
32
  if args.empty?
33
33
  # This is not testable as there is no way to stub `git` :(
34
34
  if options.modified?
35
- modified_features = `git status --short`.split($/).map do |line|
35
+ modified_features = `git status --short`.split($INPUT_RECORD_SEPARATOR).map do |line|
36
36
  indicators = line.slice!(0..2) # Remove leading indicators
37
- line if line.include?('.feature') and not indicators.include?('D')
37
+ line if line.include?('.feature') && !indicators.include?('D')
38
38
  end.compact
39
39
  args = modified_features
40
40
  end
41
41
 
42
42
  if options.containing
43
- matching_features = `grep -lri '#{options.containing}' --include=*.feature features/`.split($/)
43
+ matching_features = `grep -lri '#{options.containing}' --include=*.feature features/`.split($INPUT_RECORD_SEPARATOR)
44
44
  args = matching_features.uniq
45
45
  end
46
46
  end
@@ -56,7 +56,7 @@ def cucumber(*args)
56
56
 
57
57
  # Serial run of @solo scenarios ############################################
58
58
  if files.any? { |f| f.include? ':' }
59
- note '@solo run skipped when called with line numbers' if options.verbose
59
+ Interaction.note '@solo run skipped when called with line numbers' if options.verbose
60
60
  else
61
61
  solo_files = if files.empty?
62
62
  'features' # Proper grepping
@@ -64,37 +64,37 @@ def cucumber(*args)
64
64
  files.join(' ')
65
65
  end
66
66
 
67
- solo_tag_usages = `grep -r '@solo' #{ solo_files }`.split("\n")
67
+ solo_tag_usages = `grep -r '@solo' #{solo_files}`.split("\n")
68
68
 
69
69
  if solo_tag_usages.any?
70
70
  solo_cmd_opts = cmd_opts.dup
71
71
  solo_cmd_opts << '--tags' << '@solo'
72
72
 
73
- announce 'Running @solo features'
74
- solo_success = Geordi::Cucumber.new.run files, solo_cmd_opts, :verbose => options.verbose, :parallel => false
75
- solo_success or fail 'Features failed.'
73
+ Interaction.announce 'Running @solo features'
74
+ solo_success = Geordi::Cucumber.new.run files, solo_cmd_opts, verbose: options.verbose, parallel: false
75
+ solo_success || Interaction.fail('Features failed.')
76
76
  end
77
77
  end
78
78
 
79
79
  # Parallel run of all given features + reruns ##############################
80
- announce 'Running features'
81
- normal_run_successful = Geordi::Cucumber.new.run(files, cmd_opts, :verbose => options.verbose)
80
+ Interaction.announce 'Running features'
81
+ normal_run_successful = Geordi::Cucumber.new.run(files, cmd_opts, verbose: options.verbose)
82
82
 
83
83
  unless normal_run_successful
84
84
  cmd_opts << '--profile' << 'rerun'
85
85
 
86
86
  # Reruns
87
87
  (options.rerun + 1).times do |i|
88
- fail 'Features failed.' if (i == options.rerun) # All reruns done?
88
+ Interaction.fail 'Features failed.' if i == options.rerun # All reruns done?
89
89
 
90
- announce "Rerun ##{ i + 1 } of #{ options.rerun }"
91
- break if Geordi::Cucumber.new.run([], cmd_opts, :verbose => options.verbose, :parallel => false)
90
+ Interaction.announce "Rerun ##{i + 1} of #{options.rerun}"
91
+ break if Geordi::Cucumber.new.run([], cmd_opts, verbose: options.verbose, parallel: false)
92
92
  end
93
93
  end
94
94
 
95
- success 'Features green.'
95
+ Interaction.success 'Features green.'
96
96
 
97
97
  else
98
- note 'Cucumber not employed.'
98
+ Interaction.note 'Cucumber not employed.'
99
99
  end
100
100
  end
@@ -12,32 +12,32 @@ LONGDESC
12
12
 
13
13
  def delete_dumps(dump_directory = nil)
14
14
  deletable_dumps = []
15
- if dump_directory.nil?
16
- dump_directories = [
15
+ dump_directories = if dump_directory.nil?
16
+ [
17
17
  File.join(Dir.home, 'dumps'),
18
- Dir.pwd
18
+ Dir.pwd,
19
19
  ]
20
20
  else
21
- dump_directories = [dump_directory]
21
+ [dump_directory]
22
22
  end
23
- announce 'Looking for *.dump in ' << dump_directories.join(',')
23
+ Interaction.announce 'Looking for *.dump in ' << dump_directories.join(',')
24
24
  dump_directories.each do |d|
25
- d2 = File.expand_path(d)
26
- unless File.directory? File.realdirpath(d2)
27
- warn "Directory #{d2} does not exist"
25
+ d_2 = File.expand_path(d)
26
+ unless File.directory? File.realdirpath(d_2)
27
+ Interaction.warn "Directory #{d_2} does not exist"
28
28
  next
29
29
  end
30
- deletable_dumps.concat(Dir.glob("#{d2}/**/*.dump"))
30
+ deletable_dumps.concat(Dir.glob("#{d_2}/**/*.dump"))
31
31
  end
32
32
  if deletable_dumps.empty?
33
- success 'No dumps to delete' if deletable_dumps.empty?
33
+ Interaction.success 'No dumps to delete' if deletable_dumps.empty?
34
34
  exit 0
35
35
  end
36
36
  deletable_dumps.uniq!.sort!
37
- note 'The following dumps can be deleted:'
37
+ Interaction.note 'The following dumps can be deleted:'
38
38
  puts
39
39
  puts deletable_dumps
40
- prompt 'Delete those dumps', 'n', /y|yes/ or fail 'Cancelled.'
40
+ Interaction.prompt('Delete those dumps', 'n', /y|yes/) || raise('Cancelled.')
41
41
  deletable_dumps.each do |dump|
42
42
  File.delete dump unless File.directory? dump
43
43
  end
@@ -30,25 +30,25 @@ instead of `cap deploy:migrations`. You can force using `deploy` by passing the
30
30
  -M option: `geordi deploy -M staging`.
31
31
  LONGDESC
32
32
 
33
- option :no_migrations, :aliases => '-M', :type => :boolean,
34
- :desc => 'Run cap deploy instead of cap deploy:migrations'
35
- option :current_branch, :aliases => '-c', :type => :boolean,
36
- :desc => 'Set DEPLOY_BRANCH to the current branch during deploy'
33
+ option :no_migrations, aliases: '-M', type: :boolean,
34
+ desc: 'Run cap deploy instead of cap deploy:migrations'
35
+ option :current_branch, aliases: '-c', type: :boolean,
36
+ desc: 'Set DEPLOY_BRANCH to the current branch during deploy'
37
37
 
38
38
  def deploy(target_stage = nil)
39
39
  # Set/Infer default values
40
- branch_stage_map = { 'master' => 'staging', 'production' => 'production'}
41
- if target_stage and not Util.deploy_targets.include? target_stage
40
+ branch_stage_map = { 'master' => 'staging', 'production' => 'production' }
41
+ if target_stage && !Util.deploy_targets.include?(target_stage)
42
42
  # Target stage autocompletion from available stages
43
43
  target_stage = Util.deploy_targets.find { |t| t.start_with? target_stage }
44
- target_stage || warn('Given deployment stage not found')
44
+ target_stage || Interaction.warn('Given deployment stage not found')
45
45
  end
46
46
 
47
47
  # Ask for required information
48
- target_stage ||= prompt 'Deployment stage:', branch_stage_map.fetch(Util.current_branch, 'staging')
48
+ target_stage ||= Interaction.prompt 'Deployment stage:', branch_stage_map.fetch(Util.current_branch, 'staging')
49
49
  if options.current_branch
50
50
  stage_file = "config/deploy/#{target_stage}.rb"
51
- Util.file_containing? stage_file, 'DEPLOY_BRANCH' or fail <<-ERROR
51
+ Util.file_containing?(stage_file, 'DEPLOY_BRANCH') || Interaction.fail(<<-ERROR)
52
52
  To deploy from the current branch, configure #{stage_file} to respect the
53
53
  environment variable DEPLOY_BRANCH. Example:
54
54
 
@@ -57,38 +57,38 @@ set :branch, ENV['DEPLOY_BRANCH'] || 'master'
57
57
 
58
58
  source_branch = target_branch = Util.current_branch
59
59
  else
60
- source_branch = prompt 'Source branch:', Util.current_branch
61
- target_branch = prompt 'Deploy branch:', branch_stage_map.invert.fetch(target_stage, 'master')
60
+ source_branch = Interaction.prompt 'Source branch:', Util.current_branch
61
+ target_branch = Interaction.prompt 'Deploy branch:', branch_stage_map.invert.fetch(target_stage, 'master')
62
62
  end
63
63
 
64
64
  merge_needed = (source_branch != target_branch)
65
65
  push_needed = merge_needed || `git cherry -v | wc -l`.strip.to_i > 0
66
66
  push_needed = false if Util.testing? # Hard to test
67
67
 
68
- announce "Checking whether your #{source_branch} branch is ready" ############
68
+ Interaction.announce "Checking whether your #{source_branch} branch is ready" ############
69
69
  Util.system! "git checkout #{source_branch}"
70
- if `git status -s | wc -l`.strip != '0' and not Util.testing?
71
- warn "Your #{source_branch} branch holds uncommitted changes."
72
- prompt('Continue anyway?', 'n', /y|yes/) or fail 'Cancelled.'
70
+ if (`git status -s | wc -l`.strip != '0') && !Util.testing?
71
+ Interaction.warn "Your #{source_branch} branch holds uncommitted changes."
72
+ Interaction.prompt('Continue anyway?', 'n', /y|yes/) || raise('Cancelled.')
73
73
  else
74
- note 'All good.'
74
+ Interaction.note 'All good.'
75
75
  end
76
76
 
77
77
  if merge_needed
78
- announce "Checking what's in your #{target_branch} branch right now" #######
78
+ Interaction.announce "Checking what's in your #{target_branch} branch right now" #######
79
79
  Util.system! "git checkout #{target_branch} && git pull"
80
80
  end
81
81
 
82
- announce 'You are about to:' #################################################
83
- note "Merge branch #{source_branch} into #{target_branch}" if merge_needed
82
+ Interaction.announce 'You are about to:' #################################################
83
+ Interaction.note "Merge branch #{source_branch} into #{target_branch}" if merge_needed
84
84
  if push_needed
85
- note 'Push these commits:' if push_needed
85
+ Interaction.note 'Push these commits:' if push_needed
86
86
  Util.system! "git --no-pager log origin/#{target_branch}..#{source_branch} --oneline"
87
87
  end
88
- note "Deploy to #{target_stage}"
89
- note "From current branch #{source_branch}" if options.current_branch
88
+ Interaction.note "Deploy to #{target_stage}"
89
+ Interaction.note "From current branch #{source_branch}" if options.current_branch
90
90
 
91
- if prompt('Go ahead with the deployment?', 'n', /y|yes/)
91
+ if Interaction.prompt('Go ahead with the deployment?', 'n', /y|yes/)
92
92
  puts
93
93
  git_call = []
94
94
  git_call << "git merge #{source_branch}" if merge_needed
@@ -100,17 +100,16 @@ set :branch, ENV['DEPLOY_BRANCH'] || 'master'
100
100
  capistrano_call = "DEPLOY_BRANCH=#{source_branch} #{capistrano_call}" if options.current_branch
101
101
 
102
102
  if git_call.any?
103
- Util.system! git_call.join(' && '), :show_cmd => true
103
+ Util.system! git_call.join(' && '), show_cmd: true
104
104
  end
105
105
 
106
106
  invoke_cmd 'bundle_install'
107
107
 
108
- Util.system! capistrano_call, :show_cmd => true
108
+ Util.system! capistrano_call, show_cmd: true
109
109
 
110
- success 'Deployment complete.'
110
+ Interaction.success 'Deployment complete.'
111
111
  else
112
112
  Util.system! "git checkout #{source_branch}"
113
- fail 'Deployment cancelled.'
113
+ Interaction.fail 'Deployment cancelled.'
114
114
  end
115
-
116
115
  end