knapsack_pro 4.0.0 → 5.0.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 +28 -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 +16 -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/ci/app_veyor_spec.rb +8 -8
- data/spec/knapsack_pro/config/ci/buildkite_spec.rb +14 -14
- data/spec/knapsack_pro/config/ci/circle_spec.rb +11 -11
- data/spec/knapsack_pro/config/ci/cirrus_ci_spec.rb +12 -12
- data/spec/knapsack_pro/config/ci/codefresh_spec.rb +6 -6
- data/spec/knapsack_pro/config/ci/codeship_spec.rb +6 -6
- data/spec/knapsack_pro/config/ci/github_actions_spec.rb +21 -8
- data/spec/knapsack_pro/config/ci/gitlab_ci_spec.rb +9 -9
- data/spec/knapsack_pro/config/ci/heroku_spec.rb +12 -12
- data/spec/knapsack_pro/config/ci/semaphore2_spec.rb +11 -11
- data/spec/knapsack_pro/config/ci/semaphore_spec.rb +12 -12
- data/spec/knapsack_pro/config/ci/travis_spec.rb +8 -8
- data/spec/knapsack_pro/config/env_spec.rb +102 -87
- 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: 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,8 +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
|
18
|
+
|
19
|
+
### 4.1.0
|
20
|
+
|
21
|
+
* Add support for CI node retry count on GitHub Actions
|
22
|
+
|
23
|
+
__(breaking change)__ for open-source forked repositories using GitHub Actions. See a fix in PR description:
|
24
|
+
|
25
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/197
|
26
|
+
|
27
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v4.0.0...v4.1.0
|
2
28
|
|
3
29
|
### 4.0.0
|
4
30
|
|
5
|
-
* Raise when `KNAPSACK_PRO_CI_NODE_BUILD_ID` is missing
|
31
|
+
* __(breaking change)__ Raise when `KNAPSACK_PRO_CI_NODE_BUILD_ID` is missing
|
6
32
|
|
7
33
|
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/195
|
8
34
|
|
@@ -16,6 +16,14 @@ module KnapsackPro
|
|
16
16
|
ENV['GITHUB_RUN_ID']
|
17
17
|
end
|
18
18
|
|
19
|
+
def node_retry_count
|
20
|
+
# A unique number for each attempt of a particular workflow run in a repository.
|
21
|
+
# This number begins at 1 for the workflow run's first attempt, and increments with each re-run.
|
22
|
+
run_attempt = ENV['GITHUB_RUN_ATTEMPT']
|
23
|
+
return unless run_attempt
|
24
|
+
run_attempt.to_i - 1
|
25
|
+
end
|
26
|
+
|
19
27
|
def commit_hash
|
20
28
|
ENV['GITHUB_SHA']
|
21
29
|
end
|
@@ -33,6 +41,14 @@ module KnapsackPro
|
|
33
41
|
def user_seat
|
34
42
|
ENV['GITHUB_ACTOR']
|
35
43
|
end
|
44
|
+
|
45
|
+
def detected
|
46
|
+
ENV.key?('GITHUB_ACTIONS') ? self.class : nil
|
47
|
+
end
|
48
|
+
|
49
|
+
def fixed_queue_split
|
50
|
+
true
|
51
|
+
end
|
36
52
|
end
|
37
53
|
end
|
38
54
|
end
|
@@ -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
|
@@ -22,12 +22,12 @@ describe KnapsackPro::Config::CI::AppVeyor do
|
|
22
22
|
describe '#node_build_id' do
|
23
23
|
subject { described_class.new.node_build_id }
|
24
24
|
|
25
|
-
context 'when environment exists' do
|
25
|
+
context 'when the environment exists' do
|
26
26
|
let(:env) { { 'APPVEYOR_BUILD_ID' => 123 } }
|
27
27
|
it { should eql 123 }
|
28
28
|
end
|
29
29
|
|
30
|
-
context "when environment doesn't exist" do
|
30
|
+
context "when the environment doesn't exist" do
|
31
31
|
it { should be nil }
|
32
32
|
end
|
33
33
|
end
|
@@ -35,12 +35,12 @@ describe KnapsackPro::Config::CI::AppVeyor do
|
|
35
35
|
describe '#commit_hash' do
|
36
36
|
subject { described_class.new.commit_hash }
|
37
37
|
|
38
|
-
context 'when environment exists' do
|
38
|
+
context 'when the environment exists' do
|
39
39
|
let(:env) { { 'APPVEYOR_REPO_COMMIT' => '2e13512fc230d6f9ebf4923352718e4d' } }
|
40
40
|
it { should eql '2e13512fc230d6f9ebf4923352718e4d' }
|
41
41
|
end
|
42
42
|
|
43
|
-
context "when environment doesn't exist" do
|
43
|
+
context "when the environment doesn't exist" do
|
44
44
|
it { should be nil }
|
45
45
|
end
|
46
46
|
end
|
@@ -48,12 +48,12 @@ describe KnapsackPro::Config::CI::AppVeyor do
|
|
48
48
|
describe '#branch' do
|
49
49
|
subject { described_class.new.branch }
|
50
50
|
|
51
|
-
context 'when environment exists' do
|
51
|
+
context 'when the environment exists' do
|
52
52
|
let(:env) { { 'APPVEYOR_REPO_BRANCH' => 'master' } }
|
53
53
|
it { should eql 'master' }
|
54
54
|
end
|
55
55
|
|
56
|
-
context "when environment doesn't exist" do
|
56
|
+
context "when the environment doesn't exist" do
|
57
57
|
it { should be nil }
|
58
58
|
end
|
59
59
|
end
|
@@ -61,12 +61,12 @@ describe KnapsackPro::Config::CI::AppVeyor do
|
|
61
61
|
describe '#project_dir' do
|
62
62
|
subject { described_class.new.project_dir }
|
63
63
|
|
64
|
-
context 'when environment exists' do
|
64
|
+
context 'when the environment exists' do
|
65
65
|
let(:env) { { 'APPVEYOR_BUILD_FOLDER' => '/path/to/clone/repo' } }
|
66
66
|
it { should eql '/path/to/clone/repo' }
|
67
67
|
end
|
68
68
|
|
69
|
-
context "when environment doesn't exist" do
|
69
|
+
context "when the environment doesn't exist" do
|
70
70
|
it { should be nil }
|
71
71
|
end
|
72
72
|
end
|
@@ -10,12 +10,12 @@ describe KnapsackPro::Config::CI::Buildkite do
|
|
10
10
|
describe '#node_total' do
|
11
11
|
subject { described_class.new.node_total }
|
12
12
|
|
13
|
-
context 'when environment exists' do
|
13
|
+
context 'when the environment exists' do
|
14
14
|
let(:env) { { 'BUILDKITE_PARALLEL_JOB_COUNT' => 4 } }
|
15
15
|
it { should eql 4 }
|
16
16
|
end
|
17
17
|
|
18
|
-
context "when environment doesn't exist" do
|
18
|
+
context "when the environment doesn't exist" do
|
19
19
|
it { should be nil }
|
20
20
|
end
|
21
21
|
end
|
@@ -23,12 +23,12 @@ describe KnapsackPro::Config::CI::Buildkite do
|
|
23
23
|
describe '#node_index' do
|
24
24
|
subject { described_class.new.node_index }
|
25
25
|
|
26
|
-
context 'when environment exists' do
|
26
|
+
context 'when the environment exists' do
|
27
27
|
let(:env) { { 'BUILDKITE_PARALLEL_JOB' => 3 } }
|
28
28
|
it { should eql 3 }
|
29
29
|
end
|
30
30
|
|
31
|
-
context "when environment doesn't exist" do
|
31
|
+
context "when the environment doesn't exist" do
|
32
32
|
it { should be nil }
|
33
33
|
end
|
34
34
|
end
|
@@ -36,12 +36,12 @@ describe KnapsackPro::Config::CI::Buildkite do
|
|
36
36
|
describe '#node_build_id' do
|
37
37
|
subject { described_class.new.node_build_id }
|
38
38
|
|
39
|
-
context 'when environment exists' do
|
39
|
+
context 'when the environment exists' do
|
40
40
|
let(:env) { { 'BUILDKITE_BUILD_NUMBER' => 1514 } }
|
41
41
|
it { should eql 1514 }
|
42
42
|
end
|
43
43
|
|
44
|
-
context "when environment doesn't exist" do
|
44
|
+
context "when the environment doesn't exist" do
|
45
45
|
it { should be nil }
|
46
46
|
end
|
47
47
|
end
|
@@ -49,12 +49,12 @@ describe KnapsackPro::Config::CI::Buildkite do
|
|
49
49
|
describe '#node_retry_count' do
|
50
50
|
subject { described_class.new.node_retry_count }
|
51
51
|
|
52
|
-
context 'when environment exists' do
|
52
|
+
context 'when the environment exists' do
|
53
53
|
let(:env) { { 'BUILDKITE_RETRY_COUNT' => '1' } }
|
54
54
|
it { should eql '1' }
|
55
55
|
end
|
56
56
|
|
57
|
-
context "when environment doesn't exist" do
|
57
|
+
context "when the environment doesn't exist" do
|
58
58
|
it { should be nil }
|
59
59
|
end
|
60
60
|
end
|
@@ -62,12 +62,12 @@ describe KnapsackPro::Config::CI::Buildkite do
|
|
62
62
|
describe '#commit_hash' do
|
63
63
|
subject { described_class.new.commit_hash }
|
64
64
|
|
65
|
-
context 'when environment exists' do
|
65
|
+
context 'when the environment exists' do
|
66
66
|
let(:env) { { 'BUILDKITE_COMMIT' => '3fa64859337f6e56409d49f865d13fd7' } }
|
67
67
|
it { should eql '3fa64859337f6e56409d49f865d13fd7' }
|
68
68
|
end
|
69
69
|
|
70
|
-
context "when environment doesn't exist" do
|
70
|
+
context "when the environment doesn't exist" do
|
71
71
|
it { should be nil }
|
72
72
|
end
|
73
73
|
end
|
@@ -75,12 +75,12 @@ describe KnapsackPro::Config::CI::Buildkite do
|
|
75
75
|
describe '#branch' do
|
76
76
|
subject { described_class.new.branch }
|
77
77
|
|
78
|
-
context 'when environment exists' do
|
78
|
+
context 'when the environment exists' do
|
79
79
|
let(:env) { { 'BUILDKITE_BRANCH' => 'main' } }
|
80
80
|
it { should eql 'main' }
|
81
81
|
end
|
82
82
|
|
83
|
-
context "when environment doesn't exist" do
|
83
|
+
context "when the environment doesn't exist" do
|
84
84
|
it { should be nil }
|
85
85
|
end
|
86
86
|
end
|
@@ -88,12 +88,12 @@ describe KnapsackPro::Config::CI::Buildkite do
|
|
88
88
|
describe '#project_dir' do
|
89
89
|
subject { described_class.new.project_dir }
|
90
90
|
|
91
|
-
context 'when environment exists' do
|
91
|
+
context 'when the environment exists' do
|
92
92
|
let(:env) { { 'BUILDKITE_BUILD_CHECKOUT_PATH' => '/home/user/knapsack_pro-ruby' } }
|
93
93
|
it { should eql '/home/user/knapsack_pro-ruby' }
|
94
94
|
end
|
95
95
|
|
96
|
-
context "when environment doesn't exist" do
|
96
|
+
context "when the environment doesn't exist" do
|
97
97
|
it { should be nil }
|
98
98
|
end
|
99
99
|
end
|
@@ -10,12 +10,12 @@ describe KnapsackPro::Config::CI::Circle do
|
|
10
10
|
describe '#node_total' do
|
11
11
|
subject { described_class.new.node_total }
|
12
12
|
|
13
|
-
context 'when environment exists' do
|
13
|
+
context 'when the environment exists' do
|
14
14
|
let(:env) { { 'CIRCLE_NODE_TOTAL' => 4 } }
|
15
15
|
it { should eql 4 }
|
16
16
|
end
|
17
17
|
|
18
|
-
context "when environment doesn't exist" do
|
18
|
+
context "when the environment doesn't exist" do
|
19
19
|
it { should be nil }
|
20
20
|
end
|
21
21
|
end
|
@@ -23,12 +23,12 @@ describe KnapsackPro::Config::CI::Circle do
|
|
23
23
|
describe '#node_index' do
|
24
24
|
subject { described_class.new.node_index }
|
25
25
|
|
26
|
-
context 'when environment exists' do
|
26
|
+
context 'when the environment exists' do
|
27
27
|
let(:env) { { 'CIRCLE_NODE_INDEX' => 3 } }
|
28
28
|
it { should eql 3 }
|
29
29
|
end
|
30
30
|
|
31
|
-
context "when environment doesn't exist" do
|
31
|
+
context "when the environment doesn't exist" do
|
32
32
|
it { should be nil }
|
33
33
|
end
|
34
34
|
end
|
@@ -36,12 +36,12 @@ describe KnapsackPro::Config::CI::Circle do
|
|
36
36
|
describe '#node_build_id' do
|
37
37
|
subject { described_class.new.node_build_id }
|
38
38
|
|
39
|
-
context 'when environment exists' do
|
39
|
+
context 'when the environment exists' do
|
40
40
|
let(:env) { { 'CIRCLE_BUILD_NUM' => 123 } }
|
41
41
|
it { should eql 123 }
|
42
42
|
end
|
43
43
|
|
44
|
-
context "when environment doesn't exist" do
|
44
|
+
context "when the environment doesn't exist" do
|
45
45
|
it { should be nil }
|
46
46
|
end
|
47
47
|
end
|
@@ -49,12 +49,12 @@ describe KnapsackPro::Config::CI::Circle do
|
|
49
49
|
describe '#commit_hash' do
|
50
50
|
subject { described_class.new.commit_hash }
|
51
51
|
|
52
|
-
context 'when environment exists' do
|
52
|
+
context 'when the environment exists' do
|
53
53
|
let(:env) { { 'CIRCLE_SHA1' => '3fa64859337f6e56409d49f865d13fd7' } }
|
54
54
|
it { should eql '3fa64859337f6e56409d49f865d13fd7' }
|
55
55
|
end
|
56
56
|
|
57
|
-
context "when environment doesn't exist" do
|
57
|
+
context "when the environment doesn't exist" do
|
58
58
|
it { should be nil }
|
59
59
|
end
|
60
60
|
end
|
@@ -62,12 +62,12 @@ describe KnapsackPro::Config::CI::Circle do
|
|
62
62
|
describe '#branch' do
|
63
63
|
subject { described_class.new.branch }
|
64
64
|
|
65
|
-
context 'when environment exists' do
|
65
|
+
context 'when the environment exists' do
|
66
66
|
let(:env) { { 'CIRCLE_BRANCH' => 'main' } }
|
67
67
|
it { should eql 'main' }
|
68
68
|
end
|
69
69
|
|
70
|
-
context "when environment doesn't exist" do
|
70
|
+
context "when the environment doesn't exist" do
|
71
71
|
it { should be nil }
|
72
72
|
end
|
73
73
|
end
|
@@ -80,7 +80,7 @@ describe KnapsackPro::Config::CI::Circle do
|
|
80
80
|
it { should eql '~/knapsack_pro-ruby' }
|
81
81
|
end
|
82
82
|
|
83
|
-
context "when environment doesn't exist" do
|
83
|
+
context "when the environment doesn't exist" do
|
84
84
|
it { should be nil }
|
85
85
|
end
|
86
86
|
end
|