knapsack_pro 4.1.0 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +29 -2
- data/lib/knapsack_pro/client/api/v1/build_distributions.rb +1 -1
- data/lib/knapsack_pro/client/api/v1/queues.rb +1 -1
- data/lib/knapsack_pro/config/ci/app_veyor.rb +8 -0
- data/lib/knapsack_pro/config/ci/base.rb +7 -0
- data/lib/knapsack_pro/config/ci/buildkite.rb +8 -0
- data/lib/knapsack_pro/config/ci/circle.rb +8 -0
- data/lib/knapsack_pro/config/ci/cirrus_ci.rb +8 -0
- data/lib/knapsack_pro/config/ci/codefresh.rb +8 -0
- data/lib/knapsack_pro/config/ci/codeship.rb +8 -0
- data/lib/knapsack_pro/config/ci/github_actions.rb +8 -0
- data/lib/knapsack_pro/config/ci/gitlab_ci.rb +8 -0
- data/lib/knapsack_pro/config/ci/heroku.rb +8 -0
- data/lib/knapsack_pro/config/ci/semaphore.rb +8 -0
- data/lib/knapsack_pro/config/ci/semaphore2.rb +9 -0
- data/lib/knapsack_pro/config/ci/travis.rb +8 -0
- data/lib/knapsack_pro/config/env.rb +23 -13
- data/lib/knapsack_pro/version.rb +1 -1
- data/lib/tasks/queue/cucumber.rake +5 -0
- data/lib/tasks/queue/minitest.rake +5 -0
- data/lib/tasks/queue/rspec.rake +5 -0
- data/spec/knapsack_pro/client/api/v1/build_distributions_spec.rb +4 -4
- data/spec/knapsack_pro/client/api/v1/queues_spec.rb +5 -5
- data/spec/knapsack_pro/config/env_spec.rb +113 -94
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4e0c8f7bd4c8bf4c50885cdbcbecf34222a3d1ab46d3be52d937d940a0ba5c0
|
4
|
+
data.tar.gz: b8a68e22c872686d20fc6fac50ec3d02bad449768da522eb36ed86db5d331dfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34d669379edb42f5a3e3eaf9075320bd1e2457ec48dfae86d94e2fa21eb4562d1fcc2db66ed49749ef78a641741d934e6d978bc9cc557d5985e49eb9bbed133d
|
7
|
+
data.tar.gz: bde90595bb3123c0c10b53d58de5b78637a2c30679f3ab5e37283735ce3a4f6bcbc19a39be7fcf691f6878f5be0018d16e3eb0bc8adc9f2d6f23827de72f0bb2
|
data/CHANGELOG.md
CHANGED
@@ -1,16 +1,43 @@
|
|
1
|
-
#
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
### 5.1.0
|
4
|
+
|
5
|
+
* Mask user seats data instead of hashing it
|
6
|
+
|
7
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/202
|
8
|
+
|
9
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v5.0.0...v5.1.0
|
10
|
+
|
11
|
+
|
12
|
+
### 5.0.0
|
13
|
+
|
14
|
+
* __(breaking change)__ Use `KNAPSACK_PRO_FIXED_QUEUE_SPLIT=true` as default value in Queue Mode and use `false` for proper CI providers
|
15
|
+
|
16
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/198
|
17
|
+
|
18
|
+
* Detect CI from environment and get the correct ENVs instead of trying all of them and risk conflicts
|
19
|
+
|
20
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/201
|
21
|
+
|
22
|
+
* Set `RAILS_ENV=test` / `RACK_ENV=test` in Queue Mode
|
23
|
+
|
24
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/199
|
25
|
+
|
26
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v4.1.0...v5.0.0
|
2
27
|
|
3
28
|
### 4.1.0
|
4
29
|
|
5
30
|
* Add support for CI node retry count on GitHub Actions
|
6
31
|
|
32
|
+
__(breaking change)__ for open-source forked repositories using GitHub Actions. See a fix in PR description:
|
33
|
+
|
7
34
|
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/197
|
8
35
|
|
9
36
|
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v4.0.0...v4.1.0
|
10
37
|
|
11
38
|
### 4.0.0
|
12
39
|
|
13
|
-
* Raise when `KNAPSACK_PRO_CI_NODE_BUILD_ID` is missing
|
40
|
+
* __(breaking change)__ Raise when `KNAPSACK_PRO_CI_NODE_BUILD_ID` is missing
|
14
41
|
|
15
42
|
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/195
|
16
43
|
|
@@ -15,7 +15,7 @@ module KnapsackPro
|
|
15
15
|
:node_total => args.fetch(:node_total),
|
16
16
|
:node_index => args.fetch(:node_index),
|
17
17
|
:ci_build_id => KnapsackPro::Config::Env.ci_node_build_id,
|
18
|
-
:user_seat => KnapsackPro::Config::Env.
|
18
|
+
:user_seat => KnapsackPro::Config::Env.masked_user_seat,
|
19
19
|
}
|
20
20
|
|
21
21
|
unless request_hash[:cache_read_attempt]
|
@@ -16,7 +16,7 @@ module KnapsackPro
|
|
16
16
|
:node_total => args.fetch(:node_total),
|
17
17
|
:node_index => args.fetch(:node_index),
|
18
18
|
:node_build_id => KnapsackPro::Config::Env.ci_node_build_id,
|
19
|
-
:user_seat => KnapsackPro::Config::Env.
|
19
|
+
:user_seat => KnapsackPro::Config::Env.masked_user_seat,
|
20
20
|
}
|
21
21
|
|
22
22
|
if request_hash[:can_initialize_queue] && !request_hash[:attempt_connect_to_queue]
|
@@ -37,6 +37,14 @@ module KnapsackPro
|
|
37
37
|
ENV['GITLAB_USER_NAME'] || # Gitlab Release 10.0
|
38
38
|
ENV['GITLAB_USER_EMAIL'] # Gitlab Release 8.12
|
39
39
|
end
|
40
|
+
|
41
|
+
def detected
|
42
|
+
ENV.key?('GITLAB_CI') ? self.class : nil
|
43
|
+
end
|
44
|
+
|
45
|
+
def fixed_queue_split
|
46
|
+
false
|
47
|
+
end
|
40
48
|
end
|
41
49
|
end
|
42
50
|
end
|
@@ -29,6 +29,15 @@ module KnapsackPro
|
|
29
29
|
"#{ENV['HOME']}/#{ENV['SEMAPHORE_GIT_DIR']}"
|
30
30
|
end
|
31
31
|
end
|
32
|
+
|
33
|
+
def detected
|
34
|
+
# check 2 keys to be sure we are using Semaphore 2.0
|
35
|
+
ENV.key?('SEMAPHORE') && ENV.key?('SEMAPHORE_WORKFLOW_ID') ? self.class : nil
|
36
|
+
end
|
37
|
+
|
38
|
+
def fixed_queue_split
|
39
|
+
false
|
40
|
+
end
|
32
41
|
end
|
33
42
|
end
|
34
43
|
end
|
@@ -64,9 +64,10 @@ module KnapsackPro
|
|
64
64
|
ci_env_for(:user_seat)
|
65
65
|
end
|
66
66
|
|
67
|
-
def
|
67
|
+
def masked_user_seat
|
68
68
|
return unless user_seat
|
69
|
-
|
69
|
+
|
70
|
+
user_seat.gsub(/(?<=\w{2})[a-zA-Z]/, "*")
|
70
71
|
end
|
71
72
|
|
72
73
|
def test_file_pattern
|
@@ -186,7 +187,16 @@ module KnapsackPro
|
|
186
187
|
end
|
187
188
|
|
188
189
|
def fixed_queue_split
|
189
|
-
|
190
|
+
@fixed_queue_split ||= begin
|
191
|
+
env_name = 'KNAPSACK_PRO_FIXED_QUEUE_SPLIT'
|
192
|
+
computed = ENV.fetch(env_name, ci_env_for(:fixed_queue_split)).to_s
|
193
|
+
|
194
|
+
if !ENV.key?(env_name)
|
195
|
+
KnapsackPro.logger.info("#{env_name} is not set. Using default value: #{computed}. Learn more at #{KnapsackPro::Urls::FIXED_QUEUE_SPLIT}")
|
196
|
+
end
|
197
|
+
|
198
|
+
computed
|
199
|
+
end
|
190
200
|
end
|
191
201
|
|
192
202
|
def fixed_queue_split?
|
@@ -246,17 +256,17 @@ module KnapsackPro
|
|
246
256
|
end
|
247
257
|
|
248
258
|
def ci_env_for(env_name)
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
ci = ci_class.new
|
256
|
-
value = ci.send(env_name)
|
257
|
-
break unless value.nil?
|
259
|
+
detected_ci.new.send(env_name)
|
260
|
+
end
|
261
|
+
|
262
|
+
def detected_ci
|
263
|
+
detected = KnapsackPro::Config::CI.constants.map do |constant|
|
264
|
+
Object.const_get("KnapsackPro::Config::CI::#{constant}").new.detected
|
258
265
|
end
|
259
|
-
|
266
|
+
.compact
|
267
|
+
.first
|
268
|
+
|
269
|
+
detected || KnapsackPro::Config::CI::Base
|
260
270
|
end
|
261
271
|
|
262
272
|
def log_level
|
data/lib/knapsack_pro/version.rb
CHANGED
@@ -3,6 +3,11 @@ require 'knapsack_pro'
|
|
3
3
|
namespace :knapsack_pro do
|
4
4
|
namespace :queue do
|
5
5
|
task :cucumber, [:cucumber_args] do |_, args|
|
6
|
+
Kernel.system("RAILS_ENV=test RACK_ENV=test #{$PROGRAM_NAME} 'knapsack_pro:queue:cucumber_go[#{args[:cucumber_args]}]'")
|
7
|
+
Kernel.exit($?.exitstatus)
|
8
|
+
end
|
9
|
+
|
10
|
+
task :cucumber_go, [:cucumber_args] do |_, args|
|
6
11
|
KnapsackPro::Runners::Queue::CucumberRunner.run(args[:cucumber_args])
|
7
12
|
end
|
8
13
|
end
|
@@ -3,6 +3,11 @@ require 'knapsack_pro'
|
|
3
3
|
namespace :knapsack_pro do
|
4
4
|
namespace :queue do
|
5
5
|
task :minitest, [:minitest_args] do |_, args|
|
6
|
+
Kernel.system("RAILS_ENV=test RACK_ENV=test #{$PROGRAM_NAME} 'knapsack_pro:queue:minitest_go[#{args[:minitest_args]}]'")
|
7
|
+
Kernel.exit($?.exitstatus)
|
8
|
+
end
|
9
|
+
|
10
|
+
task :minitest_go, [:minitest_args] do |_, args|
|
6
11
|
KnapsackPro::Runners::Queue::MinitestRunner.run(args[:minitest_args])
|
7
12
|
end
|
8
13
|
end
|
data/lib/tasks/queue/rspec.rake
CHANGED
@@ -3,6 +3,11 @@ require 'knapsack_pro'
|
|
3
3
|
namespace :knapsack_pro do
|
4
4
|
namespace :queue do
|
5
5
|
task :rspec, [:rspec_args] do |_, args|
|
6
|
+
Kernel.system("RAILS_ENV=test RACK_ENV=test #{$PROGRAM_NAME} 'knapsack_pro:queue:rspec_go[#{args[:rspec_args]}]'")
|
7
|
+
Kernel.exit($?.exitstatus)
|
8
|
+
end
|
9
|
+
|
10
|
+
task :rspec_go, [:rspec_args] do |_, args|
|
6
11
|
KnapsackPro::Runners::Queue::RSpecRunner.run(args[:rspec_args])
|
7
12
|
end
|
8
13
|
end
|
@@ -6,7 +6,7 @@ describe KnapsackPro::Client::API::V1::BuildDistributions do
|
|
6
6
|
let(:node_total) { double }
|
7
7
|
let(:node_index) { double }
|
8
8
|
let(:ci_build_id) { double }
|
9
|
-
let(:
|
9
|
+
let(:masked_user_seat) { double }
|
10
10
|
let(:test_files) { double }
|
11
11
|
|
12
12
|
subject do
|
@@ -23,7 +23,7 @@ describe KnapsackPro::Client::API::V1::BuildDistributions do
|
|
23
23
|
before do
|
24
24
|
expect(KnapsackPro::Config::Env).to receive(:fixed_test_suite_split).and_return(fixed_test_suite_split)
|
25
25
|
expect(KnapsackPro::Config::Env).to receive(:ci_node_build_id).and_return(ci_build_id)
|
26
|
-
expect(KnapsackPro::Config::Env).to receive(:
|
26
|
+
expect(KnapsackPro::Config::Env).to receive(:masked_user_seat).and_return(masked_user_seat)
|
27
27
|
end
|
28
28
|
|
29
29
|
context 'when cache_read_attempt=true' do
|
@@ -42,7 +42,7 @@ describe KnapsackPro::Client::API::V1::BuildDistributions do
|
|
42
42
|
node_total: node_total,
|
43
43
|
node_index: node_index,
|
44
44
|
ci_build_id: ci_build_id,
|
45
|
-
user_seat:
|
45
|
+
user_seat: masked_user_seat,
|
46
46
|
}
|
47
47
|
}).and_return(action)
|
48
48
|
expect(subject).to eq action
|
@@ -65,7 +65,7 @@ describe KnapsackPro::Client::API::V1::BuildDistributions do
|
|
65
65
|
node_total: node_total,
|
66
66
|
node_index: node_index,
|
67
67
|
ci_build_id: ci_build_id,
|
68
|
-
user_seat:
|
68
|
+
user_seat: masked_user_seat,
|
69
69
|
test_files: test_files
|
70
70
|
}
|
71
71
|
}).and_return(action)
|
@@ -7,7 +7,7 @@ describe KnapsackPro::Client::API::V1::Queues do
|
|
7
7
|
let(:node_index) { double }
|
8
8
|
let(:test_files) { double }
|
9
9
|
let(:node_build_id) { double }
|
10
|
-
let(:
|
10
|
+
let(:masked_user_seat) { double }
|
11
11
|
|
12
12
|
subject do
|
13
13
|
described_class.queue(
|
@@ -24,7 +24,7 @@ describe KnapsackPro::Client::API::V1::Queues do
|
|
24
24
|
before do
|
25
25
|
expect(KnapsackPro::Config::Env).to receive(:fixed_queue_split).and_return(fixed_queue_split)
|
26
26
|
expect(KnapsackPro::Config::Env).to receive(:ci_node_build_id).and_return(node_build_id)
|
27
|
-
expect(KnapsackPro::Config::Env).to receive(:
|
27
|
+
expect(KnapsackPro::Config::Env).to receive(:masked_user_seat).and_return(masked_user_seat)
|
28
28
|
end
|
29
29
|
|
30
30
|
context 'when can_initialize_queue=true and attempt_connect_to_queue=true' do
|
@@ -45,7 +45,7 @@ describe KnapsackPro::Client::API::V1::Queues do
|
|
45
45
|
node_total: node_total,
|
46
46
|
node_index: node_index,
|
47
47
|
node_build_id: node_build_id,
|
48
|
-
user_seat:
|
48
|
+
user_seat: masked_user_seat,
|
49
49
|
}
|
50
50
|
}).and_return(action)
|
51
51
|
expect(subject).to eq action
|
@@ -70,7 +70,7 @@ describe KnapsackPro::Client::API::V1::Queues do
|
|
70
70
|
node_total: node_total,
|
71
71
|
node_index: node_index,
|
72
72
|
node_build_id: node_build_id,
|
73
|
-
user_seat:
|
73
|
+
user_seat: masked_user_seat,
|
74
74
|
test_files: test_files
|
75
75
|
}
|
76
76
|
}).and_return(action)
|
@@ -96,7 +96,7 @@ describe KnapsackPro::Client::API::V1::Queues do
|
|
96
96
|
node_total: node_total,
|
97
97
|
node_index: node_index,
|
98
98
|
node_build_id: node_build_id,
|
99
|
-
user_seat:
|
99
|
+
user_seat: masked_user_seat,
|
100
100
|
}
|
101
101
|
}).and_return(action)
|
102
102
|
expect(subject).to eq action
|
@@ -207,22 +207,26 @@ describe KnapsackPro::Config::Env do
|
|
207
207
|
end
|
208
208
|
end
|
209
209
|
|
210
|
-
describe '.
|
211
|
-
subject { described_class.
|
210
|
+
describe '.masked_seat_hash' do
|
211
|
+
subject { described_class.masked_user_seat }
|
212
212
|
|
213
213
|
before do
|
214
214
|
expect(described_class).to receive(:user_seat).at_least(1).and_return(user_seat)
|
215
215
|
end
|
216
216
|
|
217
|
-
context 'when the user seat
|
217
|
+
context 'when the user seat is a name' do
|
218
218
|
let(:user_seat) { 'John Doe' }
|
219
219
|
|
220
|
-
it
|
221
|
-
|
222
|
-
|
220
|
+
it { expect(subject).to eq 'Jo** Do*' }
|
221
|
+
end
|
222
|
+
|
223
|
+
context 'when the user seat is an e-mail' do
|
224
|
+
let(:user_seat) { 'john.doe@example.com' }
|
225
|
+
|
226
|
+
it { expect(subject).to eq 'jo**.do*@ex*****.co*' }
|
223
227
|
end
|
224
228
|
|
225
|
-
context 'when the user seat
|
229
|
+
context 'when the user seat is nil' do
|
226
230
|
let(:user_seat) { nil }
|
227
231
|
|
228
232
|
it { expect(subject).to be_nil }
|
@@ -632,20 +636,6 @@ describe KnapsackPro::Config::Env do
|
|
632
636
|
end
|
633
637
|
end
|
634
638
|
|
635
|
-
describe '.fixed_test_suite_split' do
|
636
|
-
subject { described_class.fixed_test_suite_split }
|
637
|
-
|
638
|
-
context 'when ENV exists' do
|
639
|
-
before { stub_const("ENV", { 'KNAPSACK_PRO_FIXED_TEST_SUITE_SPLIT' => false }) }
|
640
|
-
it { should eq false }
|
641
|
-
end
|
642
|
-
|
643
|
-
context "when ENV doesn't exist" do
|
644
|
-
before { stub_const("ENV", {}) }
|
645
|
-
it { should be true }
|
646
|
-
end
|
647
|
-
end
|
648
|
-
|
649
639
|
describe '.fixed_test_suite_split?' do
|
650
640
|
subject { described_class.fixed_test_suite_split? }
|
651
641
|
|
@@ -667,38 +657,94 @@ describe KnapsackPro::Config::Env do
|
|
667
657
|
end
|
668
658
|
end
|
669
659
|
|
670
|
-
describe '.fixed_queue_split' do
|
671
|
-
subject { described_class.fixed_queue_split }
|
672
|
-
|
673
|
-
context 'when ENV exists' do
|
674
|
-
before { stub_const("ENV", { 'KNAPSACK_PRO_FIXED_QUEUE_SPLIT' => true }) }
|
675
|
-
it { should eq true }
|
676
|
-
end
|
677
|
-
|
678
|
-
context "when ENV doesn't exist" do
|
679
|
-
before { stub_const("ENV", {}) }
|
680
|
-
it { should be false }
|
681
|
-
end
|
682
|
-
end
|
683
|
-
|
684
660
|
describe '.fixed_queue_split?' do
|
685
661
|
subject { described_class.fixed_queue_split? }
|
662
|
+
after(:each) { described_class.remove_instance_variable(:@fixed_queue_split) }
|
686
663
|
|
687
664
|
context 'when ENV exists' do
|
688
|
-
context 'when KNAPSACK_PRO_FIXED_QUEUE_SPLIT=
|
689
|
-
|
690
|
-
|
665
|
+
context 'when KNAPSACK_PRO_FIXED_QUEUE_SPLIT=false' do
|
666
|
+
[
|
667
|
+
['AppVeyor', { 'APPVEYOR' => '123' }],
|
668
|
+
['Buildkite', { 'BUILDKITE' => 'true' }],
|
669
|
+
['CircleCI', { 'CIRCLECI' => 'true' }],
|
670
|
+
['Cirrus CI', { 'CIRRUS_CI' => 'true' }],
|
671
|
+
['Codefresh', { 'CF_BUILD_ID' => '123' }],
|
672
|
+
['Codeship', { 'CI_NAME' => 'codeship' }],
|
673
|
+
['GitHub Actions', { 'GITHUB_ACTIONS' => 'true' }],
|
674
|
+
['GitLab CI', { 'GITLAB_CI' => 'true' }],
|
675
|
+
['Heroku CI', { 'HEROKU_TEST_RUN_ID' => '123' }],
|
676
|
+
['Semaphore CI 1.0', { 'SEMAPHORE_BUILD_NUMBER' => '123' }],
|
677
|
+
['Semaphore CI 2.0', { 'SEMAPHORE' => 'true', 'SEMAPHORE_WORKFLOW_ID' => '123' }],
|
678
|
+
['Travis CI', { 'TRAVIS' => 'true' }],
|
679
|
+
['Unsupported', {}],
|
680
|
+
].each do |ci, env|
|
681
|
+
it "on #{ci} it is false" do
|
682
|
+
logger = instance_double(Logger)
|
683
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
684
|
+
expect(logger).not_to receive(:info)
|
685
|
+
|
686
|
+
stub_const("ENV", env.merge({ 'KNAPSACK_PRO_FIXED_QUEUE_SPLIT' => 'false' }))
|
687
|
+
|
688
|
+
expect(subject).to eq(false)
|
689
|
+
end
|
690
|
+
end
|
691
691
|
end
|
692
692
|
|
693
|
-
context 'when KNAPSACK_PRO_FIXED_QUEUE_SPLIT=
|
694
|
-
|
695
|
-
|
693
|
+
context 'when KNAPSACK_PRO_FIXED_QUEUE_SPLIT=true' do
|
694
|
+
[
|
695
|
+
['AppVeyor', { 'APPVEYOR' => '123' }],
|
696
|
+
['Buildkite', { 'BUILDKITE' => 'true' }],
|
697
|
+
['CircleCI', { 'CIRCLECI' => 'true' }],
|
698
|
+
['Cirrus CI', { 'CIRRUS_CI' => 'true' }],
|
699
|
+
['Codefresh', { 'CF_BUILD_ID' => '123' }],
|
700
|
+
['Codeship', { 'CI_NAME' => 'codeship' }],
|
701
|
+
['GitHub Actions', { 'GITHUB_ACTIONS' => 'true' }],
|
702
|
+
['GitLab CI', { 'GITLAB_CI' => 'true' }],
|
703
|
+
['Heroku CI', { 'HEROKU_TEST_RUN_ID' => '123' }],
|
704
|
+
['Semaphore CI 1.0', { 'SEMAPHORE_BUILD_NUMBER' => '123' }],
|
705
|
+
['Semaphore CI 2.0', { 'SEMAPHORE' => 'true', 'SEMAPHORE_WORKFLOW_ID' => '123' }],
|
706
|
+
['Travis CI', { 'TRAVIS' => 'true' }],
|
707
|
+
['Unsupported', {}],
|
708
|
+
].each do |ci, env|
|
709
|
+
it "on #{ci} it is true" do
|
710
|
+
logger = instance_double(Logger)
|
711
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
712
|
+
expect(logger).not_to receive(:info)
|
713
|
+
|
714
|
+
stub_const("ENV", env.merge({ 'KNAPSACK_PRO_FIXED_QUEUE_SPLIT' => 'true' }))
|
715
|
+
|
716
|
+
expect(subject).to eq(true)
|
717
|
+
end
|
718
|
+
end
|
696
719
|
end
|
697
720
|
end
|
698
721
|
|
699
722
|
context "when ENV doesn't exist" do
|
700
|
-
|
701
|
-
|
723
|
+
[
|
724
|
+
['AppVeyor', { 'APPVEYOR' => '123' }, false],
|
725
|
+
['Buildkite', { 'BUILDKITE' => 'true' }, true],
|
726
|
+
['CircleCI', { 'CIRCLECI' => 'true' }, false],
|
727
|
+
['Cirrus CI', { 'CIRRUS_CI' => 'true' }, false],
|
728
|
+
['Codefresh', { 'CF_BUILD_ID' => '123' }, false],
|
729
|
+
['Codeship', { 'CI_NAME' => 'codeship' }, true],
|
730
|
+
['GitHub Actions', { 'GITHUB_ACTIONS' => 'true' }, true],
|
731
|
+
['GitLab CI', { 'GITLAB_CI' => 'true' }, false],
|
732
|
+
['Heroku CI', { 'HEROKU_TEST_RUN_ID' => '123' }, false],
|
733
|
+
['Semaphore CI 1.0', { 'SEMAPHORE_BUILD_NUMBER' => '123' }, false],
|
734
|
+
['Semaphore CI 2.0', { 'SEMAPHORE' => 'true', 'SEMAPHORE_WORKFLOW_ID' => '123' }, false],
|
735
|
+
['Travis CI', { 'TRAVIS' => 'true' }, true],
|
736
|
+
['Unsupported', {}, true],
|
737
|
+
].each do |ci, env, expected|
|
738
|
+
it "on #{ci} it is #{expected}" do
|
739
|
+
logger = instance_double(Logger)
|
740
|
+
expect(KnapsackPro).to receive(:logger).and_return(logger)
|
741
|
+
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}")
|
742
|
+
|
743
|
+
stub_const("ENV", env)
|
744
|
+
|
745
|
+
expect(subject).to eq(expected)
|
746
|
+
end
|
747
|
+
end
|
702
748
|
end
|
703
749
|
end
|
704
750
|
|
@@ -895,57 +941,6 @@ describe KnapsackPro::Config::Env do
|
|
895
941
|
end
|
896
942
|
end
|
897
943
|
|
898
|
-
describe '.ci_env_for' do
|
899
|
-
let(:env_name) { :node_total }
|
900
|
-
|
901
|
-
subject { described_class.ci_env_for(env_name) }
|
902
|
-
|
903
|
-
context 'when CI has no value for env_name method' do
|
904
|
-
before do
|
905
|
-
expect(KnapsackPro::Config::CI::Circle).to receive_message_chain(:new, env_name).and_return(nil)
|
906
|
-
expect(KnapsackPro::Config::CI::Semaphore).to receive_message_chain(:new, env_name).and_return(nil)
|
907
|
-
expect(KnapsackPro::Config::CI::Buildkite).to receive_message_chain(:new, env_name).and_return(nil)
|
908
|
-
end
|
909
|
-
|
910
|
-
it do
|
911
|
-
expect(subject).to be_nil
|
912
|
-
end
|
913
|
-
end
|
914
|
-
|
915
|
-
context 'when CI has value for env_name method' do
|
916
|
-
let(:circle_env) { double(:circle) }
|
917
|
-
let(:semaphore_env) { double(:semaphore) }
|
918
|
-
let(:buildkite_env) { double(:buildkite) }
|
919
|
-
|
920
|
-
before do
|
921
|
-
allow(KnapsackPro::Config::CI::Circle).to receive_message_chain(:new, env_name).and_return(circle_env)
|
922
|
-
allow(KnapsackPro::Config::CI::Semaphore).to receive_message_chain(:new, env_name).and_return(semaphore_env)
|
923
|
-
allow(KnapsackPro::Config::CI::Buildkite).to receive_message_chain(:new, env_name).and_return(buildkite_env)
|
924
|
-
end
|
925
|
-
|
926
|
-
context do
|
927
|
-
let(:buildkite_env) { nil }
|
928
|
-
let(:semaphore_env) { nil }
|
929
|
-
|
930
|
-
it { should eq circle_env }
|
931
|
-
end
|
932
|
-
|
933
|
-
context do
|
934
|
-
let(:circle_env) { nil }
|
935
|
-
let(:buildkite_env) { nil }
|
936
|
-
|
937
|
-
it { should eq semaphore_env }
|
938
|
-
end
|
939
|
-
|
940
|
-
context do
|
941
|
-
let(:circle_env) { nil }
|
942
|
-
let(:semaphore_env) { nil }
|
943
|
-
|
944
|
-
it { should eq buildkite_env }
|
945
|
-
end
|
946
|
-
end
|
947
|
-
end
|
948
|
-
|
949
944
|
describe '.log_level' do
|
950
945
|
subject { described_class.log_level }
|
951
946
|
|
@@ -1022,4 +1017,28 @@ describe KnapsackPro::Config::Env do
|
|
1022
1017
|
expect(described_class.test_runner_adapter).to eql 'RSpecAdapter'
|
1023
1018
|
end
|
1024
1019
|
end
|
1020
|
+
|
1021
|
+
describe '.detected_ci' do
|
1022
|
+
[
|
1023
|
+
['AppVeyor', { 'APPVEYOR' => '123' }, KnapsackPro::Config::CI::AppVeyor],
|
1024
|
+
['Buildkite', { 'BUILDKITE' => 'true' }, KnapsackPro::Config::CI::Buildkite],
|
1025
|
+
['CircleCI', { 'CIRCLECI' => 'true' }, KnapsackPro::Config::CI::Circle],
|
1026
|
+
['Cirrus CI', { 'CIRRUS_CI' => 'true' }, KnapsackPro::Config::CI::CirrusCI],
|
1027
|
+
['Codefresh', { 'CF_BUILD_ID' => '123' }, KnapsackPro::Config::CI::Codefresh],
|
1028
|
+
['Codeship', { 'CI_NAME' => 'codeship' }, KnapsackPro::Config::CI::Codeship],
|
1029
|
+
['GitHub Actions', { 'GITHUB_ACTIONS' => 'true' }, KnapsackPro::Config::CI::GithubActions],
|
1030
|
+
['GitLab CI', { 'GITLAB_CI' => 'true' }, KnapsackPro::Config::CI::GitlabCI],
|
1031
|
+
['Heroku CI', { 'HEROKU_TEST_RUN_ID' => '123' }, KnapsackPro::Config::CI::Heroku],
|
1032
|
+
['Semaphore CI 1.0', { 'SEMAPHORE_BUILD_NUMBER' => '123' }, KnapsackPro::Config::CI::Semaphore],
|
1033
|
+
['Semaphore CI 2.0', { 'SEMAPHORE' => 'true', 'SEMAPHORE_WORKFLOW_ID' => '123' }, KnapsackPro::Config::CI::Semaphore2],
|
1034
|
+
['Travis CI', { 'TRAVIS' => 'true' }, KnapsackPro::Config::CI::Travis],
|
1035
|
+
['Unsupported', {}, KnapsackPro::Config::CI::Base],
|
1036
|
+
].each do |ci, env, expected|
|
1037
|
+
it "detects #{ci}" do
|
1038
|
+
stub_const("ENV", env)
|
1039
|
+
|
1040
|
+
expect(described_class.detected_ci).to eq(expected)
|
1041
|
+
end
|
1042
|
+
end
|
1043
|
+
end
|
1025
1044
|
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:
|
4
|
+
version: 5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ArturT
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -389,7 +389,7 @@ metadata:
|
|
389
389
|
documentation_uri: https://docs.knapsackpro.com/integration/
|
390
390
|
homepage_uri: https://knapsackpro.com
|
391
391
|
source_code_uri: https://github.com/KnapsackPro/knapsack_pro-ruby
|
392
|
-
post_install_message:
|
392
|
+
post_install_message:
|
393
393
|
rdoc_options: []
|
394
394
|
require_paths:
|
395
395
|
- lib
|
@@ -404,8 +404,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
404
404
|
- !ruby/object:Gem::Version
|
405
405
|
version: '0'
|
406
406
|
requirements: []
|
407
|
-
rubygems_version: 3.
|
408
|
-
signing_key:
|
407
|
+
rubygems_version: 3.3.7
|
408
|
+
signing_key:
|
409
409
|
specification_version: 4
|
410
410
|
summary: Knapsack Pro splits tests across parallel CI nodes and ensures each parallel
|
411
411
|
job finish work at a similar time.
|