geordi 2.12.3 → 3.0.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 +8 -0
- data/Gemfile +2 -6
- data/Gemfile.lock +20 -25
- data/README.md +8 -28
- 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 -2
- 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 +2 -3
- data/lib/geordi/capistrano_config.rb +7 -7
- data/lib/geordi/chromedriver_updater.rb +7 -7
- data/lib/geordi/cli.rb +1 -6
- data/lib/geordi/commands/_setup_vnc.rb +1 -1
- data/lib/geordi/commands/apache_site.rb +3 -3
- data/lib/geordi/commands/bundle_install.rb +2 -2
- data/lib/geordi/commands/capistrano.rb +2 -3
- data/lib/geordi/commands/chromedriver_update.rb +0 -9
- data/lib/geordi/commands/clean.rb +2 -4
- data/lib/geordi/commands/commit.rb +0 -1
- data/lib/geordi/commands/console.rb +2 -2
- data/lib/geordi/commands/create_database_yml.rb +2 -2
- data/lib/geordi/commands/create_databases.rb +2 -2
- data/lib/geordi/commands/cucumber.rb +20 -20
- data/lib/geordi/commands/delete_dumps.rb +9 -9
- data/lib/geordi/commands/deploy.rb +12 -13
- data/lib/geordi/commands/drop_databases.rb +12 -14
- data/lib/geordi/commands/dump.rb +5 -6
- data/lib/geordi/commands/eurest.rb +2 -2
- data/lib/geordi/commands/firefox.rb +3 -3
- data/lib/geordi/commands/png_optimize.rb +13 -12
- data/lib/geordi/commands/rake.rb +2 -2
- data/lib/geordi/commands/remove_executable_flags.rb +1 -1
- data/lib/geordi/commands/rspec.rb +6 -6
- data/lib/geordi/commands/security_update.rb +12 -12
- data/lib/geordi/commands/server.rb +5 -5
- data/lib/geordi/commands/setup.rb +5 -5
- data/lib/geordi/commands/shell.rb +2 -2
- data/lib/geordi/commands/unit.rb +1 -1
- data/lib/geordi/commands/update.rb +5 -5
- data/lib/geordi/commands/vnc.rb +1 -1
- data/lib/geordi/commands/with_rake.rb +1 -1
- data/lib/geordi/commands/yarn_install.rb +2 -2
- data/lib/geordi/cucumber.rb +28 -29
- data/lib/geordi/db_cleaner.rb +28 -28
- data/lib/geordi/dump_loader.rb +3 -3
- data/lib/geordi/firefox_for_selenium.rb +11 -12
- data/lib/geordi/gitpt.rb +13 -13
- data/lib/geordi/remote.rb +6 -6
- data/lib/geordi/util.rb +18 -24
- data/lib/geordi/version.rb +1 -1
- metadata +25 -42
- 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/docker.feature +0 -86
- 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/step_definitions/docker_command_steps.rb +0 -21
- data/features/step_definitions/miscellaneous_steps.rb +0 -11
- data/features/support/aruba.rb +0 -60
- data/features/support/env.rb +0 -9
- data/features/support/step_definitions/aruba_backport_steps.rb +0 -5
- data/lib/geordi/commands/docker.rb +0 -42
- data/lib/geordi/docker.rb +0 -116
@@ -13,7 +13,7 @@ def png_optimize(path)
|
|
13
13
|
announce 'Optimizing .png files'
|
14
14
|
|
15
15
|
if `which pngcrush`.strip.empty?
|
16
|
-
|
16
|
+
raise 'Please install pngcrush first (sudo apt-get install pngcrush)'
|
17
17
|
end
|
18
18
|
|
19
19
|
po = PngOptimizer.new
|
@@ -22,7 +22,7 @@ def png_optimize(path)
|
|
22
22
|
elsif File.file?(path)
|
23
23
|
po.optimize_inplace(path)
|
24
24
|
else
|
25
|
-
|
25
|
+
raise 'Neither directory nor file: ' + path
|
26
26
|
end
|
27
27
|
|
28
28
|
success 'PNG optimization completed.'
|
@@ -35,10 +35,10 @@ class PngOptimizer
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def optimization_default_args
|
38
|
-
args =
|
39
|
-
args <<
|
40
|
-
args <<
|
41
|
-
args <<
|
38
|
+
args = ''
|
39
|
+
args << '-rem alla ' # remove everything except transparency
|
40
|
+
args << '-rem text ' # remove text chunks
|
41
|
+
args << '-reduce ' # eliminate unused colors and reduce bit-depth (if possible)
|
42
42
|
args
|
43
43
|
end
|
44
44
|
|
@@ -50,10 +50,11 @@ class PngOptimizer
|
|
50
50
|
dirname = File.dirname(original)
|
51
51
|
basename = File.basename(original)
|
52
52
|
count = 0
|
53
|
-
|
53
|
+
|
54
|
+
loop do
|
54
55
|
tmp_name = "#{dirname}/#{basename}_temp_#{count += 1}.png"
|
55
|
-
|
56
|
-
|
56
|
+
break tmp_name unless File.exist?(tmp_name)
|
57
|
+
end
|
57
58
|
end
|
58
59
|
|
59
60
|
def optimize_inplace(input_file)
|
@@ -61,9 +62,9 @@ class PngOptimizer
|
|
61
62
|
result = optimize_file(input_file, temp_file)
|
62
63
|
if result
|
63
64
|
FileUtils.rm(input_file)
|
64
|
-
FileUtils.mv(
|
65
|
+
FileUtils.mv(temp_file.to_s, input_file.to_s)
|
65
66
|
else
|
66
|
-
|
67
|
+
raise 'Error:' + $CHILD_STATUS
|
67
68
|
end
|
68
69
|
end
|
69
70
|
|
@@ -71,7 +72,7 @@ class PngOptimizer
|
|
71
72
|
# Dir[".png"] works case sensitive, so to catch all funky .png extensions we have to go the following way:
|
72
73
|
png_relative_paths = []
|
73
74
|
Dir["#{path}/*.*"].each do |file_name|
|
74
|
-
png_relative_paths << file_name if ends_with?(File.basename(file_name.downcase),
|
75
|
+
png_relative_paths << file_name if ends_with?(File.basename(file_name.downcase), '.png')
|
75
76
|
end
|
76
77
|
png_relative_paths.each do |png_relative_path|
|
77
78
|
optimize_inplace(png_relative_path)
|
data/lib/geordi/commands/rake.rb
CHANGED
@@ -10,8 +10,8 @@ Example: `geordi rake db:migrate`
|
|
10
10
|
LONGDESC
|
11
11
|
|
12
12
|
def rake(*args)
|
13
|
-
|
14
|
-
if File.
|
13
|
+
%w[development test cucumber].each do |env| # update long_desc when changing this
|
14
|
+
if File.exist? "config/environments/#{env}.rb"
|
15
15
|
call = %w[bundle exec rake] + args + ["RAILS_ENV=#{env}"]
|
16
16
|
note_cmd call.join(' ')
|
17
17
|
|
@@ -6,7 +6,7 @@ def remove_executable_flags
|
|
6
6
|
*.rb *.html *.erb *.haml *.yml *.css *.sass *.rake *.png *.jpg
|
7
7
|
*.gif *.pdf *.txt *.rdoc *.feature Rakefile VERSION README Capfile
|
8
8
|
]
|
9
|
-
|
9
|
+
patterns.each do |pattern|
|
10
10
|
note pattern
|
11
11
|
`find . -name "#{pattern}" -exec chmod -x {} ';'`
|
12
12
|
end
|
@@ -7,15 +7,15 @@ detection, etc.
|
|
7
7
|
LONGDESC
|
8
8
|
|
9
9
|
def rspec(*files)
|
10
|
-
if File.
|
10
|
+
if File.exist?('spec/spec_helper.rb')
|
11
11
|
invoke_cmd 'bundle_install'
|
12
12
|
invoke_cmd 'yarn_install'
|
13
13
|
|
14
14
|
announce 'Running specs'
|
15
15
|
|
16
|
-
if Util.file_containing?('Gemfile', /parallel_tests/)
|
16
|
+
if Util.file_containing?('Gemfile', /parallel_tests/) && files.empty?
|
17
17
|
note 'All specs at once (using parallel_tests)'
|
18
|
-
Util.system! 'bundle exec rake parallel:spec', :
|
18
|
+
Util.system! 'bundle exec rake parallel:spec', fail_message: 'Specs failed.'
|
19
19
|
|
20
20
|
else
|
21
21
|
# tell which specs will be run
|
@@ -27,9 +27,9 @@ def rspec(*files)
|
|
27
27
|
end
|
28
28
|
|
29
29
|
command = ['bundle exec']
|
30
|
-
command << if File.
|
30
|
+
command << if File.exist?('script/spec')
|
31
31
|
'spec -c' # RSpec 1
|
32
|
-
elsif File.
|
32
|
+
elsif File.exist?('bin/rspec')
|
33
33
|
'bin/rspec'
|
34
34
|
else
|
35
35
|
'rspec'
|
@@ -38,7 +38,7 @@ def rspec(*files)
|
|
38
38
|
command << files.join(' ')
|
39
39
|
|
40
40
|
puts
|
41
|
-
Util.system! command.join(' '), :
|
41
|
+
Util.system! command.join(' '), fail_message: 'Specs failed.'
|
42
42
|
end
|
43
43
|
else
|
44
44
|
note 'RSpec not employed.'
|
@@ -8,16 +8,16 @@ Switches branches, pulls, pushes and deploys as required by our workflow. Tells
|
|
8
8
|
what it will do before it does it.
|
9
9
|
LONGDESC
|
10
10
|
|
11
|
-
def security_update(step='prepare')
|
11
|
+
def security_update(step = 'prepare')
|
12
12
|
case step
|
13
13
|
when 'prepare'
|
14
14
|
announce 'Preparing for security update'
|
15
15
|
warn 'Please read https://makandracards.com/makandra/1587 before applying security updates!'
|
16
16
|
note 'About to checkout production and pull'
|
17
|
-
prompt('Continue?', 'y', /y|yes/)
|
17
|
+
prompt('Continue?', 'y', /y|yes/) || raise('Cancelled.')
|
18
18
|
|
19
|
-
Util.system! 'git checkout production', :
|
20
|
-
Util.system! 'git pull', :
|
19
|
+
Util.system! 'git checkout production', show_cmd: true
|
20
|
+
Util.system! 'git pull', show_cmd: true
|
21
21
|
|
22
22
|
success 'Successfully prepared for security update'
|
23
23
|
puts
|
@@ -27,20 +27,20 @@ def security_update(step='prepare')
|
|
27
27
|
|
28
28
|
when 'f', 'finish'
|
29
29
|
# ensure everything is committed
|
30
|
-
`git status --porcelain`.empty?
|
30
|
+
`git status --porcelain`.empty? || raise('Please commit your changes before finishing the update.')
|
31
31
|
|
32
32
|
announce 'Finishing security update'
|
33
33
|
note 'Working directory clean.'
|
34
|
-
prompt('Have you successfully run all tests?', 'n', /y|yes/)
|
34
|
+
prompt('Have you successfully run all tests?', 'n', /y|yes/) || raise('Please run tests first.')
|
35
35
|
|
36
36
|
note 'About to: push production, checkout & pull master, merge production, push master'
|
37
|
-
prompt('Continue?', 'n', /y|yes/)
|
37
|
+
prompt('Continue?', 'n', /y|yes/) || raise('Cancelled.')
|
38
38
|
|
39
|
-
Util.system! 'git push', :
|
40
|
-
Util.system! 'git checkout master', :
|
41
|
-
Util.system! 'git pull', :
|
42
|
-
Util.system! 'git merge production', :
|
43
|
-
Util.system! 'git push', :
|
39
|
+
Util.system! 'git push', show_cmd: true
|
40
|
+
Util.system! 'git checkout master', show_cmd: true
|
41
|
+
Util.system! 'git pull', show_cmd: true
|
42
|
+
Util.system! 'git merge production', show_cmd: true
|
43
|
+
Util.system! 'git push', show_cmd: true
|
44
44
|
|
45
45
|
announce 'Deploying all targets'
|
46
46
|
deploy = (Util.gem_major_version('capistrano') == 3) ? 'deploy' : 'deploy:migrations'
|
@@ -1,9 +1,9 @@
|
|
1
1
|
desc 'server [PORT]', 'Start a development server'
|
2
2
|
|
3
|
-
option :port, :
|
4
|
-
:
|
5
|
-
option :public, :
|
6
|
-
:
|
3
|
+
option :port, aliases: '-p', default: '3000',
|
4
|
+
desc: 'Choose a port'
|
5
|
+
option :public, aliases: '-P', type: :boolean,
|
6
|
+
desc: 'Make the server accessible in the local network'
|
7
7
|
|
8
8
|
def server(port = nil)
|
9
9
|
invoke_cmd 'bundle_install'
|
@@ -12,7 +12,7 @@ def server(port = nil)
|
|
12
12
|
|
13
13
|
announce 'Booting a development server'
|
14
14
|
port ||= options.port
|
15
|
-
note "URL: http://#{
|
15
|
+
note "URL: http://#{File.basename(Dir.pwd)}.vcap.me:#{port}"
|
16
16
|
puts
|
17
17
|
|
18
18
|
command = Util.server_command
|
@@ -19,12 +19,12 @@ After setting up, runs all tests when called with the `--test` option:
|
|
19
19
|
geordi setup -t
|
20
20
|
LONGDESC
|
21
21
|
|
22
|
-
option :dump, :
|
23
|
-
:
|
24
|
-
option :test, :
|
22
|
+
option :dump, type: :string, aliases: '-d', banner: 'TARGET',
|
23
|
+
desc: 'After setup, dump the TARGET db and source it into the development db'
|
24
|
+
option :test, type: :boolean, aliases: '-t', desc: 'After setup, run tests'
|
25
25
|
|
26
26
|
def setup
|
27
|
-
if File.
|
27
|
+
if File.exist? 'bin/setup'
|
28
28
|
announce 'Running bin/setup'
|
29
29
|
note "Geordi's own setup routine is skipped"
|
30
30
|
|
@@ -36,6 +36,6 @@ def setup
|
|
36
36
|
|
37
37
|
success 'Successfully set up the project.'
|
38
38
|
|
39
|
-
invoke_cmd 'dump', options.dump, :
|
39
|
+
invoke_cmd 'dump', options.dump, load: true if options.dump
|
40
40
|
invoke_cmd 'tests' if options.test
|
41
41
|
end
|
@@ -7,11 +7,11 @@ Lets you select the server to connect to when called with `--select-server`:
|
|
7
7
|
geordi shell production -s
|
8
8
|
LONGDESC
|
9
9
|
|
10
|
-
option :select_server, :
|
10
|
+
option :select_server, default: false, type: :boolean, aliases: '-s'
|
11
11
|
|
12
12
|
# This method has a triple 'l' because :shell is a Thor reserved word. However,
|
13
13
|
# it can still be called with `geordi shell` :)
|
14
|
-
def shelll(target, *
|
14
|
+
def shelll(target, *_args)
|
15
15
|
require 'geordi/remote'
|
16
16
|
|
17
17
|
announce 'Opening a shell on ' + target
|
data/lib/geordi/commands/unit.rb
CHANGED
@@ -16,18 +16,18 @@ After updating, runs all tests when called with the `--test` option:
|
|
16
16
|
See `geordi help update` for details.
|
17
17
|
LONGDESC
|
18
18
|
|
19
|
-
option :dump, :
|
20
|
-
:
|
21
|
-
option :test, :
|
19
|
+
option :dump, type: :string, aliases: '-d', banner: 'TARGET',
|
20
|
+
desc: 'After updating, dump the TARGET db and source it into the development db'
|
21
|
+
option :test, type: :boolean, aliases: '-t', desc: 'After updating, run tests'
|
22
22
|
|
23
23
|
def update
|
24
24
|
announce 'Updating repository'
|
25
|
-
Util.system! 'git pull', :
|
25
|
+
Util.system! 'git pull', show_cmd: true
|
26
26
|
|
27
27
|
invoke_cmd 'migrate'
|
28
28
|
|
29
29
|
success 'Successfully updated the project.'
|
30
30
|
|
31
|
-
invoke_cmd 'dump', options.dump, :
|
31
|
+
invoke_cmd 'dump', options.dump, load: true if options.dump
|
32
32
|
invoke_cmd 'tests' if options.test
|
33
33
|
end
|
data/lib/geordi/commands/vnc.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
desc 'yarn-install', 'Runs yarn install if required', :
|
1
|
+
desc 'yarn-install', 'Runs yarn install if required', hide: true
|
2
2
|
|
3
3
|
def yarn_install
|
4
|
-
if File.
|
4
|
+
if File.exist?('package.json') && !system('yarn check --integrity > /dev/null 2>&1')
|
5
5
|
announce 'Yarn install'
|
6
6
|
Util.system! 'yarn install'
|
7
7
|
end
|
data/lib/geordi/cucumber.rb
CHANGED
@@ -3,18 +3,17 @@ require 'tempfile'
|
|
3
3
|
|
4
4
|
# This require-style is to prevent Ruby from loading files of a different
|
5
5
|
# version of Geordi.
|
6
|
-
require File.expand_path('
|
7
|
-
require File.expand_path('
|
6
|
+
require File.expand_path('interaction', __dir__)
|
7
|
+
require File.expand_path('firefox_for_selenium', __dir__)
|
8
8
|
|
9
9
|
module Geordi
|
10
10
|
class Cucumber
|
11
11
|
include Geordi::Interaction
|
12
12
|
|
13
|
-
VNC_DISPLAY = ':17'
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
VNC_ENV_VARIABLES = %w[DISPLAY BROWSER LAUNCHY_BROWSER]
|
13
|
+
VNC_DISPLAY = ':17'.freeze
|
14
|
+
VNC_SERVER_COMMAND = "vncserver #{VNC_DISPLAY} -localhost -nolisten tcp -SecurityTypes None -geometry 1280x1024".freeze
|
15
|
+
VNC_VIEWER_COMMAND = "vncviewer #{VNC_DISPLAY}".freeze
|
16
|
+
VNC_ENV_VARIABLES = %w[DISPLAY BROWSER LAUNCHY_BROWSER].freeze
|
18
17
|
|
19
18
|
def run(files, cucumber_options, options = {})
|
20
19
|
self.argv = files + cucumber_options.map { |option| option.split('=') }.flatten
|
@@ -30,21 +29,21 @@ module Geordi
|
|
30
29
|
system command # Util.system! would reset the Firefox PATH
|
31
30
|
end
|
32
31
|
|
33
|
-
def launch_vnc_viewer
|
34
|
-
fork
|
32
|
+
def launch_vnc_viewer
|
33
|
+
fork do
|
35
34
|
error = capture_stderr do
|
36
|
-
system(VNC_VIEWER_COMMAND
|
35
|
+
system(VNC_VIEWER_COMMAND)
|
37
36
|
end
|
38
|
-
unless
|
39
|
-
if
|
40
|
-
|
37
|
+
unless $CHILD_STATUS.success?
|
38
|
+
if $CHILD_STATUS.exitstatus == 127
|
39
|
+
raise 'VNC viewer not found. Install it with `geordi vnc --setup`.'
|
41
40
|
else
|
42
41
|
note 'VNC viewer could not be opened:'
|
43
42
|
puts error
|
44
43
|
puts
|
45
44
|
end
|
46
45
|
end
|
47
|
-
|
46
|
+
end
|
48
47
|
end
|
49
48
|
|
50
49
|
def restore_env
|
@@ -58,8 +57,8 @@ module Geordi
|
|
58
57
|
VNC_ENV_VARIABLES.each do |variable|
|
59
58
|
ENV["OUTER_#{variable}"] = ENV[variable] if ENV[variable]
|
60
59
|
end
|
61
|
-
ENV[
|
62
|
-
ENV[
|
60
|
+
ENV['BROWSER'] = ENV['LAUNCHY_BROWSER'] = File.expand_path('../../bin/launchy_browser', __dir__)
|
61
|
+
ENV['DISPLAY'] = VNC_DISPLAY
|
63
62
|
|
64
63
|
note 'Run `geordi vnc` to view the Selenium test browsers'
|
65
64
|
end
|
@@ -74,7 +73,7 @@ module Geordi
|
|
74
73
|
unless argv.include?('--format') || argv.include?('-f')
|
75
74
|
format_args = spinner_available? ? ['--format', 'CucumberSpinner::CuriousProgressBarFormatter'] : ['--format', 'progress']
|
76
75
|
end
|
77
|
-
[use_firefox_for_selenium,
|
76
|
+
[use_firefox_for_selenium, 'b', 'cucumber', format_args, escape_shell_args(argv)].flatten.compact.join(' ')
|
78
77
|
end
|
79
78
|
|
80
79
|
def parallel_execution_command
|
@@ -88,8 +87,8 @@ module Geordi
|
|
88
87
|
[
|
89
88
|
use_firefox_for_selenium,
|
90
89
|
'b parallel_test -t ' + type_arg,
|
91
|
-
%(-o '#{
|
92
|
-
"-- #{
|
90
|
+
%(-o '#{command_line_options.join(' ')} --tags "#{not_tag('@solo')}"'),
|
91
|
+
"-- #{features.join(' ')}",
|
93
92
|
].compact.join(' ')
|
94
93
|
end
|
95
94
|
|
@@ -110,7 +109,7 @@ module Geordi
|
|
110
109
|
|
111
110
|
def escape_shell_args(*args)
|
112
111
|
args.flatten.collect do |arg|
|
113
|
-
arg.gsub(/([\\ "])/) { |
|
112
|
+
arg.gsub(/([\\ "])/) { |_match| "\\#{Regexp.last_match(1)}" }
|
114
113
|
end
|
115
114
|
end
|
116
115
|
|
@@ -138,8 +137,8 @@ module Geordi
|
|
138
137
|
|
139
138
|
def rerun_txt_features
|
140
139
|
@rerun_txt_features ||= begin
|
141
|
-
if File.
|
142
|
-
IO.read(
|
140
|
+
if File.exist?('rerun.txt')
|
141
|
+
IO.read('rerun.txt').to_s.strip.split(/\s+/)
|
143
142
|
else
|
144
143
|
[]
|
145
144
|
end
|
@@ -151,7 +150,7 @@ module Geordi
|
|
151
150
|
end
|
152
151
|
|
153
152
|
def command_line_options
|
154
|
-
@command_line_options ||=
|
153
|
+
@command_line_options ||= [].tap do |args|
|
155
154
|
# Sorry for this mess. Option parsing doesn't get much prettier.
|
156
155
|
argv.each_cons(2) do |a, b|
|
157
156
|
break if a == '--' # This is the common no-options-beyond marker
|
@@ -172,7 +171,7 @@ module Geordi
|
|
172
171
|
end
|
173
172
|
|
174
173
|
def consolidate_rerun_txt_files
|
175
|
-
parallel_rerun_files = Dir.glob(
|
174
|
+
parallel_rerun_files = Dir.glob('parallel_rerun*.txt')
|
176
175
|
unless parallel_rerun_files.empty?
|
177
176
|
note 'Consolidating parallel_rerun.txt files ...'
|
178
177
|
|
@@ -182,8 +181,8 @@ module Geordi
|
|
182
181
|
File.unlink(filename)
|
183
182
|
end
|
184
183
|
|
185
|
-
File.open(
|
186
|
-
f.puts(rerun_content.join(
|
184
|
+
File.open('rerun.txt', 'w') do |f|
|
185
|
+
f.puts(rerun_content.join(' '))
|
187
186
|
end
|
188
187
|
end
|
189
188
|
end
|
@@ -191,14 +190,14 @@ module Geordi
|
|
191
190
|
def find_all_features_recursively(files_or_dirs)
|
192
191
|
Array(files_or_dirs).map do |file_or_dir|
|
193
192
|
if File.directory?(file_or_dir)
|
194
|
-
file_or_dir = Dir.glob(File.join(file_or_dir,
|
193
|
+
file_or_dir = Dir.glob(File.join(file_or_dir, '**', '*.feature'))
|
195
194
|
end
|
196
195
|
file_or_dir
|
197
196
|
end.flatten.uniq.compact
|
198
197
|
end
|
199
198
|
|
200
199
|
def spinner_available?
|
201
|
-
@spinner_available ||= File.
|
200
|
+
@spinner_available ||= File.exist?('Gemfile') && File.open('Gemfile').read.scan(/cucumber_spinner/).any?
|
202
201
|
end
|
203
202
|
|
204
203
|
def use_parallel_tests?(options)
|
@@ -210,7 +209,7 @@ module Geordi
|
|
210
209
|
|
211
210
|
def try_and_start_vnc
|
212
211
|
# check if vnc is already running
|
213
|
-
#return true if vnc_server_running?
|
212
|
+
# return true if vnc_server_running?
|
214
213
|
error = capture_stderr do
|
215
214
|
system(VNC_SERVER_COMMAND)
|
216
215
|
end
|