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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2189a996558a44b4d0453251e6a3e96ba0b54016
4
- data.tar.gz: c41de6015ae95d6b61c662a80a894426b9296e63
3
+ metadata.gz: 9539e2ccd028897753026672723046e6741cb3d2
4
+ data.tar.gz: 7a1a80632401a154f602e10909292f2f9284b608
5
5
  SHA512:
6
- metadata.gz: d65a0867543561e731fbb2737d8d65b55a2321068888487fbf61e398ddeccdabfd0ebe7c156f361edfccb0674aec9daef82120286ba04332a951437b40cab0b3
7
- data.tar.gz: 2b28fd345ad819625f404cb3052795fbb7fba3644db205aed05bf5a95c61581881f5e38e05098d75a78ef60effa2b61e4ebb2de8956098f7f1c491e09498327c
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
- bundle exec rspec --fail-fast=3 --format documentation --format json --out /home/<user>/rspec_report.json <file_list>
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
- Under the hood, the Minitest Booster uses the following command:
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,7 +5,7 @@ module TestBoosters
5
5
  FILE_PATTERN = "features/**/*.feature".freeze
6
6
 
7
7
  def initialize
8
- super(FILE_PATTERN, split_configuration_path, "bundle exec cucumber")
8
+ super(FILE_PATTERN, nil, split_configuration_path, "bundle exec cucumber")
9
9
  end
10
10
 
11
11
  def before_job
@@ -5,7 +5,7 @@ module TestBoosters
5
5
  FILE_PATTERN = "test/**/*_test.exs".freeze
6
6
 
7
7
  def initialize
8
- super(FILE_PATTERN, split_configuration_path, "mix test")
8
+ super(FILE_PATTERN, nil, split_configuration_path, "mix test")
9
9
  end
10
10
 
11
11
  def split_configuration_path
@@ -5,7 +5,7 @@ module TestBoosters
5
5
  FILE_PATTERN = "**/*/*_test.go".freeze
6
6
 
7
7
  def initialize
8
- super(FILE_PATTERN, split_configuration_path, "go test")
8
+ super(FILE_PATTERN, nil, split_configuration_path, "go test")
9
9
  end
10
10
 
11
11
  def split_configuration_path
@@ -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
- "ruby -e 'ARGV.each { |f| require \"./\#{f}\" }'"
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(FILE_PATTERN, split_configuration_path, command)
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
- # rubocop:disable LineLength
29
- @rspec_options ||= "#{ENV["TB_RSPEC_OPTIONS"]} --format documentation --require #{formatter_path} --format SemaphoreFormatter --out #{report_path}"
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("--thread INDEX") do |parameter|
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("--job INDEX") do |parameter|
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 ouputs { :job_index => 1, :job_count => 32 }
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 ||= Dir[@file_pattern].sort
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
@@ -1,3 +1,3 @@
1
1
  module TestBoosters
2
- VERSION = "2.2.4".freeze
2
+ VERSION = "2.7.0".freeze
3
3
  end
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.2.4
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: 2018-04-11 00:00:00.000000000 Z
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