geordi 2.11.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +8 -2
- data/CHANGELOG.md +40 -0
- data/Gemfile +2 -5
- data/Gemfile.lock +50 -3
- data/README.md +34 -7
- data/Rakefile +6 -10
- data/{bin → exe}/b +0 -0
- data/{bin → exe}/cap-all +0 -0
- data/{bin → exe}/console-for +0 -0
- data/{bin → exe}/cuc +0 -0
- data/{bin → exe}/cuc-show +0 -0
- data/{bin → exe}/cuc-vnc-setup +0 -0
- data/{bin → exe}/deploy-to-production +0 -0
- data/{bin → exe}/dump-for +0 -0
- data/{bin → exe}/dumple +0 -0
- data/{bin → exe}/geordi +0 -0
- data/{bin → exe}/gitpt +0 -0
- data/{bin → exe}/launchy_browser +0 -0
- data/{bin → exe}/load-dump +0 -0
- data/{bin → exe}/migrate-all +0 -0
- data/{bin → exe}/rs +0 -0
- data/{bin → exe}/run_tests +0 -0
- data/{bin → exe}/shell-for +0 -0
- data/{bin → exe}/tests +0 -0
- data/geordi.gemspec +23 -20
- data/lib/geordi/COMMAND_TEMPLATE +4 -6
- data/lib/geordi/capistrano_config.rb +7 -7
- data/lib/geordi/chromedriver_updater.rb +9 -10
- data/lib/geordi/cli.rb +1 -7
- data/lib/geordi/commands/_setup_vnc.rb +23 -23
- data/lib/geordi/commands/apache_site.rb +3 -3
- data/lib/geordi/commands/bundle_install.rb +3 -3
- data/lib/geordi/commands/capistrano.rb +5 -6
- data/lib/geordi/commands/chromedriver_update.rb +0 -9
- data/lib/geordi/commands/clean.rb +5 -6
- data/lib/geordi/commands/commit.rb +0 -1
- data/lib/geordi/commands/console.rb +4 -4
- data/lib/geordi/commands/create_database_yml.rb +4 -4
- data/lib/geordi/commands/create_databases.rb +3 -3
- data/lib/geordi/commands/cucumber.rb +25 -25
- data/lib/geordi/commands/delete_dumps.rb +12 -12
- data/lib/geordi/commands/deploy.rb +27 -28
- data/lib/geordi/commands/drop_databases.rb +13 -15
- data/lib/geordi/commands/dump.rb +12 -13
- data/lib/geordi/commands/eurest.rb +2 -2
- data/lib/geordi/commands/firefox.rb +4 -4
- data/lib/geordi/commands/migrate.rb +3 -3
- data/lib/geordi/commands/png_optimize.rb +15 -14
- data/lib/geordi/commands/rake.rb +3 -3
- data/lib/geordi/commands/remove_executable_flags.rb +3 -3
- data/lib/geordi/commands/rspec.rb +11 -11
- data/lib/geordi/commands/security_update.rb +84 -27
- data/lib/geordi/commands/server.rb +6 -6
- data/lib/geordi/commands/setup.rb +8 -8
- data/lib/geordi/commands/shell.rb +3 -3
- data/lib/geordi/commands/tests.rb +1 -1
- data/lib/geordi/commands/unit.rb +3 -3
- data/lib/geordi/commands/update.rb +7 -7
- data/lib/geordi/commands/vnc.rb +1 -1
- data/lib/geordi/commands/with_rake.rb +3 -3
- data/lib/geordi/commands/yarn_install.rb +3 -3
- data/lib/geordi/cucumber.rb +35 -36
- data/lib/geordi/db_cleaner.rb +40 -41
- data/lib/geordi/dump_loader.rb +6 -5
- data/lib/geordi/firefox_for_selenium.rb +26 -29
- data/lib/geordi/gitpt.rb +14 -15
- data/lib/geordi/interaction.rb +2 -6
- data/lib/geordi/remote.rb +9 -10
- data/lib/geordi/util.rb +26 -27
- data/lib/geordi/version.rb +1 -1
- metadata +25 -37
- data/features/commit.feature +0 -17
- data/features/console.feature +0 -7
- data/features/cucumber.feature +0 -261
- data/features/deploy.feature +0 -66
- data/features/dump.feature +0 -34
- data/features/firefox.feature +0 -44
- data/features/server.feature +0 -31
- data/features/setup.feature +0 -11
- data/features/shell.feature +0 -78
- data/features/support/env.rb +0 -8
- data/features/support/step_definitions/aruba_backport_steps.rb +0 -5
- data/features/support/step_definitions/miscellaneous_steps.rb +0 -11
@@ -4,14 +4,13 @@ require 'tempfile'
|
|
4
4
|
|
5
5
|
module Geordi
|
6
6
|
class ChromedriverUpdater
|
7
|
-
include Geordi::Interaction
|
8
7
|
|
9
8
|
def run
|
10
9
|
chrome_version = determine_chrome_version
|
11
10
|
chromedriver_version = determine_chromedriver_version
|
12
11
|
|
13
12
|
if skip_update?(chrome_version, chromedriver_version)
|
14
|
-
warn("No update required, you are using for both executables the same version #{chrome_version}!")
|
13
|
+
Interaction.warn("No update required, you are using for both executables the same version #{chrome_version}!")
|
15
14
|
else
|
16
15
|
chromedriver_zip = download_chromedriver(chrome_version)
|
17
16
|
unzip(chromedriver_zip, File.expand_path('~/bin'))
|
@@ -19,7 +18,7 @@ module Geordi
|
|
19
18
|
chromedriver_zip.unlink
|
20
19
|
|
21
20
|
# We need to determine the version again, as it could be nil in case no chromedriver was installed before
|
22
|
-
note "Chromedriver updated to version #{determine_chromedriver_version}"
|
21
|
+
Interaction.note "Chromedriver updated to version #{determine_chromedriver_version}"
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
@@ -27,12 +26,12 @@ module Geordi
|
|
27
26
|
|
28
27
|
def determine_chrome_version
|
29
28
|
stdout_str, _error_str, status = Open3.capture3('google-chrome', '--version')
|
30
|
-
chrome_version =
|
29
|
+
chrome_version = unless stdout_str.nil?
|
31
30
|
stdout_str[/\AGoogle Chrome (\d+)/, 1]
|
32
31
|
end
|
33
32
|
|
34
33
|
if !status.success? || chrome_version.nil?
|
35
|
-
fail('Could not determine the current Google Chrome version')
|
34
|
+
Interaction.fail('Could not determine the current Google Chrome version')
|
36
35
|
else
|
37
36
|
chrome_version.to_i
|
38
37
|
end
|
@@ -42,12 +41,12 @@ module Geordi
|
|
42
41
|
return unless Open3.capture2('which chromedriver')[1].success?
|
43
42
|
|
44
43
|
stdout_str, _error_str, status = Open3.capture3('chromedriver', '-v')
|
45
|
-
chromedriver_version =
|
44
|
+
chromedriver_version = unless stdout_str.nil?
|
46
45
|
stdout_str[/\AChromeDriver (\d+)/, 1]
|
47
46
|
end
|
48
47
|
|
49
48
|
if !status.success? || chromedriver_version.nil?
|
50
|
-
fail('Could not determine the current chromedriver version')
|
49
|
+
Interaction.fail('Could not determine the current chromedriver version')
|
51
50
|
else
|
52
51
|
chromedriver_version.to_i
|
53
52
|
end
|
@@ -69,7 +68,7 @@ module Geordi
|
|
69
68
|
|
70
69
|
file
|
71
70
|
else
|
72
|
-
fail("Could not download chromedriver version #{latest_version}")
|
71
|
+
Interaction.fail("Could not download chromedriver version #{latest_version}")
|
73
72
|
end
|
74
73
|
end
|
75
74
|
|
@@ -80,7 +79,7 @@ module Geordi
|
|
80
79
|
if response.is_a?(Net::HTTPSuccess)
|
81
80
|
response.body.to_s
|
82
81
|
else
|
83
|
-
fail("Could not find the latest version for Google Chrome version #{chrome_version}")
|
82
|
+
Interaction.fail("Could not find the latest version for Google Chrome version #{chrome_version}")
|
84
83
|
end
|
85
84
|
end
|
86
85
|
|
@@ -88,7 +87,7 @@ module Geordi
|
|
88
87
|
_stdout_str, _error_str, status = Open3.capture3('unzip', '-d', output_dir, '-o', zip.path)
|
89
88
|
|
90
89
|
unless status.success?
|
91
|
-
fail("Could not unzip #{zip.path}")
|
90
|
+
Interaction.fail("Could not unzip #{zip.path}")
|
92
91
|
end
|
93
92
|
end
|
94
93
|
end
|
data/lib/geordi/cli.rb
CHANGED
@@ -6,18 +6,12 @@ require 'geordi/util'
|
|
6
6
|
module Geordi
|
7
7
|
class CLI < Thor
|
8
8
|
|
9
|
-
if Geordi::Util.ruby_version <= Gem::Version.new('2.0.0')
|
10
|
-
warn "Deprecation warning: Ruby 1.8.7 and 1.9.3 support will be dropped in Geordi 3.x."
|
11
|
-
end
|
12
|
-
|
13
|
-
include Geordi::Interaction
|
14
|
-
|
15
9
|
def self.exit_on_failure?
|
16
10
|
true
|
17
11
|
end
|
18
12
|
|
19
13
|
# load all tasks defined in lib/geordi/commands
|
20
|
-
Dir[File.expand_path '
|
14
|
+
Dir[File.expand_path 'commands/*.rb', __dir__].each do |file|
|
21
15
|
class_eval File.read(file), file
|
22
16
|
end
|
23
17
|
|
@@ -1,34 +1,34 @@
|
|
1
|
-
desc '-setup-vnc', 'Setup VNC for running Selenium tests there', :
|
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(
|
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.
|
20
|
-
exec "sudo a2dissite \*; sudo a2ensite #{
|
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', :
|
1
|
+
desc 'bundle-install', 'Run bundle install if required', hide: true
|
2
2
|
def bundle_install
|
3
|
-
if File.
|
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/)
|
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, :
|
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
|
-
|
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
|
@@ -6,19 +6,19 @@ Open a Rails console on `staging`: `geordi console staging`
|
|
6
6
|
LONGDESC
|
7
7
|
|
8
8
|
|
9
|
-
option :select_server, :
|
9
|
+
option :select_server, default: false, type: :boolean, aliases: '-s'
|
10
10
|
|
11
|
-
def console(target = 'development', *
|
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]', :
|
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.
|
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', :
|
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.
|
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, :
|
21
|
-
:
|
22
|
-
option :containing, :
|
23
|
-
:
|
24
|
-
option :verbose, :
|
25
|
-
:
|
26
|
-
option :debug, :
|
27
|
-
:
|
28
|
-
option :rerun, :
|
29
|
-
:
|
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(
|
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')
|
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' #{
|
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, :
|
75
|
-
solo_success
|
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, :
|
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
|
88
|
+
Interaction.fail 'Features failed.' if i == options.rerun # All reruns done?
|
89
89
|
|
90
|
-
announce "Rerun ##{
|
91
|
-
break if Geordi::Cucumber.new.run([], cmd_opts, :
|
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
|