minimart 1.0.2 → 1.1.3
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 +8 -8
- data/.env.test +1 -0
- data/.travis.yml +4 -3
- data/README.md +11 -1
- data/lib/minimart/cli.rb +5 -0
- data/lib/minimart/commands/mirror.rb +2 -6
- data/lib/minimart/configuration.rb +12 -0
- data/lib/minimart/download/cookbook.rb +7 -3
- data/lib/minimart/inventory_requirement/base_requirement.rb +12 -10
- data/lib/minimart/mirror/dependency_graph.rb +10 -4
- data/lib/minimart/mirror/inventory_builder.rb +1 -8
- data/lib/minimart/utils/file_helper.rb +2 -0
- data/lib/minimart/version.rb +1 -1
- data/minimart.gemspec +5 -5
- data/spec/fixtures/simple_git_inventory.yml +1 -1
- data/spec/fixtures/vcr_cassettes/local_path_cookbooks.yml +4386 -3154
- data/spec/fixtures/vcr_cassettes/location_specific_cookbooks.yml +4386 -3154
- data/spec/fixtures/vcr_cassettes/supermarket_cookbooks_graph.yml +28 -283
- data/spec/fixtures/vcr_cassettes/supermarket_cookbooks_installing_cookbooks.yml +4096 -3553
- data/spec/lib/minimart/cli_spec.rb +11 -6
- data/spec/lib/minimart/inventory_requirement/git_requirement_spec.rb +1 -1
- data/spec/lib/minimart/mirror/dependency_graph_spec.rb +13 -15
- data/spec/lib/minimart/mirror/inventory_builder_spec.rb +17 -11
- data/spec/spec_helper.rb +2 -0
- metadata +21 -8
@@ -8,7 +8,10 @@ describe Minimart::Cli do
|
|
8
8
|
Dir.chdir(test_directory)
|
9
9
|
end
|
10
10
|
|
11
|
-
after(:each)
|
11
|
+
after(:each) do
|
12
|
+
Dir.chdir(@pwd)
|
13
|
+
Minimart::Configuration.load_deps = false
|
14
|
+
end
|
12
15
|
|
13
16
|
describe '#init' do
|
14
17
|
context 'when a config file option is provided' do
|
@@ -30,17 +33,19 @@ describe Minimart::Cli do
|
|
30
33
|
it 'should call the mirroring command with the proper options' do
|
31
34
|
expect(Minimart::Commands::Mirror).to receive(:new).with(
|
32
35
|
'inventory_config' => './inventory.yml',
|
33
|
-
'inventory_directory' => './inventory'
|
36
|
+
'inventory_directory' => './inventory',
|
37
|
+
"load_deps"=>true).and_return command_double
|
34
38
|
|
35
|
-
Minimart::Cli.start %w[mirror]
|
39
|
+
Minimart::Cli.start %w[mirror --load_deps true]
|
36
40
|
end
|
37
41
|
|
38
42
|
it 'should allow users to override the default settings' do
|
39
43
|
expect(Minimart::Commands::Mirror).to receive(:new).with(
|
40
44
|
'inventory_config' => './my-test.yml',
|
41
|
-
'inventory_directory' => './test-dir'
|
45
|
+
'inventory_directory' => './test-dir',
|
46
|
+
"load_deps"=>true).and_return command_double
|
42
47
|
|
43
|
-
Minimart::Cli.start %w[mirror --inventory_config=./my-test.yml --inventory_directory=./test-dir]
|
48
|
+
Minimart::Cli.start %w[mirror --load_deps true --inventory_config=./my-test.yml --inventory_directory=./test-dir]
|
44
49
|
end
|
45
50
|
|
46
51
|
context 'when an error is raised' do
|
@@ -51,7 +56,7 @@ describe Minimart::Cli do
|
|
51
56
|
it 'should handle the error' do
|
52
57
|
expect(Minimart::Error).to receive(:handle_exception)
|
53
58
|
|
54
|
-
Minimart::Cli.start %w[mirror --inventory_config=./my-test.yml --inventory_directory=./test-dir]
|
59
|
+
Minimart::Cli.start %w[mirror --load_deps true --inventory_config=./my-test.yml --inventory_directory=./test-dir]
|
55
60
|
end
|
56
61
|
end
|
57
62
|
end
|
@@ -50,7 +50,7 @@ describe Minimart::InventoryRequirement::GitRequirement do
|
|
50
50
|
describe '#requirements' do
|
51
51
|
before(:each) { requirement.fetch_cookbook }
|
52
52
|
subject { requirement.requirements }
|
53
|
-
it { is_expected.
|
53
|
+
it { is_expected.to_not eq('yum' => '> 3.0.0') }
|
54
54
|
end
|
55
55
|
|
56
56
|
describe '#matching_source?' do
|
@@ -14,9 +14,6 @@ describe Minimart::Mirror::DependencyGraph do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
describe '#add_artifact' do
|
17
|
-
let(:cookbook_dependencies) do
|
18
|
-
subject.find_graph_artifact(cookbook).dependencies.map(&:name)
|
19
|
-
end
|
20
17
|
|
21
18
|
before(:each) do
|
22
19
|
subject.add_artifact(cookbook)
|
@@ -26,8 +23,12 @@ describe Minimart::Mirror::DependencyGraph do
|
|
26
23
|
expect(subject.source_cookbook_added?(cookbook.name, cookbook.version)).to eq true
|
27
24
|
end
|
28
25
|
|
29
|
-
it 'should
|
30
|
-
expect(
|
26
|
+
it 'should not have any dependencies' do
|
27
|
+
expect(subject.find_graph_artifact(cookbook).dependencies).to eq []
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should not add any possible dependencies to the graph' do
|
31
|
+
expect(subject.find_graph_artifact(cookbook).dependencies.map(&:name)).to_not include 'yum'
|
31
32
|
end
|
32
33
|
|
33
34
|
context 'when the cookbook has already been added' do
|
@@ -43,12 +44,9 @@ describe Minimart::Mirror::DependencyGraph do
|
|
43
44
|
end
|
44
45
|
|
45
46
|
it 'should not add any new dependencies' do
|
46
|
-
expect(
|
47
|
+
expect(subject.find_graph_artifact(cookbook).dependencies.map(&:name)).to_not include 'apt'
|
47
48
|
end
|
48
49
|
|
49
|
-
it 'should leave existing dependencies in place' do
|
50
|
-
expect(cookbook_dependencies).to include 'yum'
|
51
|
-
end
|
52
50
|
end
|
53
51
|
end
|
54
52
|
|
@@ -93,16 +91,16 @@ describe Minimart::Mirror::DependencyGraph do
|
|
93
91
|
subject.add_requirement('mysql' => '= 1.0.0')
|
94
92
|
end
|
95
93
|
|
96
|
-
it 'should return a resolved mysql version' do
|
94
|
+
it 'should not return a resolved mysql version' do
|
97
95
|
expect(subject.resolved_requirements).to include ['mysql', '1.0.0']
|
98
96
|
end
|
99
97
|
|
100
|
-
it 'should return a resolved apt version' do
|
98
|
+
it 'should not return a resolved apt version' do
|
101
99
|
expect(subject.resolved_requirements).to include ['apt', '2.0.0']
|
102
100
|
end
|
103
101
|
|
104
|
-
it 'should return a resolved yum version for the mysql dependency' do
|
105
|
-
expect(subject.resolved_requirements).
|
102
|
+
it 'should not return a resolved yum version for the mysql dependency' do
|
103
|
+
expect(subject.resolved_requirements).to_not include ['yum', '5.0.0']
|
106
104
|
end
|
107
105
|
end
|
108
106
|
|
@@ -113,10 +111,10 @@ describe Minimart::Mirror::DependencyGraph do
|
|
113
111
|
subject.add_requirement('mysql' => '= 1.0.0')
|
114
112
|
end
|
115
113
|
|
116
|
-
it 'should raise an error' do
|
114
|
+
it 'should not raise an error' do
|
117
115
|
expect {
|
118
116
|
subject.resolved_requirements
|
119
|
-
}.
|
117
|
+
}.to_not raise_error
|
120
118
|
end
|
121
119
|
end
|
122
120
|
end
|
@@ -21,26 +21,31 @@ describe Minimart::Mirror::InventoryBuilder do
|
|
21
21
|
VCR.use_cassette('location_specific_cookbooks') { e.call }
|
22
22
|
end
|
23
23
|
|
24
|
+
# broken
|
24
25
|
it 'should add the cookbook to the graph' do
|
25
26
|
subject.build!
|
26
27
|
expect(subject.graph.source_cookbook_added?('sample_cookbook', '1.2.3')).to eq true
|
27
28
|
end
|
28
29
|
|
30
|
+
# broken
|
29
31
|
it 'should add the cookbook to the local store' do
|
30
32
|
subject.build!
|
31
33
|
expect(subject.local_store.installed?('sample_cookbook', '1.2.3')).to eq true
|
32
34
|
end
|
33
35
|
|
34
|
-
|
36
|
+
# broken
|
37
|
+
it 'should not add any dependencies of the cookbook to the local store' do
|
35
38
|
subject.build!
|
36
|
-
expect(subject.local_store.installed?('yum', '3.5.1')).to eq
|
39
|
+
expect(subject.local_store.installed?('yum', '3.5.1')).to eq false
|
37
40
|
end
|
38
41
|
|
42
|
+
# broken
|
39
43
|
it 'should clear the git cache' do
|
40
44
|
expect_any_instance_of(Minimart::Download::GitCache).to receive :clear
|
41
45
|
subject.build!
|
42
46
|
end
|
43
47
|
|
48
|
+
# broken
|
44
49
|
it 'should store metadata about downloading the cookbook' do
|
45
50
|
subject.build!
|
46
51
|
metadata = JSON.parse(File.open(File.join(test_directory, 'sample_cookbook-1.2.3', '.minimart.json')).read)
|
@@ -61,6 +66,7 @@ describe Minimart::Mirror::InventoryBuilder do
|
|
61
66
|
'commitish' => 'SHA')
|
62
67
|
end
|
63
68
|
|
69
|
+
# broken
|
64
70
|
it 'should raise an error' do
|
65
71
|
expect {
|
66
72
|
subject.build!
|
@@ -88,9 +94,9 @@ describe Minimart::Mirror::InventoryBuilder do
|
|
88
94
|
expect(subject.local_store.installed?('sample_cookbook', '1.2.3')).to eq true
|
89
95
|
end
|
90
96
|
|
91
|
-
it 'should add any dependencies of the cookbook to the local store' do
|
97
|
+
it 'should not add any dependencies of the cookbook to the local store' do
|
92
98
|
subject.build!
|
93
|
-
expect(subject.local_store.installed?('yum', '3.5.1')).to eq
|
99
|
+
expect(subject.local_store.installed?('yum', '3.5.1')).to eq false
|
94
100
|
end
|
95
101
|
|
96
102
|
it 'should store metadata about downloading the cookbook' do
|
@@ -142,16 +148,16 @@ describe Minimart::Mirror::InventoryBuilder do
|
|
142
148
|
expect(Dir.exists?(File.join(test_directory, 'mysql-5.5.4'))).to eq true
|
143
149
|
end
|
144
150
|
|
145
|
-
it 'should add any resolved dependencies to the local store' do
|
151
|
+
it 'should not add any resolved dependencies to the local store' do
|
146
152
|
subject.build!
|
147
|
-
expect(subject.local_store.installed?('yum', '3.5.1')).to eq
|
148
|
-
expect(subject.local_store.installed?('yum-mysql-community', '0.1.10')).to eq
|
153
|
+
expect(subject.local_store.installed?('yum', '3.5.1')).to eq false
|
154
|
+
expect(subject.local_store.installed?('yum-mysql-community', '0.1.10')).to eq false
|
149
155
|
end
|
150
156
|
|
151
|
-
it 'should actually add the dependent cookbooks to the local inventory' do
|
157
|
+
it 'should actually not add the dependent cookbooks to the local inventory' do
|
152
158
|
subject.build!
|
153
|
-
expect(Dir.exists?(File.join(test_directory, 'yum-3.5.1'))).to eq
|
154
|
-
expect(Dir.exists?(File.join(test_directory, 'yum-mysql-community-0.1.10'))).to eq
|
159
|
+
expect(Dir.exists?(File.join(test_directory, 'yum-3.5.1'))).to eq false
|
160
|
+
expect(Dir.exists?(File.join(test_directory, 'yum-mysql-community-0.1.10'))).to eq false
|
155
161
|
end
|
156
162
|
|
157
163
|
it 'should store metadata about downloading the cookbook' do
|
@@ -159,7 +165,7 @@ describe Minimart::Mirror::InventoryBuilder do
|
|
159
165
|
metadata = JSON.parse(File.open(File.join(test_directory, 'mysql-5.5.4', '.minimart.json')).read)
|
160
166
|
expect(metadata).to include(
|
161
167
|
'source_type' => 'opscode',
|
162
|
-
'location' => 'https://supermarket.chef.io/api/v1')
|
168
|
+
'location' => 'https://supermarket.chef.io:443/api/v1')
|
163
169
|
end
|
164
170
|
|
165
171
|
context 'when a cookbook has already been installed' do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minimart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
- Durfee
|
7
|
+
- MadGlory
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2015-
|
11
|
+
date: 2015-12-09 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: git
|
@@ -17,14 +16,14 @@ dependencies:
|
|
17
16
|
requirements:
|
18
17
|
- - ~>
|
19
18
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
19
|
+
version: 1.2.6
|
21
20
|
type: :runtime
|
22
21
|
prerelease: false
|
23
22
|
version_requirements: !ruby/object:Gem::Requirement
|
24
23
|
requirements:
|
25
24
|
- - ~>
|
26
25
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
26
|
+
version: 1.2.6
|
28
27
|
- !ruby/object:Gem::Dependency
|
29
28
|
name: minitar
|
30
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -207,15 +206,29 @@ dependencies:
|
|
207
206
|
- - ~>
|
208
207
|
- !ruby/object:Gem::Version
|
209
208
|
version: '2.9'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: dotenv
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ! '>='
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ! '>='
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
210
223
|
description: MiniMart is a RubyGem that makes it simple to build a repository of Chef
|
211
224
|
cookbooks using only static files.
|
212
|
-
email:
|
213
|
-
- minimart@cobzilla.com
|
225
|
+
email:
|
214
226
|
executables:
|
215
227
|
- minimart
|
216
228
|
extensions: []
|
217
229
|
extra_rdoc_files: []
|
218
230
|
files:
|
231
|
+
- .env.test
|
219
232
|
- .gitignore
|
220
233
|
- .rspec
|
221
234
|
- .travis.yml
|