r10k 3.14.1 → 3.15.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/docker.yml +5 -0
- data/.github/workflows/rspec_tests.yml +1 -0
- data/CHANGELOG.mkd +19 -0
- data/CODEOWNERS +2 -2
- data/README.mkd +2 -2
- data/doc/dynamic-environments/configuration.mkd +78 -11
- data/doc/dynamic-environments/usage.mkd +4 -0
- data/doc/dynamic-environments/workflow-guide.mkd +3 -3
- data/doc/faq.mkd +1 -1
- data/docker/Makefile +17 -10
- data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +1 -1
- data/integration/tests/git_source/git_source_repeated_remote.rb +2 -2
- data/integration/tests/purging/content_not_purged_at_root.rb +2 -2
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +1 -1
- data/lib/r10k/environment/with_modules.rb +24 -1
- data/lib/r10k/git/rugged/thin_repository.rb +7 -0
- data/lib/r10k/git/rugged/working_repository.rb +7 -3
- data/lib/r10k/git/shellgit/thin_repository.rb +4 -0
- data/lib/r10k/git/shellgit/working_repository.rb +3 -2
- data/lib/r10k/git/stateful_repository.rb +4 -4
- data/lib/r10k/module/git.rb +1 -1
- data/lib/r10k/module_loader/puppetfile.rb +8 -5
- data/lib/r10k/settings/container.rb +1 -0
- data/lib/r10k/version.rb +1 -1
- data/r10k.gemspec +5 -7
- metadata +16 -154
- data/.travis.yml +0 -42
- data/spec/fixtures/empty/.empty +0 -0
- data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
- data/spec/fixtures/module/forge/bad_module/metadata.json +0 -1
- data/spec/fixtures/module/forge/eight_hundred/Modulefile +0 -8
- data/spec/fixtures/module/forge/eight_hundred/metadata.json +0 -19
- data/spec/fixtures/tarball/tarball.tar.gz +0 -0
- data/spec/fixtures/unit/action/r10k.yaml +0 -5
- data/spec/fixtures/unit/action/r10k_cachedir.yaml +0 -2
- data/spec/fixtures/unit/action/r10k_creds.yaml +0 -9
- data/spec/fixtures/unit/action/r10k_forge_auth.yaml +0 -4
- data/spec/fixtures/unit/action/r10k_forge_auth_no_url.yaml +0 -3
- data/spec/fixtures/unit/action/r10k_generate_types.yaml +0 -3
- data/spec/fixtures/unit/action/r10k_logging.yaml +0 -12
- data/spec/fixtures/unit/action/r10k_puppet_path.yaml +0 -3
- data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +0 -5
- data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +0 -10
- data/spec/fixtures/unit/puppetfile/forge-override/Puppetfile +0 -8
- data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile +0 -10
- data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile.new +0 -10
- data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/managed_symlink_file +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_allowlisted_2/ignored_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/unmanaged_symlink_dir +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_symlink_dir +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_symlink_file +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_two/.hidden/unmanaged_3 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
- data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +0 -3
- data/spec/integration/git/rugged/bare_repository_spec.rb +0 -13
- data/spec/integration/git/rugged/cache_spec.rb +0 -33
- data/spec/integration/git/rugged/thin_repository_spec.rb +0 -14
- data/spec/integration/git/rugged/working_repository_spec.rb +0 -48
- data/spec/integration/git/shellgit/bare_repository_spec.rb +0 -13
- data/spec/integration/git/shellgit/thin_repository_spec.rb +0 -14
- data/spec/integration/git/shellgit/working_repository_spec.rb +0 -13
- data/spec/integration/git/stateful_repository_spec.rb +0 -159
- data/spec/integration/util/purageable_spec.rb +0 -41
- data/spec/matchers/exit_with.rb +0 -28
- data/spec/matchers/match_realpath.rb +0 -18
- data/spec/r10k-mocks/mock_config.rb +0 -33
- data/spec/r10k-mocks/mock_env.rb +0 -18
- data/spec/r10k-mocks/mock_source.rb +0 -17
- data/spec/r10k-mocks.rb +0 -3
- data/spec/shared-contexts/git-fixtures.rb +0 -55
- data/spec/shared-contexts/tarball.rb +0 -32
- data/spec/shared-examples/deploy-actions.rb +0 -69
- data/spec/shared-examples/git/bare_repository.rb +0 -132
- data/spec/shared-examples/git/thin_repository.rb +0 -26
- data/spec/shared-examples/git/working_repository.rb +0 -207
- data/spec/shared-examples/git-repository.rb +0 -38
- data/spec/shared-examples/puppetfile-action.rb +0 -39
- data/spec/shared-examples/settings/ancestry.rb +0 -44
- data/spec/shared-examples/subprocess-runner.rb +0 -89
- data/spec/spec_helper.rb +0 -41
- data/spec/unit/action/cri_runner_spec.rb +0 -72
- data/spec/unit/action/deploy/deploy_helpers_spec.rb +0 -38
- data/spec/unit/action/deploy/display_spec.rb +0 -61
- data/spec/unit/action/deploy/environment_spec.rb +0 -640
- data/spec/unit/action/deploy/module_spec.rb +0 -476
- data/spec/unit/action/puppetfile/check_spec.rb +0 -53
- data/spec/unit/action/puppetfile/cri_runner_spec.rb +0 -47
- data/spec/unit/action/puppetfile/install_spec.rb +0 -112
- data/spec/unit/action/puppetfile/purge_spec.rb +0 -60
- data/spec/unit/action/runner_spec.rb +0 -407
- data/spec/unit/action/visitor_spec.rb +0 -39
- data/spec/unit/cli_spec.rb +0 -9
- data/spec/unit/deployment/config_spec.rb +0 -33
- data/spec/unit/deployment_spec.rb +0 -162
- data/spec/unit/environment/bare_spec.rb +0 -13
- data/spec/unit/environment/base_spec.rb +0 -122
- data/spec/unit/environment/git_spec.rb +0 -114
- data/spec/unit/environment/name_spec.rb +0 -181
- data/spec/unit/environment/plain_spec.rb +0 -8
- data/spec/unit/environment/svn_spec.rb +0 -146
- data/spec/unit/environment/tarball_spec.rb +0 -45
- data/spec/unit/environment/with_modules_spec.rb +0 -75
- data/spec/unit/errors/formatting_spec.rb +0 -84
- data/spec/unit/feature_spec.rb +0 -50
- data/spec/unit/forge/module_release_spec.rb +0 -213
- data/spec/unit/git/alternates_spec.rb +0 -116
- data/spec/unit/git/cache_spec.rb +0 -66
- data/spec/unit/git/rugged/cache_spec.rb +0 -48
- data/spec/unit/git/rugged/credentials_spec.rb +0 -215
- data/spec/unit/git/shellgit/cache_spec.rb +0 -27
- data/spec/unit/git/stateful_repository_spec.rb +0 -45
- data/spec/unit/git_spec.rb +0 -102
- data/spec/unit/initializers_spec.rb +0 -68
- data/spec/unit/instance_cache_spec.rb +0 -78
- data/spec/unit/keyed_factory_spec.rb +0 -51
- data/spec/unit/logging/terminaloutputter_spec.rb +0 -53
- data/spec/unit/logging_spec.rb +0 -68
- data/spec/unit/module/base_spec.rb +0 -118
- data/spec/unit/module/forge_spec.rb +0 -271
- data/spec/unit/module/git_spec.rb +0 -387
- data/spec/unit/module/metadata_file_spec.rb +0 -68
- data/spec/unit/module/svn_spec.rb +0 -208
- data/spec/unit/module/tarball_spec.rb +0 -70
- data/spec/unit/module_loader/puppetfile_spec.rb +0 -421
- data/spec/unit/module_spec.rb +0 -114
- data/spec/unit/puppetfile_spec.rb +0 -304
- data/spec/unit/settings/collection_spec.rb +0 -123
- data/spec/unit/settings/container_spec.rb +0 -92
- data/spec/unit/settings/definition_spec.rb +0 -79
- data/spec/unit/settings/enum_definition_spec.rb +0 -20
- data/spec/unit/settings/inheritance_spec.rb +0 -38
- data/spec/unit/settings/list_spec.rb +0 -88
- data/spec/unit/settings/loader_spec.rb +0 -110
- data/spec/unit/settings/uri_definition_spec.rb +0 -23
- data/spec/unit/settings_spec.rb +0 -303
- data/spec/unit/source/base_spec.rb +0 -31
- data/spec/unit/source/exec_spec.rb +0 -81
- data/spec/unit/source/git_spec.rb +0 -233
- data/spec/unit/source/hash_spec.rb +0 -54
- data/spec/unit/source/svn_spec.rb +0 -196
- data/spec/unit/source/yaml_spec.rb +0 -42
- data/spec/unit/source_spec.rb +0 -10
- data/spec/unit/svn/remote_spec.rb +0 -21
- data/spec/unit/svn/working_dir_spec.rb +0 -56
- data/spec/unit/tarball_spec.rb +0 -57
- data/spec/unit/util/attempt_spec.rb +0 -82
- data/spec/unit/util/cacheable_spec.rb +0 -23
- data/spec/unit/util/commands_spec.rb +0 -61
- data/spec/unit/util/downloader_spec.rb +0 -98
- data/spec/unit/util/exec_env_spec.rb +0 -56
- data/spec/unit/util/purgeable_spec.rb +0 -267
- data/spec/unit/util/setopts_spec.rb +0 -83
- data/spec/unit/util/subprocess/result_spec.rb +0 -36
- data/spec/unit/util/subprocess/runner/posix_spec.rb +0 -7
- data/spec/unit/util/subprocess/runner/pump_spec.rb +0 -79
- data/spec/unit/util/subprocess/runner/windows_spec.rb +0 -7
- data/spec/unit/util/subprocess/subprocess_error_spec.rb +0 -26
- data/spec/unit/util/subprocess_spec.rb +0 -65
- data/spec/unit/util/symbolize_keys_spec.rb +0 -67
@@ -1,233 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/source'
|
3
|
-
|
4
|
-
describe R10K::Source::Git do
|
5
|
-
|
6
|
-
subject do
|
7
|
-
described_class.new('mysource', '/some/nonexistent/dir',
|
8
|
-
{:remote => 'https://git-server/repo.git'})
|
9
|
-
end
|
10
|
-
|
11
|
-
it "stores the name" do
|
12
|
-
expect(subject.name).to eq 'mysource'
|
13
|
-
end
|
14
|
-
|
15
|
-
it "stores the basedir" do
|
16
|
-
expect(subject.basedir).to eq '/some/nonexistent/dir'
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "preloading" do
|
20
|
-
it "fetches the git cache" do
|
21
|
-
expect(subject.cache).to receive(:sync)
|
22
|
-
subject.preload!
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "lazily generating environments" do
|
27
|
-
it "returns an empty list of environments when the cache has not been created" do
|
28
|
-
allow(subject.cache).to receive(:cached?).and_return false
|
29
|
-
expect(subject.environments).to be_empty
|
30
|
-
end
|
31
|
-
|
32
|
-
it "generates environments when the cache is present and environments have not been loaded" do
|
33
|
-
allow(subject.cache).to receive(:cached?).and_return true
|
34
|
-
allow(subject).to receive(:generate_environments).and_return %w[hi]
|
35
|
-
expect(subject.environments.size).to eq(1)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "doesn't recreate environments if they have already been loaded" do
|
39
|
-
allow(subject.cache).to receive(:cached?).and_return true
|
40
|
-
allow(subject).to receive(:generate_environments).once.and_return %w[hi]
|
41
|
-
expect(subject.environments.size).to eq(1)
|
42
|
-
expect(subject.environments.size).to eq(1)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
describe "eagerly generating environments" do
|
47
|
-
before do
|
48
|
-
allow(subject.cache).to receive(:branches).and_return %w[master]
|
49
|
-
end
|
50
|
-
|
51
|
-
let(:master_env) { subject.generate_environments.first }
|
52
|
-
|
53
|
-
it "creates an environment for each branch" do
|
54
|
-
expect(subject.generate_environments.size).to eq(1)
|
55
|
-
end
|
56
|
-
|
57
|
-
it "copies the source remote to the environment" do
|
58
|
-
expect(master_env.remote).to eq subject.remote
|
59
|
-
end
|
60
|
-
|
61
|
-
it "uses the branch name as the directory by default" do
|
62
|
-
expect(master_env.dirname).to eq 'master'
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe "generate_environments respects ignore_branch_prefixes setting" do
|
67
|
-
before do
|
68
|
-
allow(subject.cache).to receive(:branches).and_return ['master', 'development', 'production', 'not_dev_test_me', 'dev_test', 'dev', 'test_2']
|
69
|
-
subject.instance_variable_set(:@ignore_branch_prefixes, ['dev', 'test'])
|
70
|
-
end
|
71
|
-
|
72
|
-
let(:environments) { subject.generate_environments }
|
73
|
-
|
74
|
-
it "creates an environment for each branch not in ignore_branch_prefixes" do
|
75
|
-
expect(subject.generate_environments.size).to eq(3)
|
76
|
-
end
|
77
|
-
|
78
|
-
it "copies the source remote to the environment" do
|
79
|
-
expect(environments[0].remote).to eq subject.remote
|
80
|
-
expect(environments[1].remote).to eq subject.remote
|
81
|
-
expect(environments[2].remote).to eq subject.remote
|
82
|
-
end
|
83
|
-
|
84
|
-
it "uses the branch name as the directory by default" do
|
85
|
-
expect(environments[0].dirname).to eq 'master'
|
86
|
-
expect(environments[1].dirname).to eq 'production'
|
87
|
-
expect(environments[2].dirname).to eq 'not_dev_test_me'
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe "filtering branches with ignore prefixes" do
|
92
|
-
let(:branches) { ['master', 'development', 'production', 'not_dev_test_me', 'dev_test', 'dev', 'test_2'] }
|
93
|
-
let(:ignore_prefixes) { ['dev', 'test'] }
|
94
|
-
|
95
|
-
it "filters branches" do
|
96
|
-
expect(subject.filter_branches_by_regexp(branches, ignore_prefixes)).to eq(['master', 'production', 'not_dev_test_me'])
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe "filtering branches with command" do
|
101
|
-
let(:branches) { ['master', 'development', 'production'] }
|
102
|
-
if R10K::Util::Platform.windows?
|
103
|
-
let(:filter_command) { 'powershell.exe if ($env:R10K_BRANCH.equals(\"development\")) {exit 1} else {exit 0}' }
|
104
|
-
else
|
105
|
-
let(:filter_command) { 'sh -c "[ $R10K_BRANCH != development ]"' }
|
106
|
-
end
|
107
|
-
|
108
|
-
it "filters branches" do
|
109
|
-
expect(subject.filter_branches_by_command(branches, filter_command)).to eq(['master', 'production'])
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
describe "generate_environments respects filter_command setting" do
|
114
|
-
before do
|
115
|
-
allow(subject.cache).to receive(:branches).and_return ['master', 'development', 'production']
|
116
|
-
if R10K::Util::Platform.windows?
|
117
|
-
subject.instance_variable_set(:@filter_command, 'powershell.exe if ($env:R10K_BRANCH.equals(\"master\")) {exit 1} else {exit 0}')
|
118
|
-
else
|
119
|
-
subject.instance_variable_set(:@filter_command, '[ $R10K_BRANCH != master ]')
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
let(:environments) { subject.generate_environments }
|
124
|
-
|
125
|
-
it "creates an environment for each branch not filtered by filter_command" do
|
126
|
-
expect(subject.generate_environments.size).to eq(2)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
describe "generate_environments respects filter_command setting and name" do
|
131
|
-
before do
|
132
|
-
allow(subject.cache).to receive(:branches).and_return ['master', 'development', 'production']
|
133
|
-
if R10K::Util::Platform.windows?
|
134
|
-
subject.instance_variable_set(:@filter_command, 'powershell.exe if ($env:R10K_NAME.equals(\"mysource\")) {exit 0} else {exit 1}')
|
135
|
-
else
|
136
|
-
subject.instance_variable_set(:@filter_command, '[ $R10K_NAME = mysource ]')
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
let(:environments) { subject.generate_environments }
|
141
|
-
|
142
|
-
it "creates an environment for each branch not filtered by filter_command" do
|
143
|
-
expect(subject.generate_environments.size).to eq(3)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
end
|
148
|
-
|
149
|
-
describe R10K::Source::Git, "handling invalid branch names" do
|
150
|
-
%w[correct_and_warn correct].each do |setting|
|
151
|
-
describe "when invalid is #{setting}" do
|
152
|
-
subject do
|
153
|
-
described_class.new('/some/nonexistent/dir', 'mysource', {
|
154
|
-
:remote => 'https://git-server/repo.git',
|
155
|
-
:invalid_branches => setting
|
156
|
-
})
|
157
|
-
end
|
158
|
-
|
159
|
-
before do
|
160
|
-
allow(subject.cache).to receive(:branches).and_return ['master', 'invalid-branch']
|
161
|
-
end
|
162
|
-
|
163
|
-
it "creates an environment for each branch" do
|
164
|
-
expect(subject.generate_environments.size).to eq(2)
|
165
|
-
end
|
166
|
-
|
167
|
-
it "removes invalid characters from branch names" do
|
168
|
-
invalid_env = subject.generate_environments.last
|
169
|
-
expect(invalid_env.dirname).to eq 'invalid_branch'
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
describe "when invalid is 'error'" do
|
175
|
-
subject do
|
176
|
-
described_class.new('/some/nonexistent/dir', 'mysource', {
|
177
|
-
:remote => 'https://git-server/repo.git',
|
178
|
-
:invalid_branches => 'error',
|
179
|
-
})
|
180
|
-
end
|
181
|
-
|
182
|
-
before do
|
183
|
-
allow(subject.cache).to receive(:branches).and_return ['master', 'invalid-branch']
|
184
|
-
end
|
185
|
-
|
186
|
-
it "only creates an environment for valid branches" do
|
187
|
-
expect(subject.generate_environments.size).to eq(1)
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
# Since prefixing is an immutable property of a source, it's easier to create
|
193
|
-
# a new context and duplicate stubs in a single location rather than packing a
|
194
|
-
# single test with all the stubs that entirely recreate the source.
|
195
|
-
describe R10K::Source::Git, 'when prefixing is enabled' do
|
196
|
-
subject do
|
197
|
-
described_class.new(
|
198
|
-
'prefixed',
|
199
|
-
'/some/nonexistent/dir',
|
200
|
-
{
|
201
|
-
:prefix => true,
|
202
|
-
:remote => 'https://git-server/repo.git',
|
203
|
-
})
|
204
|
-
end
|
205
|
-
|
206
|
-
describe "generating prefixed environments" do
|
207
|
-
before do
|
208
|
-
allow(subject.cache).to receive(:cached?).and_return true
|
209
|
-
allow(subject.cache).to receive(:branches).and_return %w[master other]
|
210
|
-
end
|
211
|
-
|
212
|
-
let(:environments) { subject.environments }
|
213
|
-
|
214
|
-
it "creates an environment for each branch" do
|
215
|
-
expect(subject.environments.size).to eq(2)
|
216
|
-
end
|
217
|
-
|
218
|
-
it "prefixes the source name to environments when prefixing is enabled" do
|
219
|
-
expect(environments[0].dirname).to eq 'prefixed_master'
|
220
|
-
expect(environments[1].dirname).to eq 'prefixed_other'
|
221
|
-
end
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
describe R10K::Source::Git, 'registering as a source' do
|
226
|
-
it "registers with the :git key" do
|
227
|
-
expect(R10K::Source.retrieve(:git)).to eq described_class
|
228
|
-
end
|
229
|
-
|
230
|
-
it "registers with the nil key" do
|
231
|
-
expect(R10K::Source.retrieve(nil)).to eq described_class
|
232
|
-
end
|
233
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/source'
|
3
|
-
|
4
|
-
describe R10K::Source::Hash do
|
5
|
-
|
6
|
-
describe '.valid_environments_hash?' do
|
7
|
-
it "rejects strings" do
|
8
|
-
expect(R10K::Source::Hash.valid_environments_hash?('200 OK'))
|
9
|
-
.to eq false
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:environments_hash) do
|
14
|
-
{
|
15
|
-
'production' => {
|
16
|
-
'remote' => 'https://git.example.com/puppet/control-repo.git',
|
17
|
-
'ref' => 'release-141',
|
18
|
-
'modules' => {
|
19
|
-
'puppetlabs-stdlib' => '6.1.0',
|
20
|
-
'puppetlabs-ntp' => '8.1.0',
|
21
|
-
'example-myapp1' => {
|
22
|
-
'git' => 'https://git.example.com/puppet/example-myapp1.git',
|
23
|
-
'ref' => 'v1.3.0'
|
24
|
-
}
|
25
|
-
}
|
26
|
-
},
|
27
|
-
'development' => {
|
28
|
-
'remote' => 'https://git.example.com/puppet/control-repo.git',
|
29
|
-
'ref' => 'master',
|
30
|
-
'modules' => {
|
31
|
-
'puppetlabs-stdlib' => '6.1.0',
|
32
|
-
'puppetlabs-ntp' => '8.1.0',
|
33
|
-
'example-myapp1' => {
|
34
|
-
'git' => 'https://git.example.com/puppet/example-myapp1.git',
|
35
|
-
'ref' => 'v1.3.1'
|
36
|
-
}
|
37
|
-
}
|
38
|
-
}
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "with a prefix" do
|
43
|
-
subject do
|
44
|
-
described_class.new('hashsource', '/some/nonexistent/dir',
|
45
|
-
prefix: 'prefixed', environments: environments_hash)
|
46
|
-
end
|
47
|
-
|
48
|
-
it "prepends environment names with a prefix" do
|
49
|
-
environments = subject.environments
|
50
|
-
expect(environments[0].dirname).to eq 'prefixed_production'
|
51
|
-
expect(environments[1].dirname).to eq 'prefixed_development'
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,196 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/source'
|
3
|
-
|
4
|
-
describe R10K::Source::SVN do
|
5
|
-
|
6
|
-
subject do
|
7
|
-
described_class.new('mysource', '/some/nonexistent/dir',
|
8
|
-
{:remote => 'https://svn-server.site/repo'})
|
9
|
-
end
|
10
|
-
|
11
|
-
it "stores the name" do
|
12
|
-
expect(subject.name).to eq 'mysource'
|
13
|
-
end
|
14
|
-
|
15
|
-
it "stores the basedir" do
|
16
|
-
expect(subject.basedir).to eq '/some/nonexistent/dir'
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
describe "lazily generating environments" do
|
21
|
-
it "generates environments when they have not been loaded" do
|
22
|
-
expect(subject).to receive(:generate_environments).and_return %w[hi]
|
23
|
-
expect(subject.environments).to eq %w[hi]
|
24
|
-
end
|
25
|
-
|
26
|
-
it "doesn't recreate environments if they have already been loaded" do
|
27
|
-
expect(subject).to receive(:generate_environments).once.and_return %w[hi]
|
28
|
-
subject.environments
|
29
|
-
subject.environments
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "eagerly generating environments" do
|
34
|
-
before do
|
35
|
-
allow(subject.svn_remote).to receive(:branches).and_return %w[apache dns robobutler]
|
36
|
-
end
|
37
|
-
|
38
|
-
let(:environments) { subject.generate_environments }
|
39
|
-
|
40
|
-
it "creates an environment for each branch and the trunk" do
|
41
|
-
expect(environments[0].name).to eq 'production'
|
42
|
-
expect(environments[1].name).to eq 'apache'
|
43
|
-
expect(environments[2].name).to eq 'dns'
|
44
|
-
expect(environments[3].name).to eq 'robobutler'
|
45
|
-
end
|
46
|
-
|
47
|
-
it "maps trunk to production" do
|
48
|
-
expect(environments[0].remote).to eq 'https://svn-server.site/repo/trunk'
|
49
|
-
end
|
50
|
-
|
51
|
-
it "sets the remote for branch environments to subdirectories of the branches/ directory" do
|
52
|
-
expect(environments[1].remote).to eq 'https://svn-server.site/repo/branches/apache'
|
53
|
-
expect(environments[2].remote).to eq 'https://svn-server.site/repo/branches/dns'
|
54
|
-
expect(environments[3].remote).to eq 'https://svn-server.site/repo/branches/robobutler'
|
55
|
-
end
|
56
|
-
|
57
|
-
it "uses the branch name as the directory by default" do
|
58
|
-
expect(environments[0].dirname).to eq 'production'
|
59
|
-
expect(environments[1].dirname).to eq 'apache'
|
60
|
-
expect(environments[2].dirname).to eq 'dns'
|
61
|
-
expect(environments[3].dirname).to eq 'robobutler'
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe "generate_environments respects ignore_branch_prefixes setting" do
|
66
|
-
before do
|
67
|
-
allow(subject.svn_remote).to receive(:branches).and_return ['master', 'development', 'not_dev_test_me', 'dev_test', 'dev', 'test_2']
|
68
|
-
subject.instance_variable_set(:@ignore_branch_prefixes, ['dev', 'test'])
|
69
|
-
end
|
70
|
-
|
71
|
-
let(:environments) { subject.generate_environments }
|
72
|
-
|
73
|
-
it "creates an environment for each branch not in ignore_branch_prefixes" do
|
74
|
-
expect(subject.generate_environments.size).to eq(3)
|
75
|
-
end
|
76
|
-
|
77
|
-
it "uses the branch name as the directory by default" do
|
78
|
-
expect(environments[0].name).to eq 'production'
|
79
|
-
expect(environments[1].name).to eq 'master'
|
80
|
-
expect(environments[2].name).to eq 'not_dev_test_me'
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe "filtering branches with ignore prefixes" do
|
85
|
-
let(:branches) { ['master', 'development', 'production', 'not_dev_test_me', 'dev_test', 'dev', 'test_2'] }
|
86
|
-
let(:ignore_prefixes) { ['dev', 'test'] }
|
87
|
-
|
88
|
-
it "filters branches" do
|
89
|
-
expect(subject.filter_branches(branches, ignore_prefixes)).to eq(['master', 'production', 'not_dev_test_me'])
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe R10K::Source::SVN, 'when prefixing is enabled' do
|
95
|
-
subject do
|
96
|
-
described_class.new(
|
97
|
-
'mysource',
|
98
|
-
'/some/nonexistent/dir',
|
99
|
-
{
|
100
|
-
:remote => 'https://svn-server.site/repo',
|
101
|
-
:prefix => true
|
102
|
-
}
|
103
|
-
)
|
104
|
-
end
|
105
|
-
|
106
|
-
describe "generating prefixed environments" do
|
107
|
-
before do
|
108
|
-
allow(subject.svn_remote).to receive(:branches).and_return %w[apache dns robobutler]
|
109
|
-
end
|
110
|
-
|
111
|
-
let(:environments) { subject.generate_environments }
|
112
|
-
|
113
|
-
it "creates an environment for each branch and the trunk" do
|
114
|
-
expect(environments.size).to eq(4)
|
115
|
-
end
|
116
|
-
|
117
|
-
it "prefixes the source name to environments" do
|
118
|
-
expect(environments[0].dirname).to eq 'mysource_production'
|
119
|
-
expect(environments[1].dirname).to eq 'mysource_apache'
|
120
|
-
expect(environments[2].dirname).to eq 'mysource_dns'
|
121
|
-
expect(environments[3].dirname).to eq 'mysource_robobutler'
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
describe R10K::Source::SVN, 'when prefixing is disabled' do
|
127
|
-
subject do
|
128
|
-
described_class.new(
|
129
|
-
'mysource',
|
130
|
-
'/some/nonexistent/dir',
|
131
|
-
{
|
132
|
-
:remote => 'https://svn-server.site/repo',
|
133
|
-
:prefix => false
|
134
|
-
}
|
135
|
-
)
|
136
|
-
end
|
137
|
-
|
138
|
-
describe "generating environments" do
|
139
|
-
before do
|
140
|
-
allow(subject.svn_remote).to receive(:branches).and_return %w[apache dns robobutler]
|
141
|
-
end
|
142
|
-
|
143
|
-
let(:environments) { subject.generate_environments }
|
144
|
-
|
145
|
-
it "creates an environment for each branch and the trunk" do
|
146
|
-
expect(environments.size).to eq(4)
|
147
|
-
end
|
148
|
-
|
149
|
-
it "does not prefix environments" do
|
150
|
-
expect(environments[0].dirname).to eq 'production'
|
151
|
-
expect(environments[1].dirname).to eq 'apache'
|
152
|
-
expect(environments[2].dirname).to eq 'dns'
|
153
|
-
expect(environments[3].dirname).to eq 'robobutler'
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
|
159
|
-
describe R10K::Source::SVN, 'when prefixing is overridden' do
|
160
|
-
subject do
|
161
|
-
described_class.new(
|
162
|
-
'mysource',
|
163
|
-
'/some/nonexistent/dir',
|
164
|
-
{
|
165
|
-
:remote => 'https://svn-server.site/repo',
|
166
|
-
:prefix => "tenant1"
|
167
|
-
}
|
168
|
-
)
|
169
|
-
end
|
170
|
-
|
171
|
-
describe "generating prefixed environments" do
|
172
|
-
before do
|
173
|
-
allow(subject.svn_remote).to receive(:branches).and_return %w[apache dns robobutler]
|
174
|
-
end
|
175
|
-
|
176
|
-
let(:environments) { subject.generate_environments }
|
177
|
-
|
178
|
-
it "creates an environment for each branch and the trunk" do
|
179
|
-
expect(environments.size).to eq(4)
|
180
|
-
end
|
181
|
-
|
182
|
-
it "prefixes the prefix name to environments" do
|
183
|
-
expect(environments[0].dirname).to eq 'tenant1_production'
|
184
|
-
expect(environments[1].dirname).to eq 'tenant1_apache'
|
185
|
-
expect(environments[2].dirname).to eq 'tenant1_dns'
|
186
|
-
expect(environments[3].dirname).to eq 'tenant1_robobutler'
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
|
192
|
-
describe R10K::Source::SVN, 'registering as a source' do
|
193
|
-
it "registers with the :svn key" do
|
194
|
-
expect(R10K::Source.retrieve(:svn)).to eq described_class
|
195
|
-
end
|
196
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/source'
|
3
|
-
|
4
|
-
describe R10K::Source::Yaml do
|
5
|
-
|
6
|
-
let(:environments_hash) do
|
7
|
-
{
|
8
|
-
'production' => {
|
9
|
-
'remote' => 'https://git.example.com/puppet/control-repo.git',
|
10
|
-
'ref' => 'release-141',
|
11
|
-
'modules' => {
|
12
|
-
'puppetlabs-stdlib' => '6.1.0',
|
13
|
-
'puppetlabs-ntp' => '8.1.0',
|
14
|
-
'example-myapp1' => {
|
15
|
-
'git' => 'https://git.example.com/puppet/example-myapp1.git',
|
16
|
-
'ref' => 'v1.3.0'
|
17
|
-
}
|
18
|
-
}
|
19
|
-
},
|
20
|
-
'development' => {
|
21
|
-
'remote' => 'https://git.example.com/puppet/control-repo.git',
|
22
|
-
'ref' => 'master',
|
23
|
-
'modules' => {
|
24
|
-
'puppetlabs-stdlib' => '6.1.0',
|
25
|
-
'puppetlabs-ntp' => '8.1.0',
|
26
|
-
'example-myapp1' => {
|
27
|
-
'git' => 'https://git.example.com/puppet/example-myapp1.git',
|
28
|
-
'ref' => 'v1.3.1'
|
29
|
-
}
|
30
|
-
}
|
31
|
-
}
|
32
|
-
}
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "with valid yaml file" do
|
36
|
-
it "produces environments" do
|
37
|
-
allow(YAML).to receive(:load_file).with('/envs.yaml').and_return(environments_hash)
|
38
|
-
source = described_class.new('yamlsource', '/some/nonexistent/dir', config: '/envs.yaml')
|
39
|
-
expect(source.environments.map(&:name)).to contain_exactly('production', 'development')
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/spec/unit/source_spec.rb
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/source'
|
3
|
-
|
4
|
-
describe R10K::Source do
|
5
|
-
it "implementds methods for a keyed factory" do
|
6
|
-
expect(described_class).to respond_to :register
|
7
|
-
expect(described_class).to respond_to :retrieve
|
8
|
-
expect(described_class).to respond_to :generate
|
9
|
-
end
|
10
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'r10k'
|
2
|
-
require 'r10k/svn'
|
3
|
-
|
4
|
-
describe R10K::SVN::Remote do
|
5
|
-
subject { described_class.new('https://svn-server.site/repo') }
|
6
|
-
|
7
|
-
it "generates the trunk URL by appending '/trunk' to the base URL" do
|
8
|
-
expect(subject.trunk).to eq 'https://svn-server.site/repo/trunk'
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "retrieving branches" do
|
12
|
-
let(:branches) do
|
13
|
-
%[apache/\ndns/\nrobobutler/\nstaging/\n]
|
14
|
-
end
|
15
|
-
|
16
|
-
it "enumerates the /branches directory of the base URL" do
|
17
|
-
allow(subject).to receive(:svn).with(['ls', 'https://svn-server.site/repo/branches']).and_return(branches)
|
18
|
-
expect(subject.branches).to eq(%w[apache dns robobutler staging])
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/svn/working_dir'
|
3
|
-
|
4
|
-
describe R10K::SVN::WorkingDir, "initializing" do
|
5
|
-
let(:pathname) { Pathname.new("/some/imaginary/path") }
|
6
|
-
it "stores the provided path" do
|
7
|
-
subject = described_class.new(pathname)
|
8
|
-
expect(subject.path).to eq Pathname.new("/some/imaginary/path")
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "when auth is provided" do
|
12
|
-
it "raises an error when only the username is provided" do
|
13
|
-
expect {
|
14
|
-
described_class.new(pathname, :username => "root")
|
15
|
-
}.to raise_error(ArgumentError, "Both username and password must be specified")
|
16
|
-
end
|
17
|
-
|
18
|
-
it "raises an error when only the password is provided" do
|
19
|
-
expect {
|
20
|
-
described_class.new(pathname, :password => "hunter2")
|
21
|
-
}.to raise_error(ArgumentError, "Both username and password must be specified")
|
22
|
-
end
|
23
|
-
|
24
|
-
it "does not raise an error when both username and password are provided" do
|
25
|
-
o = described_class.new(pathname, :username => "root", :password => "hunter2")
|
26
|
-
expect(o.username).to eq("root")
|
27
|
-
expect(o.password).to eq("hunter2")
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe R10K::SVN::WorkingDir, "when authentication credentials are given" do
|
33
|
-
let(:pathname) { Pathname.new("/some/imaginary/path") }
|
34
|
-
subject { described_class.new(pathname, :username => "root", :password => "hunter2") }
|
35
|
-
|
36
|
-
def check_args(args)
|
37
|
-
expect(args).to include("--username")
|
38
|
-
expect(args).to include("root")
|
39
|
-
expect(args).to include("--password")
|
40
|
-
expect(args).to include("hunter2")
|
41
|
-
end
|
42
|
-
|
43
|
-
it "invokes 'svn checkout' with the given credentials" do
|
44
|
-
expect(subject).to receive(:svn) do |args, _|
|
45
|
-
check_args(args)
|
46
|
-
end
|
47
|
-
subject.checkout('https://some.svn.url/trunk')
|
48
|
-
end
|
49
|
-
|
50
|
-
it "invokes 'svn update' with the given credentials" do
|
51
|
-
expect(subject).to receive(:svn) do |args, _|
|
52
|
-
check_args(args)
|
53
|
-
end
|
54
|
-
subject.update
|
55
|
-
end
|
56
|
-
end
|
data/spec/unit/tarball_spec.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/tarball'
|
3
|
-
|
4
|
-
describe R10K::Tarball do
|
5
|
-
include_context 'Tarball'
|
6
|
-
|
7
|
-
subject { described_class.new('fixture-tarball', fixture_tarball, checksum: fixture_checksum) }
|
8
|
-
|
9
|
-
describe 'initialization' do
|
10
|
-
it 'initializes' do
|
11
|
-
expect(subject).to be_kind_of(described_class)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe 'downloading and caching' do
|
16
|
-
it 'downloads the source to the cache' do
|
17
|
-
# No cache present initially
|
18
|
-
expect(File.exist?(subject.cache_path)).to be(false)
|
19
|
-
expect(subject.cache_valid?).to be(false)
|
20
|
-
|
21
|
-
subject.get
|
22
|
-
|
23
|
-
expect(subject.cache_valid?).to be(true)
|
24
|
-
expect(File.exist?(subject.cache_path)).to be(true)
|
25
|
-
end
|
26
|
-
|
27
|
-
let(:raw_content) {[
|
28
|
-
'./',
|
29
|
-
'./Puppetfile',
|
30
|
-
'./metadata.json',
|
31
|
-
'./spec/',
|
32
|
-
'./environment.conf',
|
33
|
-
'./spec/1',
|
34
|
-
]}
|
35
|
-
|
36
|
-
let(:clean_content) {[
|
37
|
-
'Puppetfile',
|
38
|
-
'metadata.json',
|
39
|
-
'spec',
|
40
|
-
'environment.conf',
|
41
|
-
'spec/1',
|
42
|
-
]}
|
43
|
-
|
44
|
-
it 'returns clean paths when listing cached tarball content' do
|
45
|
-
iterator = allow(subject).to receive(:each_tarball_entry)
|
46
|
-
raw_content.each { |entry| iterator.and_yield(entry) }
|
47
|
-
|
48
|
-
expect(subject.paths).to eq(clean_content)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe 'http sources'
|
53
|
-
|
54
|
-
describe 'file sources'
|
55
|
-
|
56
|
-
describe 'syncing'
|
57
|
-
end
|