semaphore_test_boosters 2.2.4 → 2.7.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/README.md +25 -8
- data/lib/test_boosters/boosters/base.rb +19 -1
- data/lib/test_boosters/boosters/cucumber.rb +1 -1
- data/lib/test_boosters/boosters/ex_unit.rb +1 -1
- data/lib/test_boosters/boosters/go_test.rb +1 -1
- data/lib/test_boosters/boosters/minitest.rb +22 -2
- data/lib/test_boosters/boosters/rspec.rb +13 -6
- data/lib/test_boosters/cli_parser.rb +16 -3
- data/lib/test_boosters/files/distributor.rb +7 -2
- data/lib/test_boosters/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9539e2ccd028897753026672723046e6741cb3d2
|
4
|
+
data.tar.gz: 7a1a80632401a154f602e10909292f2f9284b608
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bcbffca8de73d690246389ec3107a85999a3fe831d2889026074bfc4bd3ee90bc1267f0ca6337f68d6b7190c3791aeb39f07d8230386b9cf8a7404a9096565d1
|
7
|
+
data.tar.gz: 208e3cb145617be8dde5e7e4f4119cb8ac367a9ee5a7080f3299410c4ec57f4f1196ad0ce03a926c219d9507548d2e711914c0ffbdc5c2ad2d4b6bc7e1f0a664
|
data/README.md
CHANGED
@@ -122,16 +122,16 @@ bundle exec rspec --format documentation --format json --out /home/<user>/rspec_
|
|
122
122
|
```
|
123
123
|
|
124
124
|
Optionally, you can pass additional RSpec flags with the `TB_RSPEC_OPTIONS`
|
125
|
-
environment variable
|
125
|
+
environment variable. You can also set a RSpec formatter with the `TB_RSPEC_FORMATTER` environment variable.
|
126
|
+
Default formatter is `documentation`.
|
126
127
|
|
127
|
-
``` bash
|
128
|
-
TB_RSPEC_OPTIONS='--fail-fast=3' rspec_booster --job 4/32
|
129
|
-
```
|
130
|
-
|
131
|
-
The above command will execute:
|
132
128
|
|
129
|
+
Example:
|
133
130
|
``` bash
|
134
|
-
|
131
|
+
TB_RSPEC_OPTIONS='--fail-fast=3' TB_RSPEC_FORMATTER=Fivemat rspec_booster --job 4/32
|
132
|
+
|
133
|
+
# will execute:
|
134
|
+
bundle exec rspec --fail-fast=3 --format Fivemat --format json --out /home/<user>/rspec_report.json <file_list>
|
135
135
|
```
|
136
136
|
|
137
137
|
## Cucumber Booster
|
@@ -164,12 +164,29 @@ Example of running job 4 out of 32 jobs:
|
|
164
164
|
minitest_booster --job 4/32
|
165
165
|
```
|
166
166
|
|
167
|
-
|
167
|
+
If minitest booster is executed in a scope of a Rails project, the following is
|
168
|
+
executed:
|
169
|
+
|
170
|
+
``` bash
|
171
|
+
bundle exec rails test <file_list>
|
172
|
+
```
|
173
|
+
|
174
|
+
If minitest booster is running outside of a Rails project, the following is
|
175
|
+
executed:
|
168
176
|
|
169
177
|
``` bash
|
170
178
|
ruby -e 'ARGV.each { |f| require ".#{f}" }' <file_list>
|
171
179
|
```
|
172
180
|
|
181
|
+
If you want to run a custom command for minitest, use the
|
182
|
+
`MINITEST_BOOSTER_COMMAND` environment variable:
|
183
|
+
|
184
|
+
``` bash
|
185
|
+
export MINITEST_BOOSTER_COMMAND="bundle exec rake test"
|
186
|
+
|
187
|
+
minitest_booster --job 1/42
|
188
|
+
```
|
189
|
+
|
173
190
|
## ExUnit Booster
|
174
191
|
|
175
192
|
The `ex_unit_booster` loads all the files that match the `test/**/*_test.exs`
|
@@ -2,9 +2,10 @@ module TestBoosters
|
|
2
2
|
module Boosters
|
3
3
|
class Base
|
4
4
|
|
5
|
-
def initialize(file_pattern, split_configuration_path, command)
|
5
|
+
def initialize(file_pattern, exclude_pattern, split_configuration_path, command)
|
6
6
|
@command = command
|
7
7
|
@file_pattern = file_pattern
|
8
|
+
@exclude_pattern = exclude_pattern
|
8
9
|
@split_configuration_path = split_configuration_path
|
9
10
|
end
|
10
11
|
|
@@ -18,6 +19,12 @@ module TestBoosters
|
|
18
19
|
|
19
20
|
known, leftover = distribution.files_for(job_index)
|
20
21
|
|
22
|
+
if cli_options[:dry_run]
|
23
|
+
show_files_for_dry_run("known", known)
|
24
|
+
show_files_for_dry_run("leftover", leftover)
|
25
|
+
return 0
|
26
|
+
end
|
27
|
+
|
21
28
|
exit_status = TestBoosters::Job.run(@command, known, leftover)
|
22
29
|
|
23
30
|
after_job # execute some activities when the job finishes
|
@@ -25,6 +32,16 @@ module TestBoosters
|
|
25
32
|
exit_status
|
26
33
|
end
|
27
34
|
|
35
|
+
def show_files_for_dry_run(label, files)
|
36
|
+
if files.empty?
|
37
|
+
puts "[DRY RUN] No #{label} files."
|
38
|
+
return
|
39
|
+
end
|
40
|
+
|
41
|
+
puts "\n[DRY RUN] Running tests for #{label} files:"
|
42
|
+
puts files.map { |file| "- #{file}" }.join("\n")
|
43
|
+
end
|
44
|
+
|
28
45
|
def before_job
|
29
46
|
# Do nothing
|
30
47
|
end
|
@@ -43,6 +60,7 @@ module TestBoosters
|
|
43
60
|
def distribution
|
44
61
|
@distribution ||= TestBoosters::Files::Distributor.new(@split_configuration_path,
|
45
62
|
@file_pattern,
|
63
|
+
@exclude_pattern,
|
46
64
|
job_count)
|
47
65
|
end
|
48
66
|
|
@@ -5,17 +5,37 @@ module TestBoosters
|
|
5
5
|
FILE_PATTERN = "test/**/*_test.rb".freeze
|
6
6
|
|
7
7
|
def initialize
|
8
|
-
super(FILE_PATTERN, split_configuration_path, command)
|
8
|
+
super(FILE_PATTERN, nil, split_configuration_path, command)
|
9
9
|
end
|
10
10
|
|
11
11
|
def command
|
12
|
-
|
12
|
+
if command_set_with_env_var?
|
13
|
+
command_from_env_var
|
14
|
+
elsif rails_app?
|
15
|
+
"bundle exec rails test"
|
16
|
+
else
|
17
|
+
"ruby -e 'ARGV.each { |f| require \"./\#{f}\" }'"
|
18
|
+
end
|
13
19
|
end
|
14
20
|
|
15
21
|
def split_configuration_path
|
16
22
|
ENV["MINITEST_SPLIT_CONFIGURATION_PATH"] || "#{ENV["HOME"]}/minitest_split_configuration.json"
|
17
23
|
end
|
18
24
|
|
25
|
+
def command_set_with_env_var?
|
26
|
+
!command_from_env_var.empty?
|
27
|
+
end
|
28
|
+
|
29
|
+
def command_from_env_var
|
30
|
+
ENV["MINITEST_BOOSTER_COMMAND"].to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def rails_app?
|
36
|
+
File.exist?("app") && File.exist?("config") && File.exist?("config/application.rb")
|
37
|
+
end
|
38
|
+
|
19
39
|
end
|
20
40
|
end
|
21
41
|
end
|
@@ -1,11 +1,8 @@
|
|
1
1
|
module TestBoosters
|
2
2
|
module Boosters
|
3
3
|
class Rspec < Base
|
4
|
-
|
5
|
-
FILE_PATTERN = "spec/**/*_spec.rb".freeze
|
6
|
-
|
7
4
|
def initialize
|
8
|
-
super(
|
5
|
+
super(file_pattern, exclude_pattern, split_configuration_path, command)
|
9
6
|
end
|
10
7
|
|
11
8
|
def display_header
|
@@ -25,8 +22,11 @@ module TestBoosters
|
|
25
22
|
end
|
26
23
|
|
27
24
|
def rspec_options
|
28
|
-
|
29
|
-
|
25
|
+
@rspec_options ||= begin
|
26
|
+
output_formatter = ENV.fetch("TB_RSPEC_FORMATTER", "documentation")
|
27
|
+
# rubocop:disable LineLength
|
28
|
+
"#{ENV["TB_RSPEC_OPTIONS"]} --format #{output_formatter} --require #{formatter_path} --format SemaphoreFormatter --out #{report_path}"
|
29
|
+
end
|
30
30
|
end
|
31
31
|
|
32
32
|
def report_path
|
@@ -41,6 +41,13 @@ module TestBoosters
|
|
41
41
|
@formatter_path ||= File.join(::TestBoosters::ROOT_PATH, "rspec_formatters/semaphore_rspec3_json_formatter.rb")
|
42
42
|
end
|
43
43
|
|
44
|
+
def file_pattern
|
45
|
+
ENV["TEST_BOOSTERS_RSPEC_TEST_FILE_PATTERN"] || "spec/**/*_spec.rb"
|
46
|
+
end
|
47
|
+
|
48
|
+
def exclude_pattern
|
49
|
+
ENV["TEST_BOOSTERS_RSPEC_TEST_EXCLUDE_PATTERN"]
|
50
|
+
end
|
44
51
|
end
|
45
52
|
end
|
46
53
|
end
|
@@ -9,15 +9,28 @@ module TestBoosters
|
|
9
9
|
options = {}
|
10
10
|
|
11
11
|
parser = OptionParser.new do |opts|
|
12
|
-
opts.on(
|
12
|
+
opts.on(
|
13
|
+
"--thread INDEX",
|
14
|
+
"[DEPRECATED] Use the '--job' option instead"
|
15
|
+
) do |parameter|
|
13
16
|
puts "[DEPRECATION WARNING] The '--thread' parameter is deprecated. Please use '--job' instead."
|
14
17
|
|
15
18
|
options.merge!(parse_job_params(parameter))
|
16
19
|
end
|
17
20
|
|
18
|
-
opts.on(
|
21
|
+
opts.on(
|
22
|
+
"--job INDEX",
|
23
|
+
"The job index and number of total jobs. e.g. --job 4/32"
|
24
|
+
) do |parameter|
|
19
25
|
options.merge!(parse_job_params(parameter))
|
20
26
|
end
|
27
|
+
|
28
|
+
opts.on(
|
29
|
+
"--dry-run",
|
30
|
+
"Only print the files that will be run for this job index"
|
31
|
+
) do |parameter|
|
32
|
+
options.merge!(:dry_run => parameter)
|
33
|
+
end
|
21
34
|
end
|
22
35
|
|
23
36
|
parser.parse!
|
@@ -25,7 +38,7 @@ module TestBoosters
|
|
25
38
|
options
|
26
39
|
end
|
27
40
|
|
28
|
-
# parses input like '1/32' and
|
41
|
+
# parses input like '1/32' and outputs { :job_index => 1, :job_count => 32 }
|
29
42
|
def parse_job_params(input_parameter)
|
30
43
|
job_index, job_count, _rest = input_parameter.split("/")
|
31
44
|
|
@@ -6,9 +6,10 @@ module TestBoosters
|
|
6
6
|
#
|
7
7
|
class Distributor
|
8
8
|
|
9
|
-
def initialize(split_configuration_path, file_pattern, job_count)
|
9
|
+
def initialize(split_configuration_path, file_pattern, exclude_pattern, job_count)
|
10
10
|
@split_configuration_path = split_configuration_path
|
11
11
|
@file_pattern = file_pattern
|
12
|
+
@exclude_pattern = exclude_pattern
|
12
13
|
@job_count = job_count
|
13
14
|
end
|
14
15
|
|
@@ -26,7 +27,11 @@ module TestBoosters
|
|
26
27
|
end
|
27
28
|
|
28
29
|
def all_files
|
29
|
-
@all_files ||=
|
30
|
+
@all_files ||= begin
|
31
|
+
files = Dir[@file_pattern].sort
|
32
|
+
files -= Dir[@exclude_pattern] if @exclude_pattern
|
33
|
+
files
|
34
|
+
end
|
30
35
|
end
|
31
36
|
|
32
37
|
private
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: semaphore_test_boosters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Developers at Rendered Text
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: semaphore_cucumber_booster_config
|