berkshelf 3.0.0.beta2 → 3.0.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/CHANGELOG.md +8 -0
- data/Gemfile +0 -1
- data/Guardfile +0 -4
- data/README.md +1 -1
- data/Thorfile +2 -11
- data/berkshelf.gemspec +2 -5
- data/features/berksfile.feature +2 -10
- data/features/commands/apply.feature +31 -0
- data/features/{configure_command.feature → commands/configure.feature} +9 -11
- data/features/{contingent_command.feature → commands/contingent.feature} +10 -20
- data/features/{cookbook_command.feature → commands/cookbook.feature} +4 -11
- data/features/{init_command.feature → commands/init.feature} +10 -19
- data/features/{install_command.feature → commands/install.feature} +161 -82
- data/features/{list_command.feature → commands/list.feature} +4 -14
- data/features/{outdated_command.feature → commands/outdated.feature} +21 -63
- data/features/{package_command.feature → commands/package.feature} +11 -22
- data/features/{shelf → commands/shelf}/list.feature +3 -8
- data/features/{shelf → commands/shelf}/show.feature +5 -9
- data/features/{shelf → commands/shelf}/uninstall.feature +6 -10
- data/features/{show_command.feature → commands/show.feature} +13 -38
- data/features/commands/update.feature +48 -0
- data/features/commands/upload.feature +197 -0
- data/features/commands/vendor.feature +53 -0
- data/features/community_site.feature +39 -0
- data/features/config.feature +79 -9
- data/features/help.feature +10 -19
- data/features/json_formatter.feature +19 -44
- data/features/licenses.feature +27 -61
- data/features/lockfile.feature +120 -354
- data/features/resolver.feature +28 -0
- data/features/step_definitions/berksfile_steps.rb +39 -0
- data/features/step_definitions/chef/config_steps.rb +1 -1
- data/features/step_definitions/chef_server_steps.rb +27 -27
- data/features/step_definitions/config_steps.rb +3 -0
- data/features/step_definitions/filesystem_steps.rb +10 -0
- data/features/step_definitions/json_steps.rb +0 -7
- data/features/step_definitions/lockfile_steps.rb +53 -0
- data/features/step_definitions/utility_steps.rb +4 -4
- data/features/support/env.rb +1 -0
- data/generator_files/Berksfile.erb +1 -1
- data/generator_files/README.md.erb +62 -6
- data/generator_files/Vagrantfile.erb +15 -4
- data/lib/berkshelf.rb +2 -4
- data/lib/berkshelf/api_client.rb +5 -7
- data/lib/berkshelf/berksfile.rb +24 -20
- data/lib/berkshelf/cached_cookbook.rb +8 -1
- data/lib/berkshelf/cli.rb +5 -10
- data/lib/berkshelf/community_rest.rb +4 -5
- data/lib/berkshelf/config.rb +8 -2
- data/lib/berkshelf/cookbook_store.rb +9 -14
- data/lib/berkshelf/dependency.rb +16 -13
- data/lib/berkshelf/errors.rb +15 -1
- data/lib/berkshelf/formatters/json.rb +1 -1
- data/lib/berkshelf/init_generator.rb +17 -3
- data/lib/berkshelf/installer.rb +12 -1
- data/lib/berkshelf/logger.rb +7 -4
- data/lib/berkshelf/resolver.rb +1 -1
- data/lib/berkshelf/version.rb +1 -1
- data/spec/spec_helper.rb +0 -9
- data/spec/support/chef_server.rb +24 -7
- data/spec/unit/berkshelf/api_client/remote_cookbook_spec.rb +3 -3
- data/spec/unit/berkshelf/berksfile_spec.rb +35 -1
- data/spec/unit/berkshelf/cached_cookbook_spec.rb +8 -0
- data/spec/unit/berkshelf/community_rest_spec.rb +76 -25
- data/spec/unit/berkshelf/cookbook_generator_spec.rb +9 -3
- data/spec/unit/berkshelf/dependency_spec.rb +16 -1
- data/spec/unit/berkshelf/init_generator_spec.rb +71 -7
- metadata +44 -116
- data/.cane +0 -4
- data/features/apply_command.feature +0 -40
- data/features/groups_install.feature +0 -113
- data/features/update_command.feature +0 -136
- data/features/upload_command.feature +0 -327
- data/features/vendor_command.feature +0 -83
- data/lib/berkshelf/chef.rb +0 -7
- data/lib/berkshelf/chef/cookbook.rb +0 -5
- data/lib/berkshelf/chef/cookbook/chefignore.rb +0 -75
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_download/unpacks_the_archive.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_find/raises_a_CommunitySiteError_error_on_any_non_200_or_404_response.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_find/raises_a_CookbookNotFound_error_on_a_404_response_for_a_non-existent_cookbook.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_find/raises_a_CookbookNotFound_error_on_a_404_response_for_a_non-existent_version.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_find/returns_the_cookbook_and_version_information.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_latest_version/raises_a_CommunitySiteError_error_on_any_non_200_or_404_response.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_latest_version/raises_a_CookbookNotFound_error_on_a_404_response.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_latest_version/returns_the_version_number_of_the_latest_version_of_the_cookbook.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_satisfy/returns_the_version_number_of_the_best_solution.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_versions/raises_a_CommunitySiteError_error_on_any_non_200_or_404_response.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_versions/raises_a_CookbookNotFound_error_on_a_404_response.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_CommunityREST/_versions/returns_an_array_containing_an_item_for_each_version.json +0 -1
- data/spec/fixtures/cassettes/Berkshelf_Resolver/_initialize/adds_the_dependencies_of_the_dependency_as_dependencies.yml +0 -3694
- data/spec/fixtures/cassettes/Berkshelf_Resolver/_initialize/adds_the_dependencies_of_the_source_as_sources.yml +0 -3829
- data/spec/unit/berkshelf/chef/cookbook/chefignore_spec.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f30b6f5921539453a2eb582dcf8b483bf6f33e1
|
4
|
+
data.tar.gz: d47613f9a3940b7b8e0fa157f7e8e5643f468288
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32ec7a95765d2b8d81792e71f6834736e12dd738ef0a5a4764c1fa5ae7dee346d581105349303efca4d4265e6df6f369832d5906d32453a7c24ba67f96bc90cf
|
7
|
+
data.tar.gz: 8b64c19ac6c62a77bbed0fea4aacca7fab0fc6f20442ba34c2b726917e48d5cad4bad7a9f1689568fbc83a009670e8a7e5113140eb3b1d155cf2c0c00e7d020b
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
* New "universe" resolver which communicates with an API server to resolve constraint graphs faster and more reliably
|
4
4
|
|
5
|
+
# 2.0.10
|
6
|
+
|
7
|
+
* Huge performance increase when resolving a Berksfile when the Berkshelf contains a lot of cookbooks
|
8
|
+
|
9
|
+
# 2.0.9
|
10
|
+
|
11
|
+
* Update required version of Ridley
|
12
|
+
|
5
13
|
# 2.0.7
|
6
14
|
|
7
15
|
* Fix crash when parsing a lockfile that contains path locations which no longer exist
|
data/Gemfile
CHANGED
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -39,7 +39,7 @@ There is a [berkshelf bash completion script](https://raw.github.com/RiotGames/b
|
|
39
39
|
|
40
40
|
Download the latest script
|
41
41
|
|
42
|
-
cd `brew --prefix`/etc/bash_completion && wget https://raw.github.com/RiotGames/berkshelf/master/berkshelf-complete.sh
|
42
|
+
cd `brew --prefix`/etc/bash_completion.d && wget https://raw.github.com/RiotGames/berkshelf/master/berkshelf-complete.sh
|
43
43
|
|
44
44
|
And make sure you have this in your bash/zsh profile:
|
45
45
|
|
data/Thorfile
CHANGED
@@ -30,7 +30,7 @@ class Spec < Thor
|
|
30
30
|
|
31
31
|
desc 'all', 'Run all specs and features'
|
32
32
|
def all
|
33
|
-
exit(units_command && acceptance_command
|
33
|
+
exit(units_command && acceptance_command)
|
34
34
|
end
|
35
35
|
|
36
36
|
desc 'ci', 'Run tests on Travis'
|
@@ -49,22 +49,13 @@ class Spec < Thor
|
|
49
49
|
exit(acceptance_command)
|
50
50
|
end
|
51
51
|
|
52
|
-
desc 'quality', 'Run code quality tests'
|
53
|
-
def quality
|
54
|
-
exit(quality_command)
|
55
|
-
end
|
56
|
-
|
57
52
|
no_tasks do
|
58
53
|
def units_command
|
59
54
|
run('rspec --color --format progress spec/unit')
|
60
55
|
end
|
61
56
|
|
62
57
|
def acceptance_command
|
63
|
-
run('cucumber --color --format progress --tags ~@no_run')
|
64
|
-
end
|
65
|
-
|
66
|
-
def quality_command
|
67
|
-
run('cane --gte coverage/.last_run.json,90')
|
58
|
+
run('cucumber --color --format progress --tags ~@no_run --strict')
|
68
59
|
end
|
69
60
|
end
|
70
61
|
end
|
data/berkshelf.gemspec
CHANGED
@@ -34,24 +34,21 @@ Gem::Specification.new do |s|
|
|
34
34
|
s.add_dependency 'buff-config', '~> 0.2'
|
35
35
|
s.add_dependency 'buff-extensions', '~> 0.4'
|
36
36
|
s.add_dependency 'buff-shell_out', '~> 0.1'
|
37
|
-
s.add_dependency 'celluloid', '>= 0.14.0'
|
38
37
|
s.add_dependency 'faraday', '>= 0.8.5'
|
39
38
|
s.add_dependency 'hashie', '>= 2.0.2'
|
40
39
|
s.add_dependency 'minitar', '~> 0.5.4'
|
41
40
|
s.add_dependency 'retryable', '~> 1.3.3'
|
42
|
-
s.add_dependency 'ridley', '~> 1.
|
43
|
-
s.add_dependency 'solve', '>= 0.
|
41
|
+
s.add_dependency 'ridley', '~> 1.6'
|
42
|
+
s.add_dependency 'solve', '>= 0.8.0'
|
44
43
|
s.add_dependency 'thor', '~> 0.18.0'
|
45
44
|
|
46
45
|
s.add_development_dependency 'aruba', '~> 0.5'
|
47
|
-
s.add_development_dependency 'cane', '~> 2.5'
|
48
46
|
s.add_development_dependency 'chef-zero', '~> 1.5.0'
|
49
47
|
s.add_development_dependency 'fuubar', '~> 1.1'
|
50
48
|
s.add_development_dependency 'rake', '~> 0.9'
|
51
49
|
s.add_development_dependency 'rspec', '~> 2.13'
|
52
50
|
s.add_development_dependency 'spork', '~> 0.9'
|
53
51
|
s.add_development_dependency 'test-kitchen', '>= 1.0.0.alpha7'
|
54
|
-
s.add_development_dependency 'vcr', '~> 2.4'
|
55
52
|
s.add_development_dependency 'webmock', '~> 1.11'
|
56
53
|
s.add_development_dependency 'yard', '~> 0.8'
|
57
54
|
end
|
data/features/berksfile.feature
CHANGED
@@ -1,13 +1,7 @@
|
|
1
1
|
Feature: Evaluating a Berksfile
|
2
|
-
As a user with a Berksfile
|
3
|
-
I want to evaluate things and see nice errors
|
4
|
-
So I can identify my syntax errors and faults
|
5
|
-
|
6
2
|
Scenario: Containing pure Ruby
|
7
3
|
Given I write to "Berksfile" with:
|
8
4
|
"""
|
9
|
-
source "http://localhost:26210"
|
10
|
-
|
11
5
|
if ENV['BACON']
|
12
6
|
puts "If you don't got bacon..."
|
13
7
|
else
|
@@ -21,11 +15,10 @@ Feature: Evaluating a Berksfile
|
|
21
15
|
If you don't got bacon...
|
22
16
|
"""
|
23
17
|
|
18
|
+
|
24
19
|
Scenario: Containing methods I shouldn't be able to call
|
25
20
|
Given I write to "Berksfile" with:
|
26
21
|
"""
|
27
|
-
source "http://localhost:26210"
|
28
|
-
|
29
22
|
add_location(:foo)
|
30
23
|
"""
|
31
24
|
When I run `berks install`
|
@@ -37,11 +30,10 @@ Feature: Evaluating a Berksfile
|
|
37
30
|
"""
|
38
31
|
And the exit status should be "BerksfileReadError"
|
39
32
|
|
33
|
+
|
40
34
|
Scenario: Containing Ruby syntax errors
|
41
35
|
Given I write to "Berksfile" with:
|
42
36
|
"""
|
43
|
-
source "http://localhost:26210"
|
44
|
-
|
45
37
|
ptus "This is a ruby syntax error"
|
46
38
|
"""
|
47
39
|
When I run `berks install`
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Feature: berks apply
|
2
|
+
Scenario: Locking a cookbook version with dependencies
|
3
|
+
Given the cookbook store contains a cookbook "fake" "1.0.0" with dependencies:
|
4
|
+
| dependency | 2.0.0 |
|
5
|
+
And the cookbook store has the cookbooks:
|
6
|
+
| dependency | 2.0.0 |
|
7
|
+
And the Chef Server has an environment named "my_env"
|
8
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
9
|
+
"""
|
10
|
+
cookbook 'fake', '1.0.0'
|
11
|
+
"""
|
12
|
+
When I successfully run `berks apply my_env`
|
13
|
+
Then the version locks in the "my_env" environment should be:
|
14
|
+
| fake | 1.0.0 |
|
15
|
+
| dependency | 2.0.0 |
|
16
|
+
|
17
|
+
|
18
|
+
Scenario: Locking cookbook versions to a non-existent Chef Environment
|
19
|
+
Given the Chef Server does not have an environment named "my_env"
|
20
|
+
And the cookbook store has the cookbooks:
|
21
|
+
| fake | 1.0.0 |
|
22
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
23
|
+
"""
|
24
|
+
cookbook 'fake', '1.0.0'
|
25
|
+
"""
|
26
|
+
When I run `berks apply my_env`
|
27
|
+
Then the output should contain:
|
28
|
+
"""
|
29
|
+
The environment 'my_env' does not exist
|
30
|
+
"""
|
31
|
+
And the exit status should be "EnvironmentNotFound"
|
@@ -1,11 +1,7 @@
|
|
1
1
|
@spawn
|
2
|
-
Feature:
|
3
|
-
As CLI user of Berkshelf
|
4
|
-
I want a command to generate a Berkshelf configuration file based on my input
|
5
|
-
So I can quickly get up and running with the least amount of resistance
|
6
|
-
|
2
|
+
Feature: berks configure
|
7
3
|
Background:
|
8
|
-
|
4
|
+
* I do not have a Berkshelf config
|
9
5
|
|
10
6
|
Scenario: Using custom values
|
11
7
|
When I run `berks configure` interactively
|
@@ -28,7 +24,7 @@ Feature: Configuring Berkshelf via the command line
|
|
28
24
|
| chef.validation_key_path | /Users/reset/.chef/reset.pem |
|
29
25
|
| vagrant.vm.box | Berkshelf-minimal |
|
30
26
|
| vagrant.vm.box_url | https://dl.dropbox.com/Berkshelf.box |
|
31
|
-
|
27
|
+
|
32
28
|
|
33
29
|
Scenario: Accepting the default values
|
34
30
|
Given I do not have a Chef config
|
@@ -49,9 +45,11 @@ Feature: Configuring Berkshelf via the command line
|
|
49
45
|
| chef.validation_client_name | chef-validator |
|
50
46
|
| chef.client_key | /etc/chef/client.pem |
|
51
47
|
| chef.validation_key_path | /etc/chef/validation.pem |
|
52
|
-
| vagrant.vm.box |
|
53
|
-
| vagrant.vm.box_url | https://
|
54
|
-
|
48
|
+
| vagrant.vm.box | opscode_ubuntu-12.04_provisionerless |
|
49
|
+
| vagrant.vm.box_url | https://opscode-vm-bento.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_provisionerless.box |
|
50
|
+
| vagrant.omnibus.enabled | BOOLEAN[true] |
|
51
|
+
| vagrant.omnibus.version | latest |
|
52
|
+
|
55
53
|
|
56
54
|
Scenario: Creating a Berkshelf configuration file when one already exists
|
57
55
|
Given I already have a Berkshelf config file
|
@@ -62,6 +60,7 @@ Feature: Configuring Berkshelf via the command line
|
|
62
60
|
"""
|
63
61
|
And the exit status should be "ConfigExists"
|
64
62
|
|
63
|
+
|
65
64
|
Scenario Outline: Using the --path option
|
66
65
|
When I run `berks configure --path <path>` interactively
|
67
66
|
And I type "https://api.opscode.com/organizations/vialstudios"
|
@@ -83,7 +82,6 @@ Feature: Configuring Berkshelf via the command line
|
|
83
82
|
| chef.validation_key_path | /Users/reset/.chef/reset.pem |
|
84
83
|
| vagrant.vm.box | Berkshelf-minimal |
|
85
84
|
| vagrant.vm.box_url | https://dl.dropbox.com/Berkshelf.box |
|
86
|
-
And the exit status should be 0
|
87
85
|
|
88
86
|
Examples:
|
89
87
|
| path |
|
@@ -1,12 +1,9 @@
|
|
1
|
-
Feature:
|
2
|
-
As a user with a Berksfile
|
3
|
-
I want a way to the cookbooks that depend on another
|
4
|
-
So that I can better understand my infrastructure
|
5
|
-
|
1
|
+
Feature: berks contingent
|
6
2
|
Background:
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
* the Berkshelf API server's cache is empty
|
4
|
+
* the Chef Server is empty
|
5
|
+
* the cookbook store is empty
|
6
|
+
|
10
7
|
|
11
8
|
Scenario: When there are dependent cookbooks
|
12
9
|
Given the cookbook store has the cookbooks:
|
@@ -15,10 +12,8 @@ Feature: Running the contingent command
|
|
15
12
|
| dep | ~> 1.0.0 |
|
16
13
|
And the cookbook store contains a cookbook "ekaf" "1.0.0" with dependencies:
|
17
14
|
| dep | ~> 1.0.0 |
|
18
|
-
And I
|
15
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
19
16
|
"""
|
20
|
-
source "http://localhost:26210"
|
21
|
-
|
22
17
|
cookbook 'fake', '1.0.0'
|
23
18
|
cookbook 'ekaf', '1.0.0'
|
24
19
|
"""
|
@@ -29,15 +24,13 @@ Feature: Running the contingent command
|
|
29
24
|
* ekaf (1.0.0)
|
30
25
|
* fake (1.0.0)
|
31
26
|
"""
|
32
|
-
|
27
|
+
|
33
28
|
|
34
29
|
Scenario: When there are no dependent cookbooks
|
35
30
|
Given the cookbook store has the cookbooks:
|
36
31
|
| fake | 1.0.0 |
|
37
|
-
And I
|
32
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
38
33
|
"""
|
39
|
-
source "http://localhost:26210"
|
40
|
-
|
41
34
|
cookbook 'fake', '1.0.0'
|
42
35
|
"""
|
43
36
|
And I successfully run `berks contingent dep`
|
@@ -45,13 +38,10 @@ Feature: Running the contingent command
|
|
45
38
|
"""
|
46
39
|
There are no cookbooks contingent upon 'dep' defined in this Berksfile
|
47
40
|
"""
|
48
|
-
|
41
|
+
|
49
42
|
|
50
43
|
Scenario: When the cookbook is not in the Berksfile
|
51
|
-
Given I
|
52
|
-
"""
|
53
|
-
source "http://localhost:26210"
|
54
|
-
"""
|
44
|
+
Given I have a Berksfile pointing at the local Berkshelf API
|
55
45
|
And I successfully run `berks contingent dep`
|
56
46
|
Then the output should contain:
|
57
47
|
"""
|
@@ -1,18 +1,12 @@
|
|
1
|
-
Feature:
|
2
|
-
As a Cookbook author
|
3
|
-
I want a way to quickly generate a Cookbook skeleton that contains supporting Berkshelf files
|
4
|
-
So I can quickly and automatically generate a Cookbook containing Berkshelf supporting files or other common supporting files
|
5
|
-
|
1
|
+
Feature: berks cookbook
|
6
2
|
Scenario: With the default options
|
7
3
|
When I successfully run `berks cookbook sparkle_motion`
|
8
4
|
Then I should have a new cookbook skeleton "sparkle_motion"
|
9
|
-
|
5
|
+
|
10
6
|
|
11
7
|
Scenario Outline: With various options
|
12
8
|
When I successfully run `berks cookbook sparkle_motion --<option>`
|
13
9
|
Then I should have a new cookbook skeleton "sparkle_motion" with <feature> support
|
14
|
-
And the exit status should be 0
|
15
|
-
|
16
10
|
Examples:
|
17
11
|
| option | feature |
|
18
12
|
| foodcritic | Foodcritic |
|
@@ -25,21 +19,20 @@ Feature: Creating a new cookbook
|
|
25
19
|
| skip-vagrant | no Vagrant |
|
26
20
|
| skip-test-kitchen | no Test Kitchen |
|
27
21
|
|
22
|
+
|
28
23
|
Scenario Outline: When a required supporting gem is not installed
|
29
24
|
Given the gem "<gem>" is not installed
|
30
25
|
When I successfully run `berks cookbook sparkle_motion --<option>`
|
31
26
|
Then I should have a new cookbook skeleton "sparkle_motion" with <feature> support
|
32
27
|
And the output should contain a warning to suggest supporting the option "<option>" by installing "<gem>"
|
33
|
-
And the exit status should be 0
|
34
|
-
|
35
28
|
Examples:
|
36
29
|
| option | feature | gem |
|
37
30
|
| foodcritic | Foodcritic | foodcritic |
|
38
31
|
| scmversion | SCMVersion | thor-scmversion |
|
39
32
|
|
33
|
+
|
40
34
|
Scenario: When bundler is not installed
|
41
35
|
Given the gem "bundler" is not installed
|
42
36
|
When I successfully run `berks cookbook sparkle_motion`
|
43
37
|
Then I should have a new cookbook skeleton "sparkle_motion"
|
44
38
|
And the output should contain a warning to suggest supporting the default for "bundler" by installing "bundler"
|
45
|
-
And the exit status should be 0
|
@@ -1,8 +1,4 @@
|
|
1
|
-
Feature:
|
2
|
-
As a Cookbook author
|
3
|
-
I want a way to quickly prepare a Cookbook on my local disk with Berkshelf files
|
4
|
-
So that I can resolve my Cookbook's dependencies with Berkshelf
|
5
|
-
|
1
|
+
Feature: berks init
|
6
2
|
Scenario: initializing a path containing a cookbook
|
7
3
|
Given a cookbook named "sparkle_motion"
|
8
4
|
When I successfully run `berks init sparkle_motion`
|
@@ -14,25 +10,20 @@ Feature: initialize command
|
|
14
10
|
metadata
|
15
11
|
"""
|
16
12
|
And the output should contain "Successfully initialized"
|
17
|
-
|
13
|
+
|
18
14
|
|
19
15
|
Scenario: initializing a path that does not contain a cookbook
|
20
16
|
Given a directory named "not_a_cookbook"
|
21
|
-
When I
|
22
|
-
|
23
|
-
|
24
|
-
And the directory "not_a_cookbook" should not have the following files:
|
25
|
-
| chefignore |
|
26
|
-
And the file "Berksfile" in the directory "not_a_cookbook" should not contain:
|
27
|
-
"""
|
28
|
-
metadata
|
29
|
-
"""
|
30
|
-
And the output should contain "Successfully initialized"
|
31
|
-
And the exit status should be 0
|
17
|
+
When I run `berks init not_a_cookbook`
|
18
|
+
And the exit status should be "NotACookbook"
|
19
|
+
|
32
20
|
|
33
21
|
Scenario: initializing with no value given for target
|
22
|
+
Given I write to "metadata.rb" with:
|
23
|
+
"""
|
24
|
+
name 'sparkle_motion'
|
25
|
+
"""
|
34
26
|
When I successfully run `berks init`
|
35
27
|
Then the output should contain "Successfully initialized"
|
36
28
|
And a file named "Berksfile" should exist
|
37
|
-
And a file named "chefignore" should
|
38
|
-
And the exit status should be 0
|
29
|
+
And a file named "chefignore" should exist
|
@@ -1,18 +1,13 @@
|
|
1
|
-
Feature: install
|
2
|
-
As a user with a Berksfile
|
3
|
-
I want a command to install the cookbooks defined in my Berksfile and their recursive dependencies
|
4
|
-
So I don't have to download those cookbooks and their all of their dependencies manually
|
5
|
-
|
1
|
+
Feature: berks install
|
6
2
|
Background:
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
* the Berkshelf API server's cache is empty
|
4
|
+
* the Chef Server is empty
|
5
|
+
* the cookbook store is empty
|
6
|
+
|
10
7
|
|
11
8
|
Scenario: installing the version that best satisfies our demand
|
12
|
-
Given I
|
9
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
13
10
|
"""
|
14
|
-
source "http://localhost:26210"
|
15
|
-
|
16
11
|
cookbook 'berkshelf'
|
17
12
|
"""
|
18
13
|
And the Chef Server has cookbooks:
|
@@ -27,11 +22,10 @@ Feature: install cookbooks from a Berksfile
|
|
27
22
|
And the cookbook store should have the cookbooks:
|
28
23
|
| berkshelf | 2.0.0 |
|
29
24
|
|
25
|
+
|
30
26
|
Scenario: installing an explicit version demand
|
31
|
-
Given I
|
27
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
32
28
|
"""
|
33
|
-
source "http://localhost:26210"
|
34
|
-
|
35
29
|
cookbook 'berkshelf', '1.0.0'
|
36
30
|
"""
|
37
31
|
And the Chef Server has cookbooks:
|
@@ -46,11 +40,10 @@ Feature: install cookbooks from a Berksfile
|
|
46
40
|
And the cookbook store should have the cookbooks:
|
47
41
|
| berkshelf | 1.0.0 |
|
48
42
|
|
43
|
+
|
49
44
|
Scenario: installing demands from all groups
|
50
|
-
Given I
|
45
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
51
46
|
"""
|
52
|
-
source "http://localhost:26210"
|
53
|
-
|
54
47
|
group :one do
|
55
48
|
cookbook 'ruby'
|
56
49
|
end
|
@@ -73,11 +66,10 @@ Feature: install cookbooks from a Berksfile
|
|
73
66
|
| ruby | 1.0.0 |
|
74
67
|
| elixir | 1.0.0 |
|
75
68
|
|
69
|
+
|
76
70
|
Scenario: installing a demand that has already been installed
|
77
|
-
Given I
|
71
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
78
72
|
"""
|
79
|
-
source "http://localhost:26210"
|
80
|
-
|
81
73
|
cookbook 'berkshelf-cookbook-fixture', github: 'RiotGames/berkshelf-cookbook-fixture', branch: 'deps'
|
82
74
|
"""
|
83
75
|
And the cookbook store contains a cookbook "berkshelf" "1.0.0" with dependencies:
|
@@ -91,11 +83,66 @@ Feature: install cookbooks from a Berksfile
|
|
91
83
|
Using hostsfile (1.0.1)
|
92
84
|
"""
|
93
85
|
|
94
|
-
|
95
|
-
|
86
|
+
|
87
|
+
Scenario: installing a single groups of demands with the --only flag
|
88
|
+
Given the cookbook store has the cookbooks:
|
89
|
+
| takeme | 1.0.0 |
|
90
|
+
| notme | 1.0.0 |
|
91
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
92
|
+
"""
|
93
|
+
cookbook 'takeme', group: :take_me
|
94
|
+
cookbook 'notme', group: :not_me
|
96
95
|
"""
|
97
|
-
|
96
|
+
When I successfully run `berks install --only take_me`
|
97
|
+
Then the output should contain "Using takeme (1.0.0)"
|
98
|
+
Then the output should not contain "Using notme (1.0.0)"
|
99
|
+
|
100
|
+
|
101
|
+
Scenario: installing multiple groups of demands with the --only flag
|
102
|
+
Given the cookbook store has the cookbooks:
|
103
|
+
| takeme | 1.0.0 |
|
104
|
+
| notme | 1.0.0 |
|
105
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
106
|
+
"""
|
107
|
+
cookbook 'takeme', group: :take_me
|
108
|
+
cookbook 'notme', group: :not_me
|
109
|
+
"""
|
110
|
+
When I successfully run `berks upload --only take_me not_me`
|
111
|
+
Then the output should contain "Using takeme (1.0.0)"
|
112
|
+
Then the output should contain "Using notme (1.0.0)"
|
113
|
+
|
114
|
+
|
115
|
+
Scenario: skipping a single group to install with the --except flag
|
116
|
+
Given the cookbook store has the cookbooks:
|
117
|
+
| takeme | 1.0.0 |
|
118
|
+
| notme | 1.0.0 |
|
119
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
120
|
+
"""
|
121
|
+
cookbook 'takeme', group: :take_me
|
122
|
+
cookbook 'notme', group: :not_me
|
123
|
+
"""
|
124
|
+
When I successfully run `berks upload --except not_me`
|
125
|
+
Then the output should contain "Using takeme (1.0.0)"
|
126
|
+
Then the output should not contain "Using notme (1.0.0)"
|
127
|
+
|
128
|
+
|
129
|
+
Scenario: skipping multiple groups to install with the --except flag
|
130
|
+
Given the cookbook store has the cookbooks:
|
131
|
+
| takeme | 1.0.0 |
|
132
|
+
| notme | 1.0.0 |
|
133
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
134
|
+
"""
|
135
|
+
cookbook 'takeme', group: :take_me
|
136
|
+
cookbook 'notme', group: :not_me
|
137
|
+
"""
|
138
|
+
When I successfully run `berks upload --except take_me not_me`
|
139
|
+
Then the output should not contain "Using takeme (1.0.0)"
|
140
|
+
Then the output should not contain "Using notme (1.0.0)"
|
141
|
+
|
98
142
|
|
143
|
+
Scenario: installing a demand from a path location
|
144
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
145
|
+
"""
|
99
146
|
cookbook 'example_cookbook', path: '../../fixtures/cookbooks/example_cookbook-0.5.0'
|
100
147
|
"""
|
101
148
|
And the Berkshelf API server's cache is up to date
|
@@ -105,24 +152,22 @@ Feature: install cookbooks from a Berksfile
|
|
105
152
|
Using example_cookbook (0.5.0) path: '
|
106
153
|
"""
|
107
154
|
|
155
|
+
|
108
156
|
Scenario: installing a Berksfile from a remote directory that contains a path location
|
109
|
-
Given I
|
157
|
+
Given I have a Berksfile at "subdirectory" pointing at the local Berkshelf API with:
|
110
158
|
"""
|
111
|
-
source "http://localhost:26210"
|
112
|
-
|
113
159
|
cookbook 'example_cookbook', path: '../../../fixtures/cookbooks/example_cookbook-0.5.0'
|
114
160
|
"""
|
115
|
-
When I successfully run `berks install -b
|
161
|
+
When I successfully run `berks install -b subdirectory/Berksfile`
|
116
162
|
Then the output should contain:
|
117
163
|
"""
|
118
164
|
Using example_cookbook (0.5.0) path: '
|
119
165
|
"""
|
120
166
|
|
167
|
+
|
121
168
|
Scenario: installing a demand from a Git location
|
122
|
-
Given I
|
169
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
123
170
|
"""
|
124
|
-
source "http://localhost:26210"
|
125
|
-
|
126
171
|
cookbook "berkshelf-cookbook-fixture", git: "git://github.com/RiotGames/berkshelf-cookbook-fixture.git"
|
127
172
|
"""
|
128
173
|
When I successfully run `berks install`
|
@@ -135,11 +180,10 @@ Feature: install cookbooks from a Berksfile
|
|
135
180
|
Using berkshelf-cookbook-fixture (1.0.0) git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'master'
|
136
181
|
"""
|
137
182
|
|
183
|
+
|
138
184
|
Scenario: installing a demand from a Git location that has already been installed
|
139
|
-
Given I
|
185
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
140
186
|
"""
|
141
|
-
source "http://localhost:26210"
|
142
|
-
|
143
187
|
cookbook "berkshelf-cookbook-fixture", git: "git://github.com/RiotGames/berkshelf-cookbook-fixture.git"
|
144
188
|
"""
|
145
189
|
And the cookbook store has the git cookbooks:
|
@@ -150,11 +194,10 @@ Feature: install cookbooks from a Berksfile
|
|
150
194
|
Using berkshelf-cookbook-fixture (1.0.0) git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'master'
|
151
195
|
"""
|
152
196
|
|
197
|
+
|
153
198
|
Scenario: installing a Berksfile that contains a Git location with a rel
|
154
|
-
Given I
|
199
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
155
200
|
"""
|
156
|
-
source "http://localhost:26210"
|
157
|
-
|
158
201
|
cookbook "berkshelf-cookbook-fixture", github: 'RiotGames/berkshelf-cookbook-fixture', branch: 'rel', rel: 'cookbooks/berkshelf-cookbook-fixture'
|
159
202
|
"""
|
160
203
|
When I successfully run `berks install`
|
@@ -167,11 +210,10 @@ Feature: install cookbooks from a Berksfile
|
|
167
210
|
Using berkshelf-cookbook-fixture (1.0.0) github: 'RiotGames/berkshelf-cookbook-fixture' with branch: 'rel' over protocol: 'git'
|
168
211
|
"""
|
169
212
|
|
213
|
+
|
170
214
|
Scenario: installing a Berksfile that contains a Git location with a tag
|
171
|
-
Given I
|
215
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
172
216
|
"""
|
173
|
-
source "http://localhost:26210"
|
174
|
-
|
175
217
|
cookbook "berkshelf-cookbook-fixture", git: "git://github.com/RiotGames/berkshelf-cookbook-fixture.git", tag: "v0.2.0"
|
176
218
|
"""
|
177
219
|
When I successfully run `berks install`
|
@@ -184,11 +226,10 @@ Feature: install cookbooks from a Berksfile
|
|
184
226
|
Using berkshelf-cookbook-fixture (0.2.0) git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'v0.2.0' at ref: '70a527e17d91f01f031204562460ad1c17f972ee'
|
185
227
|
"""
|
186
228
|
|
229
|
+
|
187
230
|
Scenario: installing a Berksfile that contains a GitHub location
|
188
|
-
Given I
|
231
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
189
232
|
"""
|
190
|
-
source "http://localhost:26210"
|
191
|
-
|
192
233
|
cookbook "berkshelf-cookbook-fixture", github: "RiotGames/berkshelf-cookbook-fixture", tag: "v0.2.0"
|
193
234
|
"""
|
194
235
|
When I successfully run `berks install`
|
@@ -201,11 +242,10 @@ Feature: install cookbooks from a Berksfile
|
|
201
242
|
Using berkshelf-cookbook-fixture (0.2.0) github: 'RiotGames/berkshelf-cookbook-fixture' with branch: 'v0.2.0' over protocol: 'git'
|
202
243
|
"""
|
203
244
|
|
245
|
+
|
204
246
|
Scenario Outline: installing a Berksfile that contains a Github location and specific protocol
|
205
|
-
Given I
|
247
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
206
248
|
"""
|
207
|
-
source "http://localhost:26210"
|
208
|
-
|
209
249
|
cookbook "berkshelf-cookbook-fixture", github: "RiotGames/berkshelf-cookbook-fixture", tag: "v1.0.0", protocol: "<protocol>"
|
210
250
|
"""
|
211
251
|
When I successfully run `berks install`
|
@@ -220,14 +260,13 @@ Feature: install cookbooks from a Berksfile
|
|
220
260
|
|
221
261
|
Examples:
|
222
262
|
| protocol |
|
223
|
-
| git
|
224
|
-
| https
|
263
|
+
| git |
|
264
|
+
| https |
|
265
|
+
|
225
266
|
|
226
267
|
Scenario: installing a Berksfile that contains a Github location and an unsupported protocol
|
227
|
-
Given I
|
268
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
228
269
|
"""
|
229
|
-
source "http://localhost:26210"
|
230
|
-
|
231
270
|
cookbook "berkshelf-cookbook-fixture", github: "RiotGames/berkshelf-cookbook-fixture", tag: "v0.2.0", protocol: "somethingabsurd"
|
232
271
|
"""
|
233
272
|
When I run `berks install`
|
@@ -237,27 +276,25 @@ Feature: install cookbooks from a Berksfile
|
|
237
276
|
"""
|
238
277
|
And the exit status should be "InvalidGitURI"
|
239
278
|
|
279
|
+
|
240
280
|
Scenario: running install when current project is a cookbook and the 'metadata' is specified
|
241
281
|
Given a cookbook named "sparkle_motion"
|
242
|
-
And
|
282
|
+
And I cd to "sparkle_motion"
|
283
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
243
284
|
"""
|
244
|
-
source "http://localhost:26210"
|
245
|
-
|
246
285
|
metadata
|
247
286
|
"""
|
248
|
-
When I
|
249
|
-
And I successfully run `berks install`
|
287
|
+
When I successfully run `berks install`
|
250
288
|
Then the output should contain:
|
251
289
|
"""
|
252
290
|
Using sparkle_motion (0.0.0)
|
253
291
|
"""
|
254
292
|
|
293
|
+
|
255
294
|
Scenario: running install when current project is a cookbook and the 'metadata' is specified with a path
|
256
295
|
Given a cookbook named "fake"
|
257
|
-
And I
|
296
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
258
297
|
"""
|
259
|
-
source "http://localhost:26210"
|
260
|
-
|
261
298
|
metadata path: './fake'
|
262
299
|
"""
|
263
300
|
When I successfully run `berks install`
|
@@ -266,16 +303,15 @@ Feature: install cookbooks from a Berksfile
|
|
266
303
|
Using fake (0.0.0)
|
267
304
|
"""
|
268
305
|
|
306
|
+
|
269
307
|
Scenario: running install when a Berksfile.lock is present
|
270
308
|
Given the Chef Server has cookbooks:
|
271
309
|
| bacon | 0.1.0 |
|
272
310
|
| bacon | 0.2.0 |
|
273
311
|
| bacon | 1.0.0 |
|
274
312
|
And the Berkshelf API server's cache is up to date
|
275
|
-
And I
|
313
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
276
314
|
"""
|
277
|
-
source "http://localhost:26210"
|
278
|
-
|
279
315
|
cookbook 'bacon', '~> 0.1'
|
280
316
|
"""
|
281
317
|
And I write to "Berksfile.lock" with:
|
@@ -294,6 +330,7 @@ Feature: install cookbooks from a Berksfile
|
|
294
330
|
Installing bacon (0.2.0)
|
295
331
|
"""
|
296
332
|
|
333
|
+
|
297
334
|
Scenario: running install with no Berksfile or Berksfile.lock
|
298
335
|
When I run `berks install`
|
299
336
|
Then the output should contain:
|
@@ -302,11 +339,10 @@ Feature: install cookbooks from a Berksfile
|
|
302
339
|
"""
|
303
340
|
And the exit status should be "BerksfileNotFound"
|
304
341
|
|
342
|
+
|
305
343
|
Scenario: running install when the Cookbook is not found on the remote site
|
306
|
-
Given I
|
344
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
307
345
|
"""
|
308
|
-
source "http://localhost:26210"
|
309
|
-
|
310
346
|
cookbook 'doesntexist'
|
311
347
|
cookbook 'other-failure'
|
312
348
|
"""
|
@@ -317,11 +353,10 @@ Feature: install cookbooks from a Berksfile
|
|
317
353
|
"""
|
318
354
|
And the exit status should be "NoSolutionError"
|
319
355
|
|
356
|
+
|
320
357
|
Scenario: installing a Berksfile that has a Git location source with an invalid Git URI
|
321
|
-
Given I
|
358
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
322
359
|
"""
|
323
|
-
source "http://localhost:26210"
|
324
|
-
|
325
360
|
cookbook 'nginx', git: '/something/on/disk'
|
326
361
|
"""
|
327
362
|
When I run `berks install`
|
@@ -331,11 +366,10 @@ Feature: install cookbooks from a Berksfile
|
|
331
366
|
"""
|
332
367
|
And the exit status should be "InvalidGitURI"
|
333
368
|
|
369
|
+
|
334
370
|
Scenario: installing when there are sources with duplicate names defined in the same group
|
335
|
-
Given I
|
371
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
336
372
|
"""
|
337
|
-
source "http://localhost:26210"
|
338
|
-
|
339
373
|
cookbook 'berkshelf-cookbook-fixture'
|
340
374
|
cookbook 'berkshelf-cookbook-fixture'
|
341
375
|
"""
|
@@ -346,11 +380,10 @@ Feature: install cookbooks from a Berksfile
|
|
346
380
|
"""
|
347
381
|
And the exit status should be "DuplicateDependencyDefined"
|
348
382
|
|
383
|
+
|
349
384
|
Scenario: when a Git demand points to a branch that does not satisfy the version constraint
|
350
|
-
Given I
|
385
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
351
386
|
"""
|
352
|
-
source "http://localhost:26210"
|
353
|
-
|
354
387
|
cookbook "berkshelf-cookbook-fixture", "1.0.0", git: "git://github.com/RiotGames/berkshelf-cookbook-fixture.git", tag: "v0.2.0"
|
355
388
|
"""
|
356
389
|
When I run `berks install`
|
@@ -361,11 +394,10 @@ Feature: install cookbooks from a Berksfile
|
|
361
394
|
"""
|
362
395
|
And the exit status should be "CookbookValidationFailure"
|
363
396
|
|
397
|
+
|
364
398
|
Scenario: when a Git demand is defined and a cookbook of the same name and version is already in the cookbook store
|
365
|
-
Given I
|
399
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
366
400
|
"""
|
367
|
-
source "http://localhost:26210"
|
368
|
-
|
369
401
|
cookbook "berkshelf-cookbook-fixture", git: "git://github.com/RiotGames/berkshelf-cookbook-fixture.git", tag: "v1.0.0"
|
370
402
|
"""
|
371
403
|
And the cookbook store has the cookbooks:
|
@@ -378,11 +410,10 @@ Feature: install cookbooks from a Berksfile
|
|
378
410
|
Using berkshelf-cookbook-fixture (1.0.0) git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'v1.0.0' at ref: 'b4f968c9001ad8de30f564a2107fab9cfa91f771'
|
379
411
|
"""
|
380
412
|
|
413
|
+
|
381
414
|
Scenario: with a cookbook definition containing an invalid option
|
382
|
-
Given I
|
415
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
383
416
|
"""
|
384
|
-
source "http://localhost:26210"
|
385
|
-
|
386
417
|
cookbook "berkshelf-cookbook-fixture", whatisthis: "I don't even know", anotherwat: "isthat"
|
387
418
|
"""
|
388
419
|
When I run `berks install`
|
@@ -392,11 +423,10 @@ Feature: install cookbooks from a Berksfile
|
|
392
423
|
"""
|
393
424
|
And the exit status should be "InternalError"
|
394
425
|
|
426
|
+
|
395
427
|
Scenario: with a git error during download
|
396
|
-
Given I
|
428
|
+
Given I have a Berksfile pointing at the local Berkshelf API with:
|
397
429
|
"""
|
398
|
-
source "http://localhost:26210"
|
399
|
-
|
400
430
|
cookbook 'berkshelf-cookbook-fixture', '1.0.0'
|
401
431
|
cookbook "doesntexist", git: "git://github.com/asdjhfkljashflkjashfakljsf"
|
402
432
|
"""
|
@@ -407,3 +437,52 @@ Feature: install cookbooks from a Berksfile
|
|
407
437
|
An error occurred during Git execution:
|
408
438
|
"""
|
409
439
|
And the exit status should be "GitError"
|
440
|
+
|
441
|
+
|
442
|
+
Scenario: transitive dependencies in metadata
|
443
|
+
Given the cookbook store contains a cookbook "fake" "1.0.0" with dependencies:
|
444
|
+
| bacon | >= 0.0.0 |
|
445
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
446
|
+
"""
|
447
|
+
metadata
|
448
|
+
"""
|
449
|
+
And I write to "metadata.rb" with:
|
450
|
+
"""
|
451
|
+
depends 'fake', '1.0.0'
|
452
|
+
depends 'bacon', '0.2.0'
|
453
|
+
"""
|
454
|
+
And the Chef Server has cookbooks:
|
455
|
+
| bacon | 0.1.0 |
|
456
|
+
| bacon | 0.2.0 |
|
457
|
+
| bacon | 1.0.0 |
|
458
|
+
And the Berkshelf API server's cache is up to date
|
459
|
+
When I successfully run `berks install`
|
460
|
+
Then the cookbook store should have the cookbooks:
|
461
|
+
| bacon | 0.2.0 |
|
462
|
+
Then the output should contain:
|
463
|
+
"""
|
464
|
+
Installing bacon (0.2.0)
|
465
|
+
"""
|
466
|
+
|
467
|
+
|
468
|
+
Scenario: transitive dependencies in metadata when cookbooks are downloaded
|
469
|
+
Given the cookbook store contains a cookbook "fake" "1.0.0" with dependencies:
|
470
|
+
| bacon | >= 0.0.0 |
|
471
|
+
And the cookbook store has the cookbooks:
|
472
|
+
| bacon | 1.0.0 |
|
473
|
+
| bacon | 0.3.0 |
|
474
|
+
| bacon | 0.2.0 |
|
475
|
+
And I have a Berksfile pointing at the local Berkshelf API with:
|
476
|
+
"""
|
477
|
+
metadata
|
478
|
+
"""
|
479
|
+
And I write to "metadata.rb" with:
|
480
|
+
"""
|
481
|
+
depends 'fake', '1.0.0'
|
482
|
+
depends 'bacon', '0.2.0'
|
483
|
+
"""
|
484
|
+
When I successfully run `berks install`
|
485
|
+
Then the output should contain:
|
486
|
+
"""
|
487
|
+
Using bacon (0.2.0)
|
488
|
+
"""
|