knapsack_pro 1.8.0 → 1.9.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 +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +47 -0
- data/lib/knapsack_pro/client/api/v1/queues.rb +17 -10
- data/lib/knapsack_pro/version.rb +1 -1
- data/spec/knapsack_pro/client/api/v1/queues_spec.rb +44 -20
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d7bf901385b7f5c6010f0ec20241cf9d74e4c954cf69ae75ca7f5ac1d4c549b
|
4
|
+
data.tar.gz: 0a24d55e70d9055e70ae052ef152e0cf1a85716d4d93025e800a5b1769853f0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0482cd76a5a08df97ce43abf6d89763f1f8fb83cd3aca349c09de993513a87c623bfe0abb31a05d9dd5701101ebf19789e0a41145b3f2e435567a244a462a992'
|
7
|
+
data.tar.gz: 0b958c6d1bf0d8f9cdfcb4a97b5f48a0ad3b046acdc6c6b7198e0a7865f37928fe8f2d4d62acb0306489d5779bd07b613cb5774aca426dd774b81fd6cf431435
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
### 1.9.0
|
4
|
+
|
5
|
+
* Reduce data transfer and speed up usage of Knapsack Pro API for Queue Mode
|
6
|
+
|
7
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/81
|
8
|
+
|
9
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v1.8.0...v1.9.0
|
10
|
+
|
3
11
|
### 1.8.0
|
4
12
|
|
5
13
|
* Run Fallback Mode when `OpenSSL::SSL::SSLError` certificate verify failed for API
|
data/README.md
CHANGED
@@ -165,6 +165,8 @@ You can see list of questions for common problems and tips in below [Table of Co
|
|
165
165
|
- [How to set `before(:suite)` and `after(:suite)` RSpec hooks in Queue Mode (Percy.io example)?](#how-to-set-beforesuite-and-aftersuite-rspec-hooks-in-queue-mode-percyio-example)
|
166
166
|
- [How to call `before(:suite)` and `after(:suite)` RSpec hooks only once in Queue Mode?](#how-to-call-beforesuite-and-aftersuite-rspec-hooks-only-once-in-queue-mode)
|
167
167
|
- [How to run knapsack_pro with parallel_tests gem?](#how-to-run-knapsack_pro-with-parallel_tests-gem)
|
168
|
+
- [parallel_tests with knapsack_pro on parallel CI nodes](#parallel_tests-with-knapsack_pro-on-parallel-ci-nodes)
|
169
|
+
- [parallel_tests with knapsack_pro on single CI machine](#parallel_tests-with-knapsack_pro-on-single-ci-machine)
|
168
170
|
- [How to retry failed tests (flaky tests)?](#how-to-retry-failed-tests-flaky-tests)
|
169
171
|
- [How can I run tests from multiple directories?](#how-can-i-run-tests-from-multiple-directories)
|
170
172
|
- [Why I don't see all test files being recorded in user dashboard](#why-i-dont-see-all-test-files-being-recorded-in-user-dashboard)
|
@@ -2116,6 +2118,8 @@ end
|
|
2116
2118
|
|
2117
2119
|
#### How to run knapsack_pro with parallel_tests gem?
|
2118
2120
|
|
2121
|
+
##### parallel_tests with knapsack_pro on parallel CI nodes
|
2122
|
+
|
2119
2123
|
You can run knapsack_pro with [parallel_tests](https://github.com/grosser/parallel_tests) gem to run multiple concurrent knapsack_pro commands per CI node.
|
2120
2124
|
|
2121
2125
|
Let's consider this example. We have 2 CI node. On each CI node we want to run 2 concurrent knapsack_pro commands by parallel_tests gem (`PARALLEL_TESTS_CONCURRENCY=2`).
|
@@ -2199,6 +2203,49 @@ To ensure everything works you can check output for each CI node.
|
|
2199
2203
|
(tests output here)
|
2200
2204
|
```
|
2201
2205
|
|
2206
|
+
##### parallel_tests with knapsack_pro on single CI machine
|
2207
|
+
|
2208
|
+
This tip is only relevant to you if you cannot use multiple parallel CI nodes on your CI provider. In such case, you can run your tests on a single CI machine with knapsack_pro Queue Mode in order to auto balance execution of tests and thanks to this better utilize CI machine resources.
|
2209
|
+
|
2210
|
+
You can run knapsack_pro with [parallel_tests](https://github.com/grosser/parallel_tests) gem to run multiple concurrent knapsack_pro commands on single CI node.
|
2211
|
+
|
2212
|
+
Create in your project directory an executable file `bin/parallel_tests_knapsack_pro_single_machine`:
|
2213
|
+
|
2214
|
+
```bash
|
2215
|
+
#!/bin/bash
|
2216
|
+
# bin/parallel_tests_knapsack_pro_single_machine
|
2217
|
+
|
2218
|
+
export KNAPSACK_PRO_CI_NODE_TOTAL=$PARALLEL_TESTS_CONCURRENCY
|
2219
|
+
|
2220
|
+
if [ "$TEST_ENV_NUMBER" == "" ]; then
|
2221
|
+
export KNAPSACK_PRO_CI_NODE_INDEX=0
|
2222
|
+
else
|
2223
|
+
export KNAPSACK_PRO_CI_NODE_INDEX=$(( $TEST_ENV_NUMBER - 1 ))
|
2224
|
+
fi
|
2225
|
+
|
2226
|
+
echo KNAPSACK_PRO_CI_NODE_TOTAL=$KNAPSACK_PRO_CI_NODE_TOTAL KNAPSACK_PRO_CI_NODE_INDEX=$KNAPSACK_PRO_CI_NODE_INDEX PARALLEL_TESTS_CONCURRENCY=$PARALLEL_TESTS_CONCURRENCY
|
2227
|
+
|
2228
|
+
bundle exec rake knapsack_pro:queue:rspec
|
2229
|
+
```
|
2230
|
+
|
2231
|
+
Then you need another script `bin/parallel_tests_knapsack_pro_single_machine_run` to run above script with `parallel_tests`:
|
2232
|
+
|
2233
|
+
```bash
|
2234
|
+
#!/bin/bash
|
2235
|
+
# bin/parallel_tests_knapsack_pro_single_machine_run
|
2236
|
+
|
2237
|
+
export PARALLEL_TESTS_CONCURRENCY=2;
|
2238
|
+
|
2239
|
+
RAILS_ENV=test \
|
2240
|
+
KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC=xxx \
|
2241
|
+
KNAPSACK_PRO_REPOSITORY_ADAPTER=git \
|
2242
|
+
KNAPSACK_PRO_PROJECT_DIR=/home/user/rails-app-repo \
|
2243
|
+
PARALLEL_TESTS_CONCURRENCY=$PARALLEL_TESTS_CONCURRENCY \
|
2244
|
+
bundle exec parallel_test -n $PARALLEL_TESTS_CONCURRENCY -e './bin/parallel_tests_knapsack_pro_single_machine'
|
2245
|
+
```
|
2246
|
+
|
2247
|
+
Now you can run `bin/parallel_tests_knapsack_pro_single_machine_run` and it will execute 2 parallel processes with `parallel_tests`. Each process will run knapsack_pro Queue Mode to autobalance test files distribution across the processes.
|
2248
|
+
|
2202
2249
|
#### How to retry failed tests (flaky tests)?
|
2203
2250
|
|
2204
2251
|
Flaky (nondeterministic) tests, are tests that exhibit both a passing and a failing result with the same code.
|
@@ -5,19 +5,26 @@ module KnapsackPro
|
|
5
5
|
class Queues < Base
|
6
6
|
class << self
|
7
7
|
def queue(args)
|
8
|
+
request_hash = {
|
9
|
+
:fixed_queue_split => KnapsackPro::Config::Env.fixed_queue_split,
|
10
|
+
:can_initialize_queue => args.fetch(:can_initialize_queue),
|
11
|
+
:commit_hash => args.fetch(:commit_hash),
|
12
|
+
:branch => args.fetch(:branch),
|
13
|
+
:node_total => args.fetch(:node_total),
|
14
|
+
:node_index => args.fetch(:node_index),
|
15
|
+
:node_build_id => KnapsackPro::Config::Env.ci_node_build_id,
|
16
|
+
}
|
17
|
+
|
18
|
+
if request_hash[:can_initialize_queue]
|
19
|
+
request_hash.merge!({
|
20
|
+
:test_files => args.fetch(:test_files)
|
21
|
+
})
|
22
|
+
end
|
23
|
+
|
8
24
|
action_class.new(
|
9
25
|
endpoint_path: '/v1/queues/queue',
|
10
26
|
http_method: :post,
|
11
|
-
request_hash:
|
12
|
-
:fixed_queue_split => KnapsackPro::Config::Env.fixed_queue_split,
|
13
|
-
:can_initialize_queue => args.fetch(:can_initialize_queue),
|
14
|
-
:commit_hash => args.fetch(:commit_hash),
|
15
|
-
:branch => args.fetch(:branch),
|
16
|
-
:node_total => args.fetch(:node_total),
|
17
|
-
:node_index => args.fetch(:node_index),
|
18
|
-
:node_build_id => KnapsackPro::Config::Env.ci_node_build_id,
|
19
|
-
:test_files => args.fetch(:test_files)
|
20
|
-
}
|
27
|
+
request_hash: request_hash
|
21
28
|
)
|
22
29
|
end
|
23
30
|
end
|
data/lib/knapsack_pro/version.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
describe KnapsackPro::Client::API::V1::Queues do
|
2
2
|
describe '.queue' do
|
3
3
|
let(:fixed_queue_split) { double }
|
4
|
-
let(:can_initialize_queue) { double }
|
5
4
|
let(:commit_hash) { double }
|
6
5
|
let(:branch) { double }
|
7
6
|
let(:node_total) { double }
|
8
7
|
let(:node_index) { double }
|
9
8
|
let(:test_files) { double }
|
9
|
+
let(:node_build_id) { double }
|
10
10
|
|
11
11
|
subject do
|
12
12
|
described_class.queue(
|
@@ -21,28 +21,52 @@ describe KnapsackPro::Client::API::V1::Queues do
|
|
21
21
|
|
22
22
|
before do
|
23
23
|
expect(KnapsackPro::Config::Env).to receive(:fixed_queue_split).and_return(fixed_queue_split)
|
24
|
+
expect(KnapsackPro::Config::Env).to receive(:ci_node_build_id).and_return(node_build_id)
|
24
25
|
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
context 'when can_initialize_queue=true' do
|
28
|
+
let(:can_initialize_queue) { true }
|
29
|
+
|
30
|
+
it 'sends test_files among other params' do
|
31
|
+
action = double
|
32
|
+
expect(KnapsackPro::Client::API::Action).to receive(:new).with({
|
33
|
+
endpoint_path: '/v1/queues/queue',
|
34
|
+
http_method: :post,
|
35
|
+
request_hash: {
|
36
|
+
fixed_queue_split: fixed_queue_split,
|
37
|
+
can_initialize_queue: can_initialize_queue,
|
38
|
+
commit_hash: commit_hash,
|
39
|
+
branch: branch,
|
40
|
+
node_total: node_total,
|
41
|
+
node_index: node_index,
|
42
|
+
node_build_id: node_build_id,
|
43
|
+
test_files: test_files
|
44
|
+
}
|
45
|
+
}).and_return(action)
|
46
|
+
expect(subject).to eq action
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'when can_initialize_queue=false' do
|
51
|
+
let(:can_initialize_queue) { false }
|
29
52
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
53
|
+
it 'does not send test_files among other params' do
|
54
|
+
action = double
|
55
|
+
expect(KnapsackPro::Client::API::Action).to receive(:new).with({
|
56
|
+
endpoint_path: '/v1/queues/queue',
|
57
|
+
http_method: :post,
|
58
|
+
request_hash: {
|
59
|
+
fixed_queue_split: fixed_queue_split,
|
60
|
+
can_initialize_queue: can_initialize_queue,
|
61
|
+
commit_hash: commit_hash,
|
62
|
+
branch: branch,
|
63
|
+
node_total: node_total,
|
64
|
+
node_index: node_index,
|
65
|
+
node_build_id: node_build_id,
|
66
|
+
}
|
67
|
+
}).and_return(action)
|
68
|
+
expect(subject).to eq action
|
69
|
+
end
|
46
70
|
end
|
47
71
|
end
|
48
72
|
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.
|
4
|
+
version: 1.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ArturT
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -398,7 +398,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
398
398
|
- !ruby/object:Gem::Version
|
399
399
|
version: '0'
|
400
400
|
requirements: []
|
401
|
-
rubygems_version: 3.0.
|
401
|
+
rubygems_version: 3.0.3
|
402
402
|
signing_key:
|
403
403
|
specification_version: 4
|
404
404
|
summary: Knapsack Pro splits tests across CI nodes and makes sure that tests will
|