knapsack_pro 1.22.0 → 1.22.1
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/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
|