r10k 3.14.1 → 5.0.1

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.
Files changed (246) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +17 -0
  3. data/.github/workflows/docker.yml +9 -4
  4. data/.github/workflows/release.yml +3 -2
  5. data/.github/workflows/rspec_tests.yml +8 -10
  6. data/CHANGELOG.mkd +100 -0
  7. data/CODEOWNERS +1 -2
  8. data/Gemfile +2 -2
  9. data/README.mkd +18 -19
  10. data/doc/common-patterns.mkd +1 -2
  11. data/doc/dynamic-environments/configuration.mkd +91 -12
  12. data/doc/dynamic-environments/usage.mkd +4 -0
  13. data/doc/dynamic-environments/workflow-guide.mkd +3 -3
  14. data/doc/faq.mkd +1 -1
  15. data/doc/puppetfile.mkd +9 -3
  16. data/integration/Gemfile +3 -4
  17. data/integration/Rakefile +58 -23
  18. data/integration/files/pre-suite/git_config.pp.erb +1 -1
  19. data/integration/pre-suite/00_pe_install.rb +3 -0
  20. data/integration/pre-suite/10_git_config.rb +1 -3
  21. data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +5 -4
  22. data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +1 -1
  23. data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +2 -2
  24. data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +2 -2
  25. data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +3 -3
  26. data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +3 -3
  27. data/integration/tests/command_line/deploy_env_without_mod_update.rb +0 -3
  28. data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +0 -3
  29. data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +5 -10
  30. data/integration/tests/git_source/git_source_git.rb +1 -4
  31. data/integration/tests/git_source/git_source_repeated_remote.rb +2 -5
  32. data/integration/tests/git_source/git_source_submodule.rb +1 -1
  33. data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +1 -1
  34. data/integration/tests/purging/content_not_purged_at_root.rb +2 -5
  35. data/integration/tests/purging/default_purging.rb +0 -3
  36. data/integration/tests/purging/{does_not_purge_files_on_white_list.rb → does_not_purge_files_on_allowlist.rb} +2 -5
  37. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +1 -4
  38. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +1 -4
  39. data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +1 -4
  40. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +0 -3
  41. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +1 -1
  42. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +1 -1
  43. data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +1 -1
  44. data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +0 -3
  45. data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +3 -2
  46. data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +1 -5
  47. data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +1 -1
  48. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +1 -4
  49. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +0 -3
  50. data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +1 -1
  51. data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +0 -3
  52. data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +0 -3
  53. data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +1 -4
  54. data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +0 -3
  55. data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +0 -3
  56. data/lib/r10k/action/deploy/environment.rb +2 -19
  57. data/lib/r10k/action/deploy/module.rb +1 -0
  58. data/lib/r10k/action/puppetfile/check.rb +7 -0
  59. data/lib/r10k/action/puppetfile/install.rb +3 -1
  60. data/lib/r10k/cli/deploy.rb +15 -1
  61. data/lib/r10k/cli/puppetfile.rb +1 -0
  62. data/lib/r10k/content_synchronizer.rb +7 -2
  63. data/lib/r10k/environment/with_modules.rb +24 -1
  64. data/lib/r10k/environment.rb +0 -1
  65. data/lib/r10k/git/rugged/bare_repository.rb +5 -4
  66. data/lib/r10k/git/rugged/thin_repository.rb +7 -0
  67. data/lib/r10k/git/rugged/working_repository.rb +13 -7
  68. data/lib/r10k/git/shellgit/thin_repository.rb +5 -1
  69. data/lib/r10k/git/shellgit/working_repository.rb +5 -4
  70. data/lib/r10k/git/stateful_repository.rb +4 -4
  71. data/lib/r10k/module/base.rb +3 -3
  72. data/lib/r10k/module/git.rb +19 -5
  73. data/lib/r10k/module_loader/puppetfile/dsl.rb +4 -0
  74. data/lib/r10k/module_loader/puppetfile.rb +22 -14
  75. data/lib/r10k/puppetfile.rb +1 -1
  76. data/lib/r10k/settings/container.rb +1 -0
  77. data/lib/r10k/settings.rb +6 -7
  78. data/lib/r10k/tarball.rb +1 -1
  79. data/lib/r10k/version.rb +1 -1
  80. data/locales/r10k.pot +34 -82
  81. data/r10k.gemspec +8 -18
  82. metadata +40 -213
  83. data/.github/workflows/stale.yml +0 -21
  84. data/.travis.yml +0 -42
  85. data/docker/.gitignore +0 -1
  86. data/docker/.rspec +0 -4
  87. data/docker/Gemfile +0 -11
  88. data/docker/Makefile +0 -92
  89. data/docker/README.md +0 -28
  90. data/docker/docker-compose.yml +0 -18
  91. data/docker/r10k/Dockerfile +0 -68
  92. data/docker/r10k/adduser.sh +0 -13
  93. data/docker/r10k/docker-entrypoint.d/10-analytics.sh +0 -30
  94. data/docker/r10k/docker-entrypoint.sh +0 -10
  95. data/docker/r10k/release.Dockerfile +0 -55
  96. data/docker/spec/dockerfile_spec.rb +0 -37
  97. data/docker/spec/fixtures/Puppetfile +0 -2
  98. data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +0 -83
  99. data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +0 -128
  100. data/integration/tests/purging/invalid_whitelist_types.rb +0 -63
  101. data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +0 -49
  102. data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +0 -68
  103. data/lib/r10k/environment/bare.rb +0 -13
  104. data/spec/fixtures/empty/.empty +0 -0
  105. data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
  106. data/spec/fixtures/module/forge/bad_module/metadata.json +0 -1
  107. data/spec/fixtures/module/forge/eight_hundred/Modulefile +0 -8
  108. data/spec/fixtures/module/forge/eight_hundred/metadata.json +0 -19
  109. data/spec/fixtures/tarball/tarball.tar.gz +0 -0
  110. data/spec/fixtures/unit/action/r10k.yaml +0 -5
  111. data/spec/fixtures/unit/action/r10k_cachedir.yaml +0 -2
  112. data/spec/fixtures/unit/action/r10k_creds.yaml +0 -9
  113. data/spec/fixtures/unit/action/r10k_forge_auth.yaml +0 -4
  114. data/spec/fixtures/unit/action/r10k_forge_auth_no_url.yaml +0 -3
  115. data/spec/fixtures/unit/action/r10k_generate_types.yaml +0 -3
  116. data/spec/fixtures/unit/action/r10k_logging.yaml +0 -12
  117. data/spec/fixtures/unit/action/r10k_puppet_path.yaml +0 -3
  118. data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +0 -1
  119. data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +0 -5
  120. data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +0 -10
  121. data/spec/fixtures/unit/puppetfile/forge-override/Puppetfile +0 -8
  122. data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +0 -1
  123. data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +0 -1
  124. data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +0 -1
  125. data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +0 -1
  126. data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +0 -1
  127. data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile +0 -10
  128. data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile.new +0 -10
  129. data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
  130. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/managed_symlink_file +0 -1
  131. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_allowlisted_2/ignored_1 +0 -0
  132. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
  133. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
  134. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/unmanaged_symlink_dir +0 -1
  135. data/spec/fixtures/unit/util/purgeable/managed_one/managed_symlink_dir +0 -1
  136. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
  137. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_symlink_file +0 -1
  138. data/spec/fixtures/unit/util/purgeable/managed_two/.hidden/unmanaged_3 +0 -0
  139. data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
  140. data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
  141. data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +0 -3
  142. data/spec/integration/git/rugged/bare_repository_spec.rb +0 -13
  143. data/spec/integration/git/rugged/cache_spec.rb +0 -33
  144. data/spec/integration/git/rugged/thin_repository_spec.rb +0 -14
  145. data/spec/integration/git/rugged/working_repository_spec.rb +0 -48
  146. data/spec/integration/git/shellgit/bare_repository_spec.rb +0 -13
  147. data/spec/integration/git/shellgit/thin_repository_spec.rb +0 -14
  148. data/spec/integration/git/shellgit/working_repository_spec.rb +0 -13
  149. data/spec/integration/git/stateful_repository_spec.rb +0 -159
  150. data/spec/integration/util/purageable_spec.rb +0 -41
  151. data/spec/matchers/exit_with.rb +0 -28
  152. data/spec/matchers/match_realpath.rb +0 -18
  153. data/spec/r10k-mocks/mock_config.rb +0 -33
  154. data/spec/r10k-mocks/mock_env.rb +0 -18
  155. data/spec/r10k-mocks/mock_source.rb +0 -17
  156. data/spec/r10k-mocks.rb +0 -3
  157. data/spec/shared-contexts/git-fixtures.rb +0 -55
  158. data/spec/shared-contexts/tarball.rb +0 -32
  159. data/spec/shared-examples/deploy-actions.rb +0 -69
  160. data/spec/shared-examples/git/bare_repository.rb +0 -132
  161. data/spec/shared-examples/git/thin_repository.rb +0 -26
  162. data/spec/shared-examples/git/working_repository.rb +0 -207
  163. data/spec/shared-examples/git-repository.rb +0 -38
  164. data/spec/shared-examples/puppetfile-action.rb +0 -39
  165. data/spec/shared-examples/settings/ancestry.rb +0 -44
  166. data/spec/shared-examples/subprocess-runner.rb +0 -89
  167. data/spec/spec_helper.rb +0 -41
  168. data/spec/unit/action/cri_runner_spec.rb +0 -72
  169. data/spec/unit/action/deploy/deploy_helpers_spec.rb +0 -38
  170. data/spec/unit/action/deploy/display_spec.rb +0 -61
  171. data/spec/unit/action/deploy/environment_spec.rb +0 -640
  172. data/spec/unit/action/deploy/module_spec.rb +0 -476
  173. data/spec/unit/action/puppetfile/check_spec.rb +0 -53
  174. data/spec/unit/action/puppetfile/cri_runner_spec.rb +0 -47
  175. data/spec/unit/action/puppetfile/install_spec.rb +0 -112
  176. data/spec/unit/action/puppetfile/purge_spec.rb +0 -60
  177. data/spec/unit/action/runner_spec.rb +0 -407
  178. data/spec/unit/action/visitor_spec.rb +0 -39
  179. data/spec/unit/cli_spec.rb +0 -9
  180. data/spec/unit/deployment/config_spec.rb +0 -33
  181. data/spec/unit/deployment_spec.rb +0 -162
  182. data/spec/unit/environment/bare_spec.rb +0 -13
  183. data/spec/unit/environment/base_spec.rb +0 -122
  184. data/spec/unit/environment/git_spec.rb +0 -114
  185. data/spec/unit/environment/name_spec.rb +0 -181
  186. data/spec/unit/environment/plain_spec.rb +0 -8
  187. data/spec/unit/environment/svn_spec.rb +0 -146
  188. data/spec/unit/environment/tarball_spec.rb +0 -45
  189. data/spec/unit/environment/with_modules_spec.rb +0 -75
  190. data/spec/unit/errors/formatting_spec.rb +0 -84
  191. data/spec/unit/feature_spec.rb +0 -50
  192. data/spec/unit/forge/module_release_spec.rb +0 -213
  193. data/spec/unit/git/alternates_spec.rb +0 -116
  194. data/spec/unit/git/cache_spec.rb +0 -66
  195. data/spec/unit/git/rugged/cache_spec.rb +0 -48
  196. data/spec/unit/git/rugged/credentials_spec.rb +0 -215
  197. data/spec/unit/git/shellgit/cache_spec.rb +0 -27
  198. data/spec/unit/git/stateful_repository_spec.rb +0 -45
  199. data/spec/unit/git_spec.rb +0 -102
  200. data/spec/unit/initializers_spec.rb +0 -68
  201. data/spec/unit/instance_cache_spec.rb +0 -78
  202. data/spec/unit/keyed_factory_spec.rb +0 -51
  203. data/spec/unit/logging/terminaloutputter_spec.rb +0 -53
  204. data/spec/unit/logging_spec.rb +0 -68
  205. data/spec/unit/module/base_spec.rb +0 -118
  206. data/spec/unit/module/forge_spec.rb +0 -271
  207. data/spec/unit/module/git_spec.rb +0 -387
  208. data/spec/unit/module/metadata_file_spec.rb +0 -68
  209. data/spec/unit/module/svn_spec.rb +0 -208
  210. data/spec/unit/module/tarball_spec.rb +0 -70
  211. data/spec/unit/module_loader/puppetfile_spec.rb +0 -421
  212. data/spec/unit/module_spec.rb +0 -114
  213. data/spec/unit/puppetfile_spec.rb +0 -304
  214. data/spec/unit/settings/collection_spec.rb +0 -123
  215. data/spec/unit/settings/container_spec.rb +0 -92
  216. data/spec/unit/settings/definition_spec.rb +0 -79
  217. data/spec/unit/settings/enum_definition_spec.rb +0 -20
  218. data/spec/unit/settings/inheritance_spec.rb +0 -38
  219. data/spec/unit/settings/list_spec.rb +0 -88
  220. data/spec/unit/settings/loader_spec.rb +0 -110
  221. data/spec/unit/settings/uri_definition_spec.rb +0 -23
  222. data/spec/unit/settings_spec.rb +0 -303
  223. data/spec/unit/source/base_spec.rb +0 -31
  224. data/spec/unit/source/exec_spec.rb +0 -81
  225. data/spec/unit/source/git_spec.rb +0 -233
  226. data/spec/unit/source/hash_spec.rb +0 -54
  227. data/spec/unit/source/svn_spec.rb +0 -196
  228. data/spec/unit/source/yaml_spec.rb +0 -42
  229. data/spec/unit/source_spec.rb +0 -10
  230. data/spec/unit/svn/remote_spec.rb +0 -21
  231. data/spec/unit/svn/working_dir_spec.rb +0 -56
  232. data/spec/unit/tarball_spec.rb +0 -57
  233. data/spec/unit/util/attempt_spec.rb +0 -82
  234. data/spec/unit/util/cacheable_spec.rb +0 -23
  235. data/spec/unit/util/commands_spec.rb +0 -61
  236. data/spec/unit/util/downloader_spec.rb +0 -98
  237. data/spec/unit/util/exec_env_spec.rb +0 -56
  238. data/spec/unit/util/purgeable_spec.rb +0 -267
  239. data/spec/unit/util/setopts_spec.rb +0 -83
  240. data/spec/unit/util/subprocess/result_spec.rb +0 -36
  241. data/spec/unit/util/subprocess/runner/posix_spec.rb +0 -7
  242. data/spec/unit/util/subprocess/runner/pump_spec.rb +0 -79
  243. data/spec/unit/util/subprocess/runner/windows_spec.rb +0 -7
  244. data/spec/unit/util/subprocess/subprocess_error_spec.rb +0 -26
  245. data/spec/unit/util/subprocess_spec.rb +0 -65
  246. 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
@@ -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
@@ -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