knapsack_pro 1.22.0 → 1.22.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +19 -6
- data/lib/knapsack_pro/slow_test_file_determiner.rb +9 -4
- data/lib/knapsack_pro/test_case_detectors/rspec_test_example_detector.rb +9 -6
- data/lib/knapsack_pro/version.rb +1 -1
- data/spec/knapsack_pro/slow_test_file_determiner_spec.rb +1 -1
- data/spec/knapsack_pro/test_case_detectors/rspec_test_example_detector_spec.rb +2 -2
- 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: 1ff5e0f88a008abb13c1ca010f4b430be290ecf4e349719cac39611eebc575a4
|
4
|
+
data.tar.gz: 83650913e5d6cd21201ebce5ae48c731d61a0bc27bb37f566fcdc3d96a9b0598
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b3d2dc24c6592040f559f77f59168502bb949b135406a06f59c836494902412e202a28bc781760e0862f416ccaa2d2c9a246269fee87e9fd3d9120ba803f4ab
|
7
|
+
data.tar.gz: 9d4005922f963d765b494ab2b35642fa3be85787a6deb8b490ed3e1f64e5055d474d4cdae5b1bba4d4668b4c63fd59d9063102baf7036830e53d409ba8cf016a
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
### 1.22.1
|
4
|
+
|
5
|
+
* Fix for an auto split of slow RSpec test files by test examples when using `KNAPSACK_PRO_RSPEC_SPLIT_BY_TEST_EXAMPLES=true` and `parallel_tests` gem. Save the JSON reports with unique file names with the CI node index in the name to avoid accidentally overriding the files on the same disk.
|
6
|
+
|
7
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/113
|
8
|
+
|
9
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v1.22.0...v1.22.1
|
10
|
+
|
3
11
|
### 1.22.0
|
4
12
|
|
5
13
|
* Increase request retry timebox from 4s to 8s to not flood Knapsack Pro API with too many requests in a short period of time and to give time for API server to autoscale and add additional machines to serve traffic
|
data/README.md
CHANGED
@@ -711,7 +711,7 @@ Read below required configuration step if you use Queue Mode and you set [`KNAPS
|
|
711
711
|
|
712
712
|
If you use other CI server you need to manually configure your CI server to set `KNAPSACK_PRO_CI_NODE_RETRY_COUNT=1` only during retry CI node attempt. If `KNAPSACK_PRO_CI_NODE_RETRY_COUNT > 0` then knapsack_pro won't allow starting running tests in Fallback Mode and instead will raise error so a user can manually retry CI node later when a connection to Knapsack Pro API can be established.
|
713
713
|
|
714
|
-
If you cannot set `KNAPSACK_PRO_CI_NODE_RETRY_COUNT` only for retried CI node or it is not possible for your CI server then you can disable Fallback Mode completely `KNAPSACK_PRO_FALLBACK_MODE_ENABLED=false`.
|
714
|
+
If you cannot set `KNAPSACK_PRO_CI_NODE_RETRY_COUNT` only for retried CI node or it is not possible for your CI server then you can disable Fallback Mode completely `KNAPSACK_PRO_FALLBACK_MODE_ENABLED=false`. When Fallback Mode is disabled then knapsack_pro gem will try to connect to Knapsack Pro API 6 times instead of only 3 times to ensure there is a low chance of failing your CI node due to lost connection with the API.
|
715
715
|
|
716
716
|
### Passing arguments to rake task
|
717
717
|
|
@@ -991,19 +991,28 @@ You can parallelize your builds across virtual machines with [travis matrix feat
|
|
991
991
|
|
992
992
|
```yaml
|
993
993
|
script:
|
994
|
-
# Step for RSpec
|
994
|
+
# Step for RSpec in Regular Mode
|
995
995
|
- "bundle exec rake knapsack_pro:rspec"
|
996
996
|
|
997
|
-
# Step for
|
997
|
+
# Step for RSpec in Queue Mode
|
998
|
+
- "bundle exec rake knapsack_pro:queue:rspec"
|
999
|
+
|
1000
|
+
# Step for Cucumber in Regular Mode
|
998
1001
|
- "bundle exec rake knapsack_pro:cucumber"
|
999
1002
|
|
1000
|
-
# Step for
|
1003
|
+
# Step for Cucumber in Queue Mode
|
1004
|
+
- "bundle exec rake knapsack_pro:queue:cucumber"
|
1005
|
+
|
1006
|
+
# Step for Minitest in Regular Mode
|
1001
1007
|
- "bundle exec rake knapsack_pro:minitest"
|
1002
1008
|
|
1003
|
-
# Step for
|
1009
|
+
# Step for Minitest in Queue Mode
|
1010
|
+
- "bundle exec rake knapsack_pro:queue:minitest"
|
1011
|
+
|
1012
|
+
# Step for test-unit in Regular Mode
|
1004
1013
|
- "bundle exec rake knapsack_pro:test_unit"
|
1005
1014
|
|
1006
|
-
# Step for Spinach
|
1015
|
+
# Step for Spinach in Regular Mode
|
1007
1016
|
- "bundle exec rake knapsack_pro:spinach"
|
1008
1017
|
|
1009
1018
|
env:
|
@@ -1015,6 +1024,10 @@ env:
|
|
1015
1024
|
- KNAPSACK_PRO_TEST_SUITE_TOKEN_TEST_UNIT=test-unit-token
|
1016
1025
|
- KNAPSACK_PRO_TEST_SUITE_TOKEN_SPINACH=spinach-token
|
1017
1026
|
|
1027
|
+
# if you use Knapsack Pro Queue Mode you must set below env variable
|
1028
|
+
# to be able to retry single failed parallel job from Travis UI
|
1029
|
+
- KNAPSACK_PRO_FIXED_QUEUE_SPLIT=true
|
1030
|
+
|
1018
1031
|
- KNAPSACK_PRO_CI_NODE_TOTAL=2
|
1019
1032
|
jobs:
|
1020
1033
|
- KNAPSACK_PRO_CI_NODE_INDEX=0
|
@@ -2,7 +2,6 @@ module KnapsackPro
|
|
2
2
|
class SlowTestFileDeterminer
|
3
3
|
TIME_THRESHOLD_PER_CI_NODE = 0.7 # 70%
|
4
4
|
REPORT_DIR = 'tmp/knapsack_pro/slow_test_file_determiner'
|
5
|
-
REPORT_PATH = "#{REPORT_DIR}/slow_test_files.json"
|
6
5
|
|
7
6
|
# test_files: { 'path' => 'a_spec.rb', 'time_execution' => 0.0 }
|
8
7
|
# time_execution: of build distribution (total time of CI build run)
|
@@ -16,13 +15,19 @@ module KnapsackPro
|
|
16
15
|
|
17
16
|
def self.save_to_json_report(test_files)
|
18
17
|
FileUtils.mkdir_p(REPORT_DIR)
|
19
|
-
File.write(
|
18
|
+
File.write(report_path, test_files.to_json)
|
20
19
|
end
|
21
20
|
|
22
21
|
def self.read_from_json_report
|
23
|
-
raise 'Report with slow test files was not generated yet. If you have enabled split by test cases https://github.com/KnapsackPro/knapsack_pro-ruby#split-test-files-by-test-cases and you see this error it means that your tests accidentally cleaned up tmp/knapsack_pro directory. Please do not remove this directory during tests runtime!' unless File.exists?(
|
24
|
-
slow_test_files_json_report = File.read(
|
22
|
+
raise 'Report with slow test files was not generated yet. If you have enabled split by test cases https://github.com/KnapsackPro/knapsack_pro-ruby#split-test-files-by-test-cases and you see this error it means that your tests accidentally cleaned up tmp/knapsack_pro directory. Please do not remove this directory during tests runtime!' unless File.exists?(report_path)
|
23
|
+
slow_test_files_json_report = File.read(report_path)
|
25
24
|
JSON.parse(slow_test_files_json_report)
|
26
25
|
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def self.report_path
|
30
|
+
"#{REPORT_DIR}/slow_test_files_node_#{KnapsackPro::Config::Env.ci_node_index}.json"
|
31
|
+
end
|
27
32
|
end
|
28
33
|
end
|
@@ -2,7 +2,6 @@ module KnapsackPro
|
|
2
2
|
module TestCaseDetectors
|
3
3
|
class RSpecTestExampleDetector
|
4
4
|
REPORT_DIR = 'tmp/knapsack_pro/test_case_detectors/rspec'
|
5
|
-
REPORT_PATH = "#{REPORT_DIR}/rspec_dry_run_json_report.json"
|
6
5
|
|
7
6
|
def generate_json_report
|
8
7
|
require 'rspec/core'
|
@@ -22,13 +21,13 @@ module KnapsackPro
|
|
22
21
|
|
23
22
|
if test_file_entities.empty?
|
24
23
|
no_examples_json = { examples: [] }.to_json
|
25
|
-
File.write(
|
24
|
+
File.write(report_path, no_examples_json)
|
26
25
|
return
|
27
26
|
end
|
28
27
|
|
29
28
|
cli_args = cli_format + [
|
30
29
|
'--dry-run',
|
31
|
-
'--out',
|
30
|
+
'--out', report_path,
|
32
31
|
'--default-path', test_dir,
|
33
32
|
] + KnapsackPro::TestFilePresenter.paths(test_file_entities)
|
34
33
|
options = RSpec::Core::ConfigurationOptions.new(cli_args)
|
@@ -39,9 +38,9 @@ module KnapsackPro
|
|
39
38
|
end
|
40
39
|
|
41
40
|
def test_file_example_paths
|
42
|
-
raise "No report found at #{
|
41
|
+
raise "No report found at #{report_path}" unless File.exists?(report_path)
|
43
42
|
|
44
|
-
json_report = File.read(
|
43
|
+
json_report = File.read(report_path)
|
45
44
|
hash_report = JSON.parse(json_report)
|
46
45
|
hash_report
|
47
46
|
.fetch('examples')
|
@@ -61,6 +60,10 @@ module KnapsackPro
|
|
61
60
|
|
62
61
|
private
|
63
62
|
|
63
|
+
def report_path
|
64
|
+
"#{REPORT_DIR}/rspec_dry_run_json_report_node_#{KnapsackPro::Config::Env.ci_node_index}.json"
|
65
|
+
end
|
66
|
+
|
64
67
|
def adapter_class
|
65
68
|
KnapsackPro::Adapters::RSpecAdapter
|
66
69
|
end
|
@@ -78,7 +81,7 @@ module KnapsackPro
|
|
78
81
|
end
|
79
82
|
|
80
83
|
def remove_old_json_report
|
81
|
-
File.delete(
|
84
|
+
File.delete(report_path) if File.exists?(report_path)
|
82
85
|
end
|
83
86
|
|
84
87
|
def test_file_hash_for(test_file_path)
|
data/lib/knapsack_pro/version.rb
CHANGED
@@ -27,7 +27,7 @@ describe KnapsackPro::SlowTestFileDeterminer do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
describe '.save_to_json_report', :clear_tmp do
|
30
|
-
let(:json_report_path) { 'tmp/knapsack_pro/slow_test_file_determiner/
|
30
|
+
let(:json_report_path) { 'tmp/knapsack_pro/slow_test_file_determiner/slow_test_files_node_0.json' }
|
31
31
|
let(:test_files) do
|
32
32
|
[
|
33
33
|
{ 'path' => 'a_spec.rb', 'time_execution' => 1.0 },
|
@@ -1,6 +1,6 @@
|
|
1
1
|
describe KnapsackPro::TestCaseDetectors::RSpecTestExampleDetector do
|
2
2
|
let(:report_dir) { 'tmp/knapsack_pro/test_case_detectors/rspec' }
|
3
|
-
let(:report_path) { 'tmp/knapsack_pro/test_case_detectors/rspec/
|
3
|
+
let(:report_path) { 'tmp/knapsack_pro/test_case_detectors/rspec/rspec_dry_run_json_report_node_0.json' }
|
4
4
|
let(:rspec_test_example_detector) { described_class.new }
|
5
5
|
|
6
6
|
describe '#generate_json_report' do
|
@@ -116,7 +116,7 @@ describe KnapsackPro::TestCaseDetectors::RSpecTestExampleDetector do
|
|
116
116
|
it do
|
117
117
|
expect(File).to receive(:exists?).with(report_path).and_return(false)
|
118
118
|
|
119
|
-
expect { subject }.to raise_error(RuntimeError, 'No report found at tmp/knapsack_pro/test_case_detectors/rspec/
|
119
|
+
expect { subject }.to raise_error(RuntimeError, 'No report found at tmp/knapsack_pro/test_case_detectors/rspec/rspec_dry_run_json_report_node_0.json')
|
120
120
|
end
|
121
121
|
end
|
122
122
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knapsack_pro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.22.
|
4
|
+
version: 1.22.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ArturT
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|