semaphore_test_boosters 2.2.4 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
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