knapsack_pro 4.1.0 → 5.1.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 +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.
|