knapsack_pro 4.1.0 → 5.0.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 +20 -2
- 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 +20 -11
- 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/config/env_spec.rb +102 -87
- 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: ee1c87eca84a9ac30345268d7d2e9ac71d09003098e5173f73c0a3afccfea7bf
|
4
|
+
data.tar.gz: 52d53bd9c42699151ec2ac5ed6d340cbcdd0b632b88f2da60fcae54db3984090
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8afa9cc8410a16af780fcc854ebed0f50959eaa8c5cbdbe8fadb67e3822494ef2f18d56ee6158b1503d4db5be129a308e1e7794aab853685163b9888d70f18be
|
7
|
+
data.tar.gz: 4304ce7d54d20e43ed4576989f9700ef68f25a099671cb42a578f27ccb6fcc67dd1d2c7c0c546a96a0af9a570bc5b6c8c6c2d0742c6f1868f7a77557cd50d45f
|
data/CHANGELOG.md
CHANGED
@@ -1,16 +1,34 @@
|
|
1
|
-
#
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
### 5.0.0
|
4
|
+
|
5
|
+
* __(breaking change)__ Use `KNAPSACK_PRO_FIXED_QUEUE_SPLIT=true` as default value in Queue Mode and use `false` for proper CI providers
|
6
|
+
|
7
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/198
|
8
|
+
|
9
|
+
* Detect CI from environment and get the correct ENVs instead of trying all of them and risk conflicts
|
10
|
+
|
11
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/201
|
12
|
+
|
13
|
+
* Set `RAILS_ENV=test` / `RACK_ENV=test` in Queue Mode
|
14
|
+
|
15
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/199
|
16
|
+
|
17
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v4.1.0...v5.0.0
|
2
18
|
|
3
19
|
### 4.1.0
|
4
20
|
|
5
21
|
* Add support for CI node retry count on GitHub Actions
|
6
22
|
|
23
|
+
__(breaking change)__ for open-source forked repositories using GitHub Actions. See a fix in PR description:
|
24
|
+
|
7
25
|
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/197
|
8
26
|
|
9
27
|
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v4.0.0...v4.1.0
|
10
28
|
|
11
29
|
### 4.0.0
|
12
30
|
|
13
|
-
* Raise when `KNAPSACK_PRO_CI_NODE_BUILD_ID` is missing
|
31
|
+
* __(breaking change)__ Raise when `KNAPSACK_PRO_CI_NODE_BUILD_ID` is missing
|
14
32
|
|
15
33
|
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/195
|
16
34
|
|
@@ -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
|
@@ -186,7 +186,16 @@ module KnapsackPro
|
|
186
186
|
end
|
187
187
|
|
188
188
|
def fixed_queue_split
|
189
|
-
|
189
|
+
@fixed_queue_split ||= begin
|
190
|
+
env_name = 'KNAPSACK_PRO_FIXED_QUEUE_SPLIT'
|
191
|
+
computed = ENV.fetch(env_name, ci_env_for(:fixed_queue_split)).to_s
|
192
|
+
|
193
|
+
if !ENV.key?(env_name)
|
194
|
+
KnapsackPro.logger.info("#{env_name} is not set. Using default value: #{computed}. Learn more at #{KnapsackPro::Urls::FIXED_QUEUE_SPLIT}")
|
195
|
+
end
|
196
|
+
|
197
|
+
computed
|
198
|
+
end
|
190
199
|
end
|
191
200
|
|
192
201
|
def fixed_queue_split?
|
@@ -246,17 +255,17 @@ module KnapsackPro
|
|
246
255
|
end
|
247
256
|
|
248
257
|
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?
|
258
|
+
detected_ci.new.send(env_name)
|
259
|
+
end
|
260
|
+
|
261
|
+
def detected_ci
|
262
|
+
detected = KnapsackPro::Config::CI.constants.map do |constant|
|
263
|
+
Object.const_get("KnapsackPro::Config::CI::#{constant}").new.detected
|
258
264
|
end
|
259
|
-
|
265
|
+
.compact
|
266
|
+
.first
|
267
|
+
|
268
|
+
detected || KnapsackPro::Config::CI::Base
|
260
269
|
end
|
261
270
|
|
262
271
|
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
|
@@ -632,20 +632,6 @@ describe KnapsackPro::Config::Env do
|
|
632
632
|
end
|
633
633
|
end
|
634
634
|
|
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
635
|
describe '.fixed_test_suite_split?' do
|
650
636
|
subject { described_class.fixed_test_suite_split? }
|
651
637
|
|
@@ -667,38 +653,94 @@ describe KnapsackPro::Config::Env do
|
|
667
653
|
end
|
668
654
|
end
|
669
655
|
|
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
656
|
describe '.fixed_queue_split?' do
|
685
657
|
subject { described_class.fixed_queue_split? }
|
658
|
+
after(:each) { described_class.remove_instance_variable(:@fixed_queue_split) }
|
686
659
|
|
687
660
|
context 'when ENV exists' do
|
688
|
-
context 'when KNAPSACK_PRO_FIXED_QUEUE_SPLIT=
|
689
|
-
|
690
|
-
|
661
|
+
context 'when KNAPSACK_PRO_FIXED_QUEUE_SPLIT=false' do
|
662
|
+
[
|
663
|
+
['AppVeyor', { 'APPVEYOR' => '123' }],
|
664
|
+
['Buildkite', { 'BUILDKITE' => 'true' }],
|
665
|
+
['CircleCI', { 'CIRCLECI' => 'true' }],
|
666
|
+
['Cirrus CI', { 'CIRRUS_CI' => 'true' }],
|
667
|
+
['Codefresh', { 'CF_BUILD_ID' => '123' }],
|
668
|
+
['Codeship', { 'CI_NAME' => 'codeship' }],
|
669
|
+
['GitHub Actions', { 'GITHUB_ACTIONS' => 'true' }],
|
670
|
+
['GitLab CI', { 'GITLAB_CI' => 'true' }],
|
671
|
+
['Heroku CI', { 'HEROKU_TEST_RUN_ID' => '123' }],
|
672
|
+
['Semaphore CI 1.0', { 'SEMAPHORE_BUILD_NUMBER' => '123' }],
|
673
|
+
['Semaphore CI 2.0', { 'SEMAPHORE' => 'true', 'SEMAPHORE_WORKFLOW_ID' => '123' }],
|
674
|
+
['Travis CI', { 'TRAVIS' => 'true' }],
|
675
|
+
['Unsupported', {}],
|
676
|
+
].each do |ci, env|
|
677
|
+
it "on #{ci} it is false" do
|
678
|
+
logger = instance_double(Logger)
|
679
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
680
|
+
expect(logger).not_to receive(:info)
|
681
|
+
|
682
|
+
stub_const("ENV", env.merge({ 'KNAPSACK_PRO_FIXED_QUEUE_SPLIT' => 'false' }))
|
683
|
+
|
684
|
+
expect(subject).to eq(false)
|
685
|
+
end
|
686
|
+
end
|
691
687
|
end
|
692
688
|
|
693
|
-
context 'when KNAPSACK_PRO_FIXED_QUEUE_SPLIT=
|
694
|
-
|
695
|
-
|
689
|
+
context 'when KNAPSACK_PRO_FIXED_QUEUE_SPLIT=true' do
|
690
|
+
[
|
691
|
+
['AppVeyor', { 'APPVEYOR' => '123' }],
|
692
|
+
['Buildkite', { 'BUILDKITE' => 'true' }],
|
693
|
+
['CircleCI', { 'CIRCLECI' => 'true' }],
|
694
|
+
['Cirrus CI', { 'CIRRUS_CI' => 'true' }],
|
695
|
+
['Codefresh', { 'CF_BUILD_ID' => '123' }],
|
696
|
+
['Codeship', { 'CI_NAME' => 'codeship' }],
|
697
|
+
['GitHub Actions', { 'GITHUB_ACTIONS' => 'true' }],
|
698
|
+
['GitLab CI', { 'GITLAB_CI' => 'true' }],
|
699
|
+
['Heroku CI', { 'HEROKU_TEST_RUN_ID' => '123' }],
|
700
|
+
['Semaphore CI 1.0', { 'SEMAPHORE_BUILD_NUMBER' => '123' }],
|
701
|
+
['Semaphore CI 2.0', { 'SEMAPHORE' => 'true', 'SEMAPHORE_WORKFLOW_ID' => '123' }],
|
702
|
+
['Travis CI', { 'TRAVIS' => 'true' }],
|
703
|
+
['Unsupported', {}],
|
704
|
+
].each do |ci, env|
|
705
|
+
it "on #{ci} it is true" do
|
706
|
+
logger = instance_double(Logger)
|
707
|
+
allow(KnapsackPro).to receive(:logger).and_return(logger)
|
708
|
+
expect(logger).not_to receive(:info)
|
709
|
+
|
710
|
+
stub_const("ENV", env.merge({ 'KNAPSACK_PRO_FIXED_QUEUE_SPLIT' => 'true' }))
|
711
|
+
|
712
|
+
expect(subject).to eq(true)
|
713
|
+
end
|
714
|
+
end
|
696
715
|
end
|
697
716
|
end
|
698
717
|
|
699
718
|
context "when ENV doesn't exist" do
|
700
|
-
|
701
|
-
|
719
|
+
[
|
720
|
+
['AppVeyor', { 'APPVEYOR' => '123' }, false],
|
721
|
+
['Buildkite', { 'BUILDKITE' => 'true' }, true],
|
722
|
+
['CircleCI', { 'CIRCLECI' => 'true' }, false],
|
723
|
+
['Cirrus CI', { 'CIRRUS_CI' => 'true' }, false],
|
724
|
+
['Codefresh', { 'CF_BUILD_ID' => '123' }, false],
|
725
|
+
['Codeship', { 'CI_NAME' => 'codeship' }, true],
|
726
|
+
['GitHub Actions', { 'GITHUB_ACTIONS' => 'true' }, true],
|
727
|
+
['GitLab CI', { 'GITLAB_CI' => 'true' }, false],
|
728
|
+
['Heroku CI', { 'HEROKU_TEST_RUN_ID' => '123' }, false],
|
729
|
+
['Semaphore CI 1.0', { 'SEMAPHORE_BUILD_NUMBER' => '123' }, false],
|
730
|
+
['Semaphore CI 2.0', { 'SEMAPHORE' => 'true', 'SEMAPHORE_WORKFLOW_ID' => '123' }, false],
|
731
|
+
['Travis CI', { 'TRAVIS' => 'true' }, true],
|
732
|
+
['Unsupported', {}, true],
|
733
|
+
].each do |ci, env, expected|
|
734
|
+
it "on #{ci} it is #{expected}" do
|
735
|
+
logger = instance_double(Logger)
|
736
|
+
expect(KnapsackPro).to receive(:logger).and_return(logger)
|
737
|
+
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}")
|
738
|
+
|
739
|
+
stub_const("ENV", env)
|
740
|
+
|
741
|
+
expect(subject).to eq(expected)
|
742
|
+
end
|
743
|
+
end
|
702
744
|
end
|
703
745
|
end
|
704
746
|
|
@@ -895,57 +937,6 @@ describe KnapsackPro::Config::Env do
|
|
895
937
|
end
|
896
938
|
end
|
897
939
|
|
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
940
|
describe '.log_level' do
|
950
941
|
subject { described_class.log_level }
|
951
942
|
|
@@ -1022,4 +1013,28 @@ describe KnapsackPro::Config::Env do
|
|
1022
1013
|
expect(described_class.test_runner_adapter).to eql 'RSpecAdapter'
|
1023
1014
|
end
|
1024
1015
|
end
|
1016
|
+
|
1017
|
+
describe '.detected_ci' do
|
1018
|
+
[
|
1019
|
+
['AppVeyor', { 'APPVEYOR' => '123' }, KnapsackPro::Config::CI::AppVeyor],
|
1020
|
+
['Buildkite', { 'BUILDKITE' => 'true' }, KnapsackPro::Config::CI::Buildkite],
|
1021
|
+
['CircleCI', { 'CIRCLECI' => 'true' }, KnapsackPro::Config::CI::Circle],
|
1022
|
+
['Cirrus CI', { 'CIRRUS_CI' => 'true' }, KnapsackPro::Config::CI::CirrusCI],
|
1023
|
+
['Codefresh', { 'CF_BUILD_ID' => '123' }, KnapsackPro::Config::CI::Codefresh],
|
1024
|
+
['Codeship', { 'CI_NAME' => 'codeship' }, KnapsackPro::Config::CI::Codeship],
|
1025
|
+
['GitHub Actions', { 'GITHUB_ACTIONS' => 'true' }, KnapsackPro::Config::CI::GithubActions],
|
1026
|
+
['GitLab CI', { 'GITLAB_CI' => 'true' }, KnapsackPro::Config::CI::GitlabCI],
|
1027
|
+
['Heroku CI', { 'HEROKU_TEST_RUN_ID' => '123' }, KnapsackPro::Config::CI::Heroku],
|
1028
|
+
['Semaphore CI 1.0', { 'SEMAPHORE_BUILD_NUMBER' => '123' }, KnapsackPro::Config::CI::Semaphore],
|
1029
|
+
['Semaphore CI 2.0', { 'SEMAPHORE' => 'true', 'SEMAPHORE_WORKFLOW_ID' => '123' }, KnapsackPro::Config::CI::Semaphore2],
|
1030
|
+
['Travis CI', { 'TRAVIS' => 'true' }, KnapsackPro::Config::CI::Travis],
|
1031
|
+
['Unsupported', {}, KnapsackPro::Config::CI::Base],
|
1032
|
+
].each do |ci, env, expected|
|
1033
|
+
it "detects #{ci}" do
|
1034
|
+
stub_const("ENV", env)
|
1035
|
+
|
1036
|
+
expect(described_class.detected_ci).to eq(expected)
|
1037
|
+
end
|
1038
|
+
end
|
1039
|
+
end
|
1025
1040
|
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.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ArturT
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|