knapsack_pro 7.3.0 → 7.5.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/.circleci/config.yml +14 -0
- data/CHANGELOG.md +14 -0
- data/lib/knapsack_pro/config/env.rb +35 -27
- data/lib/knapsack_pro/version.rb +1 -1
- data/spec/knapsack_pro/config/env_spec.rb +300 -11
- data/spec/knapsack_pro_spec.rb +3 -5
- 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: cea03959b8de66cd8cbb686deb3ac76129f9cce7ee24b1da2a0ef9e57dd790df
|
|
4
|
+
data.tar.gz: ec12a1f99f57207e967846df739a5dfea4a1423e6823431ee9cf26f1d2f9a473
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cd53605f0d47ce2a3bc83410eb56d459a65aa1b75b169c420f5a11e3693b2aa7abee8e5b984eff35ab876de53809a2c113abb38b253e1e1b42726c817bccae6b
|
|
7
|
+
data.tar.gz: 93eaec09e20ba573cfb69b0f1ad2e8a04f5db2ab95637767a1abed0d8640cf131447b1adae67196998d73165232ea1a23e2c1fe547ab01b14436ace7d422edc5
|
data/.circleci/config.yml
CHANGED
|
@@ -152,6 +152,12 @@ jobs:
|
|
|
152
152
|
command: |
|
|
153
153
|
export KNAPSACK_PRO_BRANCH="$CIRCLE_BRANCH--$CIRCLE_BUILD_NUM--regular"
|
|
154
154
|
bundle exec rake knapsack_pro:rspec
|
|
155
|
+
- run:
|
|
156
|
+
working_directory: ~/rails-app-with-knapsack_pro
|
|
157
|
+
command: |
|
|
158
|
+
# retry the same split ||
|
|
159
|
+
export KNAPSACK_PRO_BRANCH="$CIRCLE_BRANCH--$CIRCLE_BUILD_NUM--regular"
|
|
160
|
+
bundle exec rake knapsack_pro:rspec
|
|
155
161
|
- run:
|
|
156
162
|
working_directory: ~/rails-app-with-knapsack_pro
|
|
157
163
|
command: |
|
|
@@ -285,6 +291,7 @@ jobs:
|
|
|
285
291
|
RACK_ENV: test
|
|
286
292
|
KNAPSACK_PRO_ENDPOINT: https://api-staging.knapsackpro.com
|
|
287
293
|
KNAPSACK_PRO_TEST_SUITE_TOKEN_MINITEST: $KNAPSACK_PRO_TEST_SUITE_TOKEN_MINITEST
|
|
294
|
+
KNAPSACK_PRO_RSPEC_DISABLED: true
|
|
288
295
|
EXTRA_TEST_FILES_DELAY: 10
|
|
289
296
|
- image: cimg/postgres:14.7
|
|
290
297
|
environment:
|
|
@@ -308,6 +315,12 @@ jobs:
|
|
|
308
315
|
command: |
|
|
309
316
|
export KNAPSACK_PRO_BRANCH="$CIRCLE_BRANCH--$CIRCLE_BUILD_NUM--regular"
|
|
310
317
|
bundle exec rake knapsack_pro:minitest[--verbose]
|
|
318
|
+
- run:
|
|
319
|
+
working_directory: ~/rails-app-with-knapsack_pro
|
|
320
|
+
command: |
|
|
321
|
+
# retry the same split ||
|
|
322
|
+
export KNAPSACK_PRO_BRANCH="$CIRCLE_BRANCH--$CIRCLE_BUILD_NUM--regular"
|
|
323
|
+
bundle exec rake knapsack_pro:minitest[--verbose]
|
|
311
324
|
|
|
312
325
|
e2e-queue-minitest:
|
|
313
326
|
parameters:
|
|
@@ -325,6 +338,7 @@ jobs:
|
|
|
325
338
|
RACK_ENV: test
|
|
326
339
|
KNAPSACK_PRO_ENDPOINT: https://api-staging.knapsackpro.com
|
|
327
340
|
KNAPSACK_PRO_TEST_SUITE_TOKEN_MINITEST: $KNAPSACK_PRO_TEST_SUITE_TOKEN_MINITEST
|
|
341
|
+
KNAPSACK_PRO_RSPEC_DISABLED: true
|
|
328
342
|
EXTRA_TEST_FILES_DELAY: 10
|
|
329
343
|
- image: cimg/postgres:14.7
|
|
330
344
|
environment:
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
### 7.5.0
|
|
4
|
+
* Raise when `KNAPSACK_PRO_CI_NODE_TOTAL` or `KNAPSACK_PRO_CI_NODE_INDEX` is missing and can't be determined from supported CI environments, instead of defaulting to arbitrary numbers.
|
|
5
|
+
|
|
6
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/256
|
|
7
|
+
|
|
8
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v7.4.0...v7.5.0
|
|
9
|
+
|
|
10
|
+
### 7.4.0
|
|
11
|
+
* Warn when `KNAPSACK_PRO_*` environment variables are set manually if their values could be automatically determined from supported CI environments.
|
|
12
|
+
|
|
13
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/254
|
|
14
|
+
|
|
15
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v7.3.0...v7.4.0
|
|
16
|
+
|
|
3
17
|
### 7.3.0
|
|
4
18
|
|
|
5
19
|
* [Queue Mode][RSpec] Pass each batch of tests to the queue hooks: `KnapsackPro::Hooks::Queue.before_subset_queue` and `KnapsackPro::Hooks::Queue.after_subset_queue`
|
|
@@ -13,30 +13,27 @@ module KnapsackPro
|
|
|
13
13
|
|
|
14
14
|
class << self
|
|
15
15
|
def ci_node_total
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
env_name = 'KNAPSACK_PRO_CI_NODE_TOTAL'
|
|
17
|
+
env_value = env_for(env_name, :node_total)
|
|
18
|
+
|
|
19
|
+
env_value ? env_value.to_i : raise_missing_env_for(env_name)
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def ci_node_index
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
env_name = 'KNAPSACK_PRO_CI_NODE_INDEX'
|
|
24
|
+
env_value = env_for(env_name, :node_index)
|
|
25
|
+
|
|
26
|
+
env_value ? env_value.to_i : raise_missing_env_for(env_name)
|
|
25
27
|
end
|
|
26
28
|
|
|
27
29
|
def ci_node_build_id
|
|
28
30
|
env_name = 'KNAPSACK_PRO_CI_NODE_BUILD_ID'
|
|
29
|
-
|
|
30
|
-
ci_env_for(:node_build_id) ||
|
|
31
|
+
env_for(env_name, :node_build_id) ||
|
|
31
32
|
raise("Missing environment variable #{env_name}. Read more at #{KnapsackPro::Urls::KNAPSACK_PRO_CI_NODE_BUILD_ID}")
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
def ci_node_retry_count
|
|
35
|
-
(
|
|
36
|
-
ENV['KNAPSACK_PRO_CI_NODE_RETRY_COUNT'] ||
|
|
37
|
-
ci_env_for(:node_retry_count) ||
|
|
38
|
-
0
|
|
39
|
-
).to_i
|
|
36
|
+
(env_for('KNAPSACK_PRO_CI_NODE_RETRY_COUNT', :node_retry_count) || 0).to_i
|
|
40
37
|
end
|
|
41
38
|
|
|
42
39
|
def max_request_retries
|
|
@@ -47,23 +44,19 @@ module KnapsackPro
|
|
|
47
44
|
end
|
|
48
45
|
|
|
49
46
|
def commit_hash
|
|
50
|
-
|
|
51
|
-
ci_env_for(:commit_hash)
|
|
47
|
+
env_for('KNAPSACK_PRO_COMMIT_HASH', :commit_hash)
|
|
52
48
|
end
|
|
53
49
|
|
|
54
50
|
def branch
|
|
55
|
-
|
|
56
|
-
ci_env_for(:branch)
|
|
51
|
+
env_for('KNAPSACK_PRO_BRANCH', :branch)
|
|
57
52
|
end
|
|
58
53
|
|
|
59
54
|
def project_dir
|
|
60
|
-
|
|
61
|
-
ci_env_for(:project_dir)
|
|
55
|
+
env_for('KNAPSACK_PRO_PROJECT_DIR', :project_dir)
|
|
62
56
|
end
|
|
63
57
|
|
|
64
58
|
def user_seat
|
|
65
|
-
|
|
66
|
-
ci_env_for(:user_seat)
|
|
59
|
+
env_for('KNAPSACK_PRO_USER_SEAT', :user_seat)
|
|
67
60
|
end
|
|
68
61
|
|
|
69
62
|
def masked_user_seat
|
|
@@ -183,7 +176,7 @@ module KnapsackPro
|
|
|
183
176
|
def fixed_queue_split
|
|
184
177
|
@fixed_queue_split ||= begin
|
|
185
178
|
env_name = 'KNAPSACK_PRO_FIXED_QUEUE_SPLIT'
|
|
186
|
-
computed =
|
|
179
|
+
computed = env_for(env_name, :fixed_queue_split).to_s
|
|
187
180
|
|
|
188
181
|
if !ENV.key?(env_name)
|
|
189
182
|
KnapsackPro.logger.info("#{env_name} is not set. Using default value: #{computed}. Learn more at #{KnapsackPro::Urls::FIXED_QUEUE_SPLIT}")
|
|
@@ -249,10 +242,6 @@ module KnapsackPro
|
|
|
249
242
|
end
|
|
250
243
|
end
|
|
251
244
|
|
|
252
|
-
def ci_env_for(env_name)
|
|
253
|
-
detected_ci.new.send(env_name)
|
|
254
|
-
end
|
|
255
|
-
|
|
256
245
|
def detected_ci
|
|
257
246
|
detected = KnapsackPro::Config::CI.constants.map do |constant|
|
|
258
247
|
Object.const_get("KnapsackPro::Config::CI::#{constant}").new.detected
|
|
@@ -291,7 +280,26 @@ module KnapsackPro
|
|
|
291
280
|
private
|
|
292
281
|
|
|
293
282
|
def required_env(env_name)
|
|
294
|
-
ENV[env_name] ||
|
|
283
|
+
ENV[env_name] || raise_missing_env_for(env_name)
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def env_for(knapsack_env_name, ci_env_method)
|
|
287
|
+
knapsack_env_value = ENV[knapsack_env_name]
|
|
288
|
+
ci_env_value = ci_env_for(ci_env_method)
|
|
289
|
+
|
|
290
|
+
if !knapsack_env_value.nil? && !ci_env_value.nil? && knapsack_env_value != ci_env_value.to_s
|
|
291
|
+
KnapsackPro.logger.info("You have set the environment variable #{knapsack_env_name} to #{knapsack_env_value} which could be automatically determined from the CI environment as #{ci_env_value}.")
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
knapsack_env_value != nil ? knapsack_env_value : ci_env_value
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def ci_env_for(env_name)
|
|
298
|
+
detected_ci.new.send(env_name)
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
def raise_missing_env_for(env_name)
|
|
302
|
+
raise("Missing environment variable #{env_name}")
|
|
295
303
|
end
|
|
296
304
|
end
|
|
297
305
|
end
|
data/lib/knapsack_pro/version.rb
CHANGED
|
@@ -17,10 +17,46 @@ describe KnapsackPro::Config::Env do
|
|
|
17
17
|
|
|
18
18
|
it { should eq 4 }
|
|
19
19
|
end
|
|
20
|
+
|
|
21
|
+
context 'when both KNAPSACK_PRO_CI_NODE_TOTAL and CI environment have value' do
|
|
22
|
+
let(:logger) { instance_double(Logger, info: nil) }
|
|
23
|
+
|
|
24
|
+
before do
|
|
25
|
+
stub_const("ENV", { 'KNAPSACK_PRO_CI_NODE_TOTAL' => env_value })
|
|
26
|
+
expect(described_class).to receive(:ci_env_for).with(:node_total).and_return(ci_value)
|
|
27
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
context 'when values are different' do
|
|
31
|
+
let(:env_value) { '5' }
|
|
32
|
+
let(:ci_value) { 4 }
|
|
33
|
+
|
|
34
|
+
it { should eq 5 }
|
|
35
|
+
|
|
36
|
+
it 'logs a warning' do
|
|
37
|
+
expect(logger).to receive(:info).with(
|
|
38
|
+
'You have set the environment variable KNAPSACK_PRO_CI_NODE_TOTAL to 5 which could be automatically determined from the CI environment as 4.'
|
|
39
|
+
)
|
|
40
|
+
subject
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context 'when values are the same' do
|
|
45
|
+
let(:env_value) { '5' }
|
|
46
|
+
let(:ci_value) { 5 }
|
|
47
|
+
|
|
48
|
+
it 'does not log a warning' do
|
|
49
|
+
expect(logger).not_to receive(:info)
|
|
50
|
+
subject
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
20
54
|
end
|
|
21
55
|
|
|
22
56
|
context "when ENV doesn't exist" do
|
|
23
|
-
it
|
|
57
|
+
it 'raises' do
|
|
58
|
+
expect { subject }.to raise_error(/Missing environment variable KNAPSACK_PRO_CI_NODE_TOTAL/)
|
|
59
|
+
end
|
|
24
60
|
end
|
|
25
61
|
end
|
|
26
62
|
|
|
@@ -41,6 +77,40 @@ describe KnapsackPro::Config::Env do
|
|
|
41
77
|
it { should eq 2 }
|
|
42
78
|
end
|
|
43
79
|
|
|
80
|
+
context 'when both KNAPSACK_PRO_CI_NODE_INDEX and CI environment have value' do
|
|
81
|
+
let(:logger) { instance_double(Logger, info: nil) }
|
|
82
|
+
|
|
83
|
+
before do
|
|
84
|
+
stub_const("ENV", { 'KNAPSACK_PRO_CI_NODE_INDEX' => env_value })
|
|
85
|
+
expect(described_class).to receive(:ci_env_for).with(:node_index).and_return(ci_value)
|
|
86
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
context 'when values are different' do
|
|
90
|
+
let(:env_value) { '3' }
|
|
91
|
+
let(:ci_value) { 2 }
|
|
92
|
+
|
|
93
|
+
it { should eq 3 }
|
|
94
|
+
|
|
95
|
+
it 'logs a warning' do
|
|
96
|
+
expect(logger).to receive(:info).with(
|
|
97
|
+
'You have set the environment variable KNAPSACK_PRO_CI_NODE_INDEX to 3 which could be automatically determined from the CI environment as 2.'
|
|
98
|
+
)
|
|
99
|
+
subject
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
context 'when values are the same' do
|
|
104
|
+
let(:env_value) { '3' }
|
|
105
|
+
let(:ci_value) { 3 }
|
|
106
|
+
|
|
107
|
+
it 'does not log a warning' do
|
|
108
|
+
expect(logger).not_to receive(:info)
|
|
109
|
+
subject
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
44
114
|
context 'when order of loading envs does matter' do
|
|
45
115
|
context 'when GitLab CI' do
|
|
46
116
|
before { stub_const("ENV", { 'CI_NODE_INDEX' => '2', 'GITLAB_CI' => 'true' }) }
|
|
@@ -50,7 +120,9 @@ describe KnapsackPro::Config::Env do
|
|
|
50
120
|
end
|
|
51
121
|
|
|
52
122
|
context "when ENV doesn't exist" do
|
|
53
|
-
it
|
|
123
|
+
it 'raises' do
|
|
124
|
+
expect { subject }.to raise_error(/Missing environment variable KNAPSACK_PRO_CI_NODE_INDEX/)
|
|
125
|
+
end
|
|
54
126
|
end
|
|
55
127
|
end
|
|
56
128
|
|
|
@@ -70,6 +142,40 @@ describe KnapsackPro::Config::Env do
|
|
|
70
142
|
|
|
71
143
|
it { should eq '8' }
|
|
72
144
|
end
|
|
145
|
+
|
|
146
|
+
context 'when both KNAPSACK_PRO_CI_NODE_BUILD_ID and CI environment have value' do
|
|
147
|
+
let(:logger) { instance_double(Logger, info: nil) }
|
|
148
|
+
|
|
149
|
+
before do
|
|
150
|
+
stub_const("ENV", { 'KNAPSACK_PRO_CI_NODE_BUILD_ID' => env_value })
|
|
151
|
+
expect(described_class).to receive(:ci_env_for).with(:node_build_id).and_return(ci_value)
|
|
152
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
context 'when values are different' do
|
|
156
|
+
let(:env_value) { '7' }
|
|
157
|
+
let(:ci_value) { '8' }
|
|
158
|
+
|
|
159
|
+
it { should eq '7' }
|
|
160
|
+
|
|
161
|
+
it 'logs a warning' do
|
|
162
|
+
expect(logger).to receive(:info).with(
|
|
163
|
+
'You have set the environment variable KNAPSACK_PRO_CI_NODE_BUILD_ID to 7 which could be automatically determined from the CI environment as 8.'
|
|
164
|
+
)
|
|
165
|
+
subject
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
context 'when values are the same' do
|
|
170
|
+
let(:env_value) { '7' }
|
|
171
|
+
let(:ci_value) { '7' }
|
|
172
|
+
|
|
173
|
+
it 'does not log a warning' do
|
|
174
|
+
expect(logger).not_to receive(:info)
|
|
175
|
+
subject
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
73
179
|
end
|
|
74
180
|
|
|
75
181
|
context "when ENV does not exist" do
|
|
@@ -95,6 +201,40 @@ describe KnapsackPro::Config::Env do
|
|
|
95
201
|
|
|
96
202
|
it { should eq 2 }
|
|
97
203
|
end
|
|
204
|
+
|
|
205
|
+
context 'when both KNAPSACK_PRO_CI_NODE_RETRY_COUNT and CI environment have value' do
|
|
206
|
+
let(:logger) { instance_double(Logger, info: nil) }
|
|
207
|
+
|
|
208
|
+
before do
|
|
209
|
+
stub_const("ENV", { 'KNAPSACK_PRO_CI_NODE_RETRY_COUNT' => env_value })
|
|
210
|
+
expect(described_class).to receive(:ci_env_for).with(:node_retry_count).and_return(ci_value)
|
|
211
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
context 'when values are different' do
|
|
215
|
+
let(:env_value) { '1' }
|
|
216
|
+
let(:ci_value) { 2 }
|
|
217
|
+
|
|
218
|
+
it { should eq 1 }
|
|
219
|
+
|
|
220
|
+
it 'logs a warning' do
|
|
221
|
+
expect(logger).to receive(:info).with(
|
|
222
|
+
'You have set the environment variable KNAPSACK_PRO_CI_NODE_RETRY_COUNT to 1 which could be automatically determined from the CI environment as 2.'
|
|
223
|
+
)
|
|
224
|
+
subject
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
context 'when values are the same' do
|
|
229
|
+
let(:env_value) { '7' }
|
|
230
|
+
let(:ci_value) { '7' }
|
|
231
|
+
|
|
232
|
+
it 'does not log a warning' do
|
|
233
|
+
expect(logger).not_to receive(:info)
|
|
234
|
+
subject
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
end
|
|
98
238
|
end
|
|
99
239
|
|
|
100
240
|
context "when ENV doesn't exist" do
|
|
@@ -131,6 +271,40 @@ describe KnapsackPro::Config::Env do
|
|
|
131
271
|
|
|
132
272
|
it { should eq 'fe61a08118d0d52e97c38666eba1eaf3' }
|
|
133
273
|
end
|
|
274
|
+
|
|
275
|
+
context 'when both KNAPSACK_PRO_COMMIT_HASH and CI environment have value' do
|
|
276
|
+
let(:logger) { instance_double(Logger, info: nil) }
|
|
277
|
+
|
|
278
|
+
before do
|
|
279
|
+
stub_const("ENV", { 'KNAPSACK_PRO_COMMIT_HASH' => env_value })
|
|
280
|
+
expect(described_class).to receive(:ci_env_for).with(:commit_hash).and_return(ci_value)
|
|
281
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
context 'when values are different' do
|
|
285
|
+
let(:env_value) { '3fa64859337f6e56409d49f865d13fd7' }
|
|
286
|
+
let(:ci_value) { 'fe61a08118d0d52e97c38666eba1eaf3' }
|
|
287
|
+
|
|
288
|
+
it { should eq '3fa64859337f6e56409d49f865d13fd7' }
|
|
289
|
+
|
|
290
|
+
it 'logs a warning' do
|
|
291
|
+
expect(logger).to receive(:info).with(
|
|
292
|
+
'You have set the environment variable KNAPSACK_PRO_COMMIT_HASH to 3fa64859337f6e56409d49f865d13fd7 which could be automatically determined from the CI environment as fe61a08118d0d52e97c38666eba1eaf3.'
|
|
293
|
+
)
|
|
294
|
+
subject
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
context 'when values are the same' do
|
|
299
|
+
let(:env_value) { '3fa64859337f6e56409d49f865d13fd7' }
|
|
300
|
+
let(:ci_value) { '3fa64859337f6e56409d49f865d13fd7' }
|
|
301
|
+
|
|
302
|
+
it 'does not log a warning' do
|
|
303
|
+
expect(logger).not_to receive(:info)
|
|
304
|
+
subject
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
end
|
|
134
308
|
end
|
|
135
309
|
|
|
136
310
|
context "when ENV doesn't exist" do
|
|
@@ -154,6 +328,40 @@ describe KnapsackPro::Config::Env do
|
|
|
154
328
|
|
|
155
329
|
it { should eq 'feature-branch' }
|
|
156
330
|
end
|
|
331
|
+
|
|
332
|
+
context 'when both KNAPSACK_PRO_BRANCH and CI environment have value' do
|
|
333
|
+
let(:logger) { instance_double(Logger, info: nil) }
|
|
334
|
+
|
|
335
|
+
before do
|
|
336
|
+
stub_const("ENV", { 'KNAPSACK_PRO_BRANCH' => env_value })
|
|
337
|
+
expect(described_class).to receive(:ci_env_for).with(:branch).and_return(ci_value)
|
|
338
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
context 'when values are different' do
|
|
342
|
+
let(:env_value) { 'master' }
|
|
343
|
+
let(:ci_value) { 'feature-branch' }
|
|
344
|
+
|
|
345
|
+
it { should eq 'master' }
|
|
346
|
+
|
|
347
|
+
it 'logs a warning' do
|
|
348
|
+
expect(logger).to receive(:info).with(
|
|
349
|
+
'You have set the environment variable KNAPSACK_PRO_BRANCH to master which could be automatically determined from the CI environment as feature-branch.'
|
|
350
|
+
)
|
|
351
|
+
subject
|
|
352
|
+
end
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
context 'when values are the same' do
|
|
356
|
+
let(:env_value) { 'master' }
|
|
357
|
+
let(:ci_value) { 'master' }
|
|
358
|
+
|
|
359
|
+
it 'does not log a warning' do
|
|
360
|
+
expect(logger).not_to receive(:info)
|
|
361
|
+
subject
|
|
362
|
+
end
|
|
363
|
+
end
|
|
364
|
+
end
|
|
157
365
|
end
|
|
158
366
|
|
|
159
367
|
context "when ENV doesn't exist" do
|
|
@@ -177,6 +385,40 @@ describe KnapsackPro::Config::Env do
|
|
|
177
385
|
|
|
178
386
|
it { should eq '/home/runner/myapp' }
|
|
179
387
|
end
|
|
388
|
+
|
|
389
|
+
context 'when both KNAPSACK_PRO_PROJECT_DIR and CI environment have value' do
|
|
390
|
+
let(:logger) { instance_double(Logger, info: nil) }
|
|
391
|
+
|
|
392
|
+
before do
|
|
393
|
+
stub_const("ENV", { 'KNAPSACK_PRO_PROJECT_DIR' => env_value })
|
|
394
|
+
expect(described_class).to receive(:ci_env_for).with(:project_dir).and_return(ci_value)
|
|
395
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
context 'when values are different' do
|
|
399
|
+
let(:env_value) { '/home/user/myapp' }
|
|
400
|
+
let(:ci_value) { '/home/runner/myapp' }
|
|
401
|
+
|
|
402
|
+
it { should eq '/home/user/myapp' }
|
|
403
|
+
|
|
404
|
+
it 'logs a warning' do
|
|
405
|
+
expect(logger).to receive(:info).with(
|
|
406
|
+
'You have set the environment variable KNAPSACK_PRO_PROJECT_DIR to /home/user/myapp which could be automatically determined from the CI environment as /home/runner/myapp.'
|
|
407
|
+
)
|
|
408
|
+
subject
|
|
409
|
+
end
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
context 'when values are the same' do
|
|
413
|
+
let(:env_value) { '/home/user/myapp' }
|
|
414
|
+
let(:ci_value) { '/home/user/myapp' }
|
|
415
|
+
|
|
416
|
+
it 'does not log a warning' do
|
|
417
|
+
expect(logger).not_to receive(:info)
|
|
418
|
+
subject
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
end
|
|
180
422
|
end
|
|
181
423
|
|
|
182
424
|
context "when ENV doesn't exist" do
|
|
@@ -200,6 +442,40 @@ describe KnapsackPro::Config::Env do
|
|
|
200
442
|
|
|
201
443
|
it { should eq 'Jane Doe' }
|
|
202
444
|
end
|
|
445
|
+
|
|
446
|
+
context 'when both KNAPSACK_PRO_USER_SEAT and CI environment have value' do
|
|
447
|
+
let(:logger) { instance_double(Logger, info: nil) }
|
|
448
|
+
|
|
449
|
+
before do
|
|
450
|
+
stub_const("ENV", { 'KNAPSACK_PRO_USER_SEAT' => env_value })
|
|
451
|
+
expect(described_class).to receive(:ci_env_for).with(:user_seat).and_return(ci_value)
|
|
452
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
context 'when values are different' do
|
|
456
|
+
let(:env_value) { 'John Doe' }
|
|
457
|
+
let(:ci_value) { 'Jane Doe' }
|
|
458
|
+
|
|
459
|
+
it { should eq 'John Doe' }
|
|
460
|
+
|
|
461
|
+
it 'logs a warning' do
|
|
462
|
+
expect(logger).to receive(:info).with(
|
|
463
|
+
'You have set the environment variable KNAPSACK_PRO_USER_SEAT to John Doe which could be automatically determined from the CI environment as Jane Doe.'
|
|
464
|
+
)
|
|
465
|
+
subject
|
|
466
|
+
end
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
context 'when values are the same' do
|
|
470
|
+
let(:env_value) { 'John Doe' }
|
|
471
|
+
let(:ci_value) { 'John Doe' }
|
|
472
|
+
|
|
473
|
+
it 'does not log a warning' do
|
|
474
|
+
expect(logger).not_to receive(:info)
|
|
475
|
+
subject
|
|
476
|
+
end
|
|
477
|
+
end
|
|
478
|
+
end
|
|
203
479
|
end
|
|
204
480
|
|
|
205
481
|
context "when ENV doesn't exist" do
|
|
@@ -345,7 +621,6 @@ describe KnapsackPro::Config::Env do
|
|
|
345
621
|
end
|
|
346
622
|
end
|
|
347
623
|
|
|
348
|
-
|
|
349
624
|
describe '.regular_mode?' do
|
|
350
625
|
subject { described_class.regular_mode? }
|
|
351
626
|
|
|
@@ -645,11 +920,18 @@ describe KnapsackPro::Config::Env do
|
|
|
645
920
|
['Unsupported CI', {}],
|
|
646
921
|
].each do |ci, env|
|
|
647
922
|
it "on #{ci} it is false" do
|
|
923
|
+
stub_const("ENV", env.merge({ 'KNAPSACK_PRO_FIXED_QUEUE_SPLIT' => 'false' }))
|
|
924
|
+
|
|
648
925
|
logger = instance_double(Logger)
|
|
649
926
|
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
927
|
+
ci_env = described_class.detected_ci.new.fixed_queue_split
|
|
928
|
+
if ci_env == false
|
|
929
|
+
expect(logger).not_to receive(:info)
|
|
930
|
+
else
|
|
931
|
+
expect(logger).to receive(:info).with(
|
|
932
|
+
'You have set the environment variable KNAPSACK_PRO_FIXED_QUEUE_SPLIT to false which could be automatically determined from the CI environment as true.'
|
|
933
|
+
)
|
|
934
|
+
end
|
|
653
935
|
|
|
654
936
|
expect(subject).to eq(false)
|
|
655
937
|
end
|
|
@@ -673,11 +955,18 @@ describe KnapsackPro::Config::Env do
|
|
|
673
955
|
['Unsupported CI', {}],
|
|
674
956
|
].each do |ci, env|
|
|
675
957
|
it "on #{ci} it is true" do
|
|
958
|
+
stub_const("ENV", env.merge({ 'KNAPSACK_PRO_FIXED_QUEUE_SPLIT' => 'true' }))
|
|
959
|
+
|
|
676
960
|
logger = instance_double(Logger)
|
|
677
961
|
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
962
|
+
ci_env = described_class.detected_ci.new.fixed_queue_split
|
|
963
|
+
if ci_env == true
|
|
964
|
+
expect(logger).not_to receive(:info)
|
|
965
|
+
else
|
|
966
|
+
expect(logger).to receive(:info).with(
|
|
967
|
+
'You have set the environment variable KNAPSACK_PRO_FIXED_QUEUE_SPLIT to true which could be automatically determined from the CI environment as false.'
|
|
968
|
+
)
|
|
969
|
+
end
|
|
681
970
|
|
|
682
971
|
expect(subject).to eq(true)
|
|
683
972
|
end
|
|
@@ -702,12 +991,12 @@ describe KnapsackPro::Config::Env do
|
|
|
702
991
|
['Unsupported CI', {}, true],
|
|
703
992
|
].each do |ci, env, expected|
|
|
704
993
|
it "on #{ci} it is #{expected}" do
|
|
994
|
+
stub_const("ENV", env)
|
|
995
|
+
|
|
705
996
|
logger = instance_double(Logger)
|
|
706
997
|
expect(KnapsackPro).to receive(:logger).and_return(logger)
|
|
707
998
|
expect(logger).to receive(:info).with("KNAPSACK_PRO_FIXED_QUEUE_SPLIT is not set. Using default value: #{expected}. Learn more at #{KnapsackPro::Urls::FIXED_QUEUE_SPLIT}")
|
|
708
999
|
|
|
709
|
-
stub_const("ENV", env)
|
|
710
|
-
|
|
711
1000
|
expect(subject).to eq(expected)
|
|
712
1001
|
end
|
|
713
1002
|
end
|
data/spec/knapsack_pro_spec.rb
CHANGED
|
@@ -36,13 +36,11 @@ describe KnapsackPro do
|
|
|
36
36
|
stub_const('ENV', {
|
|
37
37
|
'KNAPSACK_PRO_LOG_DIR' => 'log',
|
|
38
38
|
})
|
|
39
|
-
|
|
40
|
-
expect(Logger).to receive(:new).with('log/knapsack_pro_node_0.log').and_return(logger)
|
|
41
|
-
expect(logger).to receive(:level=).with(Logger::INFO)
|
|
42
|
-
expect(KnapsackPro::LoggerWrapper).to receive(:new).with(logger).and_return(logger_wrapper)
|
|
43
39
|
end
|
|
44
40
|
|
|
45
|
-
it
|
|
41
|
+
it 'raises' do
|
|
42
|
+
expect { subject }.to raise_error(/Missing environment variable KNAPSACK_PRO_CI_NODE_INDEX/)
|
|
43
|
+
end
|
|
46
44
|
end
|
|
47
45
|
end
|
|
48
46
|
|
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: 7.
|
|
4
|
+
version: 7.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- ArturT
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-05-
|
|
11
|
+
date: 2024-05-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -415,7 +415,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
415
415
|
- !ruby/object:Gem::Version
|
|
416
416
|
version: '0'
|
|
417
417
|
requirements: []
|
|
418
|
-
rubygems_version: 3.4.
|
|
418
|
+
rubygems_version: 3.4.10
|
|
419
419
|
signing_key:
|
|
420
420
|
specification_version: 4
|
|
421
421
|
summary: Knapsack Pro splits tests across parallel CI nodes and ensures each parallel
|