geordi 2.11.0 → 3.1.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/.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
|