rspec_chunked 0.1.0 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -6
- data/Rakefile +4 -0
- data/lib/rspec_chunked.rb +1 -0
- data/lib/rspec_chunked/chunked_tests.rb +5 -4
- data/lib/rspec_chunked/railtie.rb +4 -0
- data/lib/rspec_chunked/version.rb +1 -1
- data/lib/tasks/rspec_chunked_tasks.rake +16 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a22a1dad0fb805db73f6d53b2a9b19894a08b7c4b299de78a63e9bd88015ab6f
|
4
|
+
data.tar.gz: dde3ab891cdb771964db3ea58922836fae874e969a0ca86fb3b41ecc4dce20a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bee4a8e04ecfb698edb4b462a658f03fb13c8b0e1500fc9d68c7234af468bfc645706a66a0036908c29e09742431f3ff43472600f26dd617d2ecd4ce5db20008
|
7
|
+
data.tar.gz: a5993d30cd9f60bad63761021dbba113cb7ec3addddd5ebc756bbbded12e6b635d264498aa98c3f1027f0437ad1661f5db9ee18f020cf5d7e1e5abda004c1a4f
|
data/README.md
CHANGED
@@ -16,23 +16,34 @@ If ordering is not enough, permits to balance manually by moving x percentage of
|
|
16
16
|
- Add manual balance
|
17
17
|
```ruby
|
18
18
|
# config/initializers/rspec_chunked.rb
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
if defined?(RspecChunked::ChunkedTests)
|
20
|
+
data = { 1 => { to: 2, percentage: 15 },
|
21
|
+
4 => { to: 3, percentage: 10 } }
|
22
|
+
RspecChunked::ChunkedTests.balance_settings = data
|
23
|
+
end
|
22
24
|
```
|
23
25
|
Balance tests by moving 15% tests files from group 1 into group 2 and moving 10% tests files from group 4 into group 3
|
24
26
|
|
25
27
|
## Usage
|
26
|
-
|
28
|
+
- Basic initialization
|
29
|
+
` CI_JOBS=3 CI_JOB=1 rake rspec_chunked`
|
30
|
+
- Custom initialization
|
31
|
+
` CI_JOBS=3 CI_JOB=1 CI_CMD="bundle exec rspec ..." rake rspec_chunked`
|
27
32
|
- `CI_JOBS`: quantity of groups/workers to be split
|
28
33
|
- `CI_JOB`: current group/worker to be executed, limit: 1 until CI_JOBS
|
34
|
+
- `CI_CMD`: Custom rspec command
|
35
|
+
|
36
|
+
### Coverage merge reports (when using [simplecov](https://github.com/simplecov-ruby/simplecov#merging-test-runs-under-different-execution-environments))
|
37
|
+
This task will merge all coverage reports
|
38
|
+
`rake rspec_chunked:merge_reports`
|
39
|
+
|
29
40
|
|
30
41
|
### Github workflow result
|
31
42
|
- Before:
|
32
43
|
![Before](/docs/before.png?raw=true)
|
33
44
|
|
34
|
-
-
|
35
|
-
![
|
45
|
+
- After:
|
46
|
+
![After](/docs/current.png?raw=true)
|
36
47
|
|
37
48
|
- Github workflow sample:
|
38
49
|
````yaml
|
data/Rakefile
CHANGED
data/lib/rspec_chunked.rb
CHANGED
@@ -5,12 +5,13 @@ module RspecChunked
|
|
5
5
|
class << self
|
6
6
|
attr_accessor :balance_settings
|
7
7
|
end
|
8
|
-
attr_accessor :qty_groups, :job_number, :balance_settings
|
8
|
+
attr_accessor :qty_groups, :job_number, :balance_settings, :cmd
|
9
9
|
|
10
|
-
def initialize(qty_groups, job_number)
|
10
|
+
def initialize(qty_groups, job_number, cmd: nil)
|
11
11
|
@qty_groups = qty_groups
|
12
12
|
@job_number = job_number - 1
|
13
13
|
@balance_settings = self.class.balance_settings || {}
|
14
|
+
@cmd = cmd || 'bundle exec rspec'
|
14
15
|
end
|
15
16
|
|
16
17
|
def run
|
@@ -18,7 +19,7 @@ module RspecChunked
|
|
18
19
|
tests = balanced_tests[job_number]
|
19
20
|
qty = balanced_tests.flatten.count
|
20
21
|
Kernel.puts "**** running #{tests.count}/#{qty} tests (group number: #{job_number + 1})"
|
21
|
-
Kernel.exec "
|
22
|
+
Kernel.exec "#{cmd} #{tests.join(' ')}"
|
22
23
|
end
|
23
24
|
|
24
25
|
private
|
@@ -35,7 +36,7 @@ module RspecChunked
|
|
35
36
|
|
36
37
|
def test_files
|
37
38
|
Dir['spec/**/*_spec.rb'].sort_by do |path|
|
38
|
-
File.size(File.join(
|
39
|
+
File.size(File.join('./', path)).to_f
|
39
40
|
end
|
40
41
|
end
|
41
42
|
|
@@ -1,10 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
desc 'Run chunked rspec tests on specific qty, sample: CI_JOBS=3 CI_JOB=1 rake rspec_chunked'
|
4
|
-
task :
|
4
|
+
task rspec_chunked: :environment do
|
5
5
|
qty_jobs = (ENV['CI_JOBS'] || 3).to_i
|
6
6
|
job_number = (ENV['CI_JOB'] || 1).to_i
|
7
|
-
|
8
|
-
service = RspecChunked::ChunkedTests.new(qty_jobs, job_number)
|
7
|
+
service = RspecChunked::ChunkedTests.new(qty_jobs, job_number, cmd: ENV['CI_CMD'])
|
9
8
|
service.run
|
9
|
+
copy_coverage(job_number)
|
10
|
+
end
|
11
|
+
|
12
|
+
def copy_coverage(job_number)
|
13
|
+
path = 'coverage/.resultset.json'
|
14
|
+
FileUtils.cp path, "coverage/.resultset-#{job_number}.json" if File.exist?(path)
|
15
|
+
end
|
16
|
+
|
17
|
+
namespace :rspec_chunked do
|
18
|
+
desc 'Collates all result sets generated by the different test runners'
|
19
|
+
task :merge_reports do
|
20
|
+
require 'simplecov'
|
21
|
+
SimpleCov.collate Dir['coverage/.resultset-*']
|
22
|
+
end
|
10
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec_chunked
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- owen2345
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-05-
|
11
|
+
date: 2021-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|