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,5 +0,0 @@
1
- ---
2
- cachedir: /config_cachedir
3
- deploy:
4
- generate_types: /config_generate_types
5
- puppet_path: /config_puppet_path
@@ -1,2 +0,0 @@
1
- ---
2
- cachedir: /config_cachedir
@@ -1,9 +0,0 @@
1
- ---
2
- git:
3
- private_key: '/global/config/private/key'
4
- oauth_token: '/global/config/oauth/token'
5
- repositories:
6
- - remote: 'git@myfakegitserver.com:user/repo.git'
7
- private_key: '/config/private/key'
8
- - remote: 'https://myfakegitserver.com/user/repo.git'
9
- oauth_token: '/config/oauth/token'
@@ -1,4 +0,0 @@
1
- ---
2
- forge:
3
- baseurl: 'http://private-forge.com'
4
- authorization_token: 'faketoken'
@@ -1,3 +0,0 @@
1
- ---
2
- forge:
3
- authorization_token: 'faketoken'
@@ -1,3 +0,0 @@
1
- ---
2
- deploy:
3
- generate_types: /config_generate_types
@@ -1,12 +0,0 @@
1
- ---
2
- logging:
3
- level: FATAL
4
-
5
- outputs:
6
- - type: file
7
- parameters:
8
- filename: r10k.log
9
-
10
- - type: syslog
11
-
12
- disable_default_stderr: true
@@ -1,3 +0,0 @@
1
- ---
2
- deploy:
3
- puppet_path: /config_puppet_path
@@ -1 +0,0 @@
1
- mod 'branan/eight_hundred', '1.0.0', :git => 'https://github.com/branan/eight_hundred', :ref => 'master'
@@ -1,5 +0,0 @@
1
- mod 'cd4pe',
2
- :git => 'test@randomurl.com:something/some_module.git',
3
- :ref => 'expected_ref',
4
- :default_branch => 'here_lies_the_default_branch'
5
-
@@ -1,10 +0,0 @@
1
- forge "http://forge.puppetlabs.com"
2
-
3
- mod "puppetlabs/stdlib", '4.11.0'
4
- mod "puppetlabs/stdlib", '4.12.0'
5
- mod "puppetlabs/concat", '2.1.0'
6
- mod "otheruser/concat", '2.1.0'
7
-
8
- mod 'apache',
9
- :git => 'https://github.com/puppetlabs/puppetlabs-apache',
10
- :branch => 'docs_experiment'
@@ -1,8 +0,0 @@
1
- forge "my.custom.forge.com"
2
-
3
- mod "puppetlabs/stdlib", '4.12.0'
4
- mod "puppetlabs/concat", '2.1.0'
5
-
6
- mod 'apache',
7
- :git => 'https://github.com/puppetlabs/puppetlabs-apache',
8
- :branch => 'docs_experiment'
@@ -1 +0,0 @@
1
- mod 'branan/eight_hundred' :git => 'https://github.com/branan/eight_hundred'
@@ -1 +0,0 @@
1
- require 'a-shrubbery!'
@@ -1 +0,0 @@
1
- mod 'branan/eight_hundred', undefined_lookup_function('eight_hundred')
@@ -1 +0,0 @@
1
- mod 'puppetlabs/apt', '2.1.1'
@@ -1 +0,0 @@
1
- mod 'puppetlabs/apt'
@@ -1,10 +0,0 @@
1
- mod 'puppetlabs/apt', '2.1.1'
2
- mod 'puppetlabs/stdlib', :latest
3
- mod 'puppetlabs/concat'
4
- mod 'puppetlabs/rpm', '2.1.1-pre1'
5
- mod 'foo', git: 'this/remote', branch: 'main'
6
- mod 'bar', git: 'this/remote', tag: 'v1.2.3'
7
- mod 'baz', git: 'this/remote', commit: '123abc456'
8
- mod 'fizz', git: 'this/remote', ref: '1234567890abcdef1234567890abcdef12345678'
9
- mod 'buzz', git: 'this/remote', ref: 'refs/heads/main'
10
- mod 'canary', local: true
@@ -1,10 +0,0 @@
1
- mod 'puppetlabs/apt', '3.0.0'
2
- mod 'puppetlabs/stdlib', :latest
3
- mod 'puppetlabs/concat'
4
- mod 'puppetlabs/rpm', '2.1.1-pre1'
5
- mod 'foo', git: 'this/remote', branch: 'main'
6
- mod 'bar', git: 'this/remote', tag: 'v1.2.3'
7
- mod 'baz', git: 'this/remote', commit: '123abc456'
8
- mod 'fizz', git: 'this/remote', ref: '1234567890abcdef1234567890abcdef12345678'
9
- mod 'buzz', git: 'this/remote', ref: 'refs/heads/main'
10
- mod 'canary', local: true
@@ -1 +0,0 @@
1
- spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1
@@ -1 +0,0 @@
1
- spec/fixtures/unit/util/purgeable/managed_one/expected_1
@@ -1,3 +0,0 @@
1
- #!/bin/bash
2
-
3
- echo "This was supposed to be non-executable..."
@@ -1,13 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/git/rugged/bare_repository'
3
-
4
- describe R10K::Git::Rugged::BareRepository, :if => R10K::Features.available?(:rugged) do
5
- include_context 'Git integration'
6
-
7
- let(:dirname) { 'bare-repo.git' }
8
-
9
- subject { described_class.new(basedir, dirname) }
10
-
11
- it_behaves_like 'a git repository'
12
- it_behaves_like 'a git bare repository'
13
- end
@@ -1,33 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/git/rugged/cache'
3
-
4
- describe R10K::Git::Rugged::Cache, :if => R10K::Features.available?(:rugged) do
5
- include_context 'Git integration'
6
-
7
- let(:dirname) { 'working-repo' }
8
- let(:remote_name) { 'origin' }
9
-
10
- subject { described_class.new(remote) }
11
-
12
- context "syncing with the remote" do
13
- before(:each) do
14
- subject.reset!
15
- end
16
-
17
- describe "with the correct configuration" do
18
- it "is able to sync with the remote" do
19
- subject.sync
20
- expect(subject.synced?).to eq(true)
21
- end
22
- end
23
-
24
- describe "with a out of date cached remote" do
25
- it "updates the cached remote configuration" do
26
- subject.repo.update_remote('foo', remote_name)
27
- expect(subject.repo.remotes[remote_name]).to eq('foo')
28
- subject.sync
29
- expect(subject.repo.remotes[remote_name]).to eq(remote)
30
- end
31
- end
32
- end
33
- end
@@ -1,14 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/git/rugged/thin_repository'
3
-
4
- describe R10K::Git::Rugged::ThinRepository, :if => R10K::Features.available?(:rugged) do
5
- include_context 'Git integration'
6
-
7
- let(:dirname) { 'working-repo' }
8
-
9
- let(:cacherepo) { R10K::Git::Rugged::Cache.generate(remote) }
10
-
11
- subject { described_class.new(basedir, dirname, cacherepo) }
12
-
13
- it_behaves_like "a git thin repository"
14
- end
@@ -1,48 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/git/rugged/working_repository'
3
-
4
- describe R10K::Git::Rugged::WorkingRepository, :if => R10K::Features.available?(:rugged) do
5
- include_context 'Git integration'
6
-
7
- let(:dirname) { 'working-repo' }
8
-
9
- subject { described_class.new(basedir, dirname) }
10
-
11
- it_behaves_like 'a git repository'
12
- it_behaves_like 'a git working repository'
13
-
14
- describe "checking out an unresolvable ref" do
15
- it "raises an error indicating that the ref was unresolvable" do
16
- expect(subject).to receive(:resolve).with("unresolvable")
17
- expect {
18
- subject.checkout("unresolvable")
19
- }.to raise_error(R10K::Git::GitError, /Unable to check out unresolvable ref 'unresolvable'/)
20
- end
21
- end
22
-
23
- context "checking out a specific SHA" do
24
- let(:_rugged_repo) { double("Repository") }
25
-
26
- before do
27
- subject.clone(remote)
28
- allow(subject).to receive(:with_repo).and_yield(_rugged_repo)
29
- allow(subject).to receive(:resolve).and_return("157011a4eaa27f1202a9d94335ee4876b26d377e")
30
- end
31
-
32
- describe "with force" do
33
- it "does not receive a checkout call" do
34
- expect(_rugged_repo).to_not receive(:checkout)
35
- expect(_rugged_repo).to receive(:reset)
36
- subject.checkout("157011a4eaa27f1202a9d94335ee4876b26d377e", {:force => true})
37
- end
38
- end
39
-
40
- describe "without force" do
41
- it "does receive a checkout call" do
42
- expect(_rugged_repo).to receive(:checkout)
43
- expect(_rugged_repo).to_not receive(:reset)
44
- subject.checkout("157011a4eaa27f1202a9d94335ee4876b26d377e", {:force => false})
45
- end
46
- end
47
- end
48
- end
@@ -1,13 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/git/shellgit/bare_repository'
3
-
4
- describe R10K::Git::ShellGit::BareRepository do
5
- include_context 'Git integration'
6
-
7
- let(:dirname) { 'bare-repo.git' }
8
-
9
- subject { described_class.new(basedir, dirname) }
10
-
11
- it_behaves_like 'a git repository'
12
- it_behaves_like 'a git bare repository'
13
- end
@@ -1,14 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/git/shellgit/thin_repository'
3
-
4
- describe R10K::Git::ShellGit::ThinRepository do
5
- include_context 'Git integration'
6
-
7
- let(:dirname) { 'working-repo' }
8
-
9
- let(:cacherepo) { R10K::Git::ShellGit::Cache.generate(remote) }
10
-
11
- subject { described_class.new(basedir, dirname, cacherepo) }
12
-
13
- it_behaves_like "a git thin repository"
14
- end
@@ -1,13 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/git/shellgit/working_repository'
3
-
4
- describe R10K::Git::ShellGit::WorkingRepository do
5
- include_context 'Git integration'
6
-
7
- let(:dirname) { 'working-repo' }
8
-
9
- subject { described_class.new(basedir, dirname) }
10
-
11
- it_behaves_like 'a git repository'
12
- it_behaves_like 'a git working repository'
13
- end
@@ -1,159 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/git'
3
- require 'r10k/git/stateful_repository'
4
-
5
- describe R10K::Git::StatefulRepository do
6
- include_context 'Git integration'
7
-
8
- let(:dirname) { 'working-repo' }
9
-
10
- let(:cacherepo) { R10K::Git.cache.generate(remote) }
11
- let(:thinrepo) { R10K::Git.thin_repository.new(basedir, dirname, cacherepo) }
12
- let(:ref) { '0.9.x' }
13
-
14
- subject { described_class.new(remote, basedir, dirname) }
15
-
16
- describe 'status' do
17
- describe "when the directory does not exist" do
18
- it "is absent" do
19
- expect(subject.status(ref)).to eq :absent
20
- end
21
- end
22
-
23
- describe "when the directory is not a git repository" do
24
- it "is mismatched" do
25
- thinrepo.path.mkdir
26
- expect(subject.status(ref)).to eq :mismatched
27
- end
28
- end
29
-
30
- describe "when the directory has a .git file" do
31
- it "is mismatched" do
32
- thinrepo.path.mkdir
33
- File.open("#{thinrepo.path}/.git", "w") {}
34
- expect(subject.status(ref)).to eq :mismatched
35
- end
36
- end
37
-
38
- describe "when the repository doesn't match the desired remote" do
39
- it "is mismatched" do
40
- thinrepo.clone(remote, {:ref => '1.0.0'})
41
- allow(subject.repo).to receive(:origin).and_return('http://some.site/repo.git')
42
- expect(subject.status(ref)).to eq :mismatched
43
- end
44
- end
45
-
46
- describe "when the wrong ref is checked out" do
47
- it "is outdated" do
48
- thinrepo.clone(remote, {:ref => '1.0.0'})
49
- expect(subject.status(ref)).to eq :outdated
50
- end
51
- end
52
-
53
- describe "when the ref is a branch and the cache is not synced" do
54
- it "is outdated" do
55
- thinrepo.clone(remote, {:ref => ref})
56
- cacherepo.reset!
57
- expect(subject.status(ref)).to eq :outdated
58
- end
59
- end
60
-
61
- describe "when the ref can't be resolved" do
62
- let(:ref) { '1.1.x' }
63
-
64
- it "is outdated" do
65
- thinrepo.clone(remote, {:ref => '0.9.x'})
66
- expect(subject.status(ref)).to eq :outdated
67
- end
68
- end
69
-
70
- describe "when the workdir has local modifications" do
71
- it "is dirty when workdir is up to date" do
72
- thinrepo.clone(remote, {:ref => ref})
73
- File.open(File.join(thinrepo.path, 'README.markdown'), 'a') { |f| f.write('local modifications!') }
74
-
75
- expect(subject.status(ref)).to eq :dirty
76
- end
77
-
78
- it "is dirty when workdir is not up to date" do
79
- thinrepo.clone(remote, {:ref => '1.0.0'})
80
- File.open(File.join(thinrepo.path, 'README.markdown'), 'a') { |f| f.write('local modifications!') }
81
-
82
- expect(subject.status(ref)).to eq :dirty
83
- end
84
- end
85
-
86
- describe "if the right ref is checked out" do
87
- it "is insync" do
88
- thinrepo.clone(remote, {:ref => ref})
89
- expect(subject.status(ref)).to eq :insync
90
- end
91
- end
92
- end
93
-
94
- describe "syncing" do
95
- describe "when the ref is unresolvable" do
96
- let(:ref) { '1.1.x' }
97
-
98
- it "raises an error" do
99
- expect {
100
- subject.sync(ref)
101
- }.to raise_error(R10K::Git::UnresolvableRefError)
102
- end
103
- end
104
-
105
- describe "when the repo is absent" do
106
- it "creates the repo" do
107
- subject.sync(ref)
108
- expect(subject.status(ref)).to eq :insync
109
- end
110
- end
111
-
112
- describe "when the repo is mismatched" do
113
- it "removes and recreates the repo" do
114
- thinrepo.path.mkdir
115
- subject.sync(ref)
116
- expect(subject.status(ref)).to eq :insync
117
- end
118
- end
119
-
120
- describe "when the repo is out of date" do
121
- it "updates the repository" do
122
- thinrepo.clone(remote, {:ref => '1.0.0'})
123
- subject.sync(ref)
124
- expect(subject.status(ref)).to eq :insync
125
- end
126
- end
127
-
128
- describe "when the workdir is dirty" do
129
- before(:each) do
130
- thinrepo.clone(remote, {:ref => ref})
131
- File.open(File.join(thinrepo.path, 'README.markdown'), 'a') { |f| f.write('local modifications!') }
132
- end
133
-
134
- context "when force == true" do
135
- let(:force) { true }
136
-
137
- it "warns and overwrites local modifications" do
138
- expect(subject.logger).to receive(:warn).with(/overwriting local modifications/i)
139
-
140
- subject.sync(ref, force)
141
-
142
- expect(subject.status(ref)).to eq :insync
143
- end
144
- end
145
-
146
- context "when force != true" do
147
- let(:force) { false }
148
-
149
- it "warns and does not overwrite local modifications" do
150
- expect(subject.logger).to receive(:warn).with(/skipping.*due to local modifications/i)
151
-
152
- subject.sync(ref, force)
153
-
154
- expect(subject.status(ref)).to eq :dirty
155
- end
156
- end
157
- end
158
- end
159
- end
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/util/purgeable'
3
- require 'r10k/util/cleaner'
4
-
5
- require 'tmpdir'
6
-
7
- RSpec.describe R10K::Util::Purgeable do
8
- it 'purges only unmanaged files' do
9
- Dir.mktmpdir do |envdir|
10
- managed_directory = "#{envdir}/managed_one"
11
- desired_contents = [
12
- "#{managed_directory}/expected_1",
13
- "#{managed_directory}/managed_subdir_1",
14
- "#{managed_directory}/managed_symlink_dir",
15
- "#{managed_directory}/managed_subdir_1/subdir_expected_1",
16
- "#{managed_directory}/managed_subdir_1/managed_symlink_file",
17
- ]
18
-
19
- FileUtils.cp_r('spec/fixtures/unit/util/purgeable/managed_one/',
20
- managed_directory)
21
-
22
- cleaner = R10K::Util::Cleaner.new([managed_directory], desired_contents)
23
-
24
- cleaner.purge!({ recurse: true, whitelist: ["**/subdir_allowlisted_2"] })
25
-
26
- # Files present after purge
27
- expect(File.exist?("#{managed_directory}/expected_1")).to be true
28
- expect(File.exist?("#{managed_directory}/managed_subdir_1")).to be true
29
- expect(File.exist?("#{managed_directory}/managed_symlink_dir")).to be true
30
- expect(File.exist?("#{managed_directory}/managed_subdir_1/subdir_expected_1")).to be true
31
- expect(File.exist?("#{managed_directory}/managed_subdir_1/managed_symlink_file")).to be true
32
- expect(File.exist?("#{managed_directory}/managed_subdir_1/subdir_allowlisted_2")).to be true
33
-
34
- # Purged files
35
- expect(File.exist?("#{managed_directory}/unmanaged_1")).to be false
36
- expect(File.exist?("#{managed_directory}/managed_subdir_1/unmanaged_symlink_dir")).to be false
37
- expect(File.exist?("#{managed_directory}/unmanaged_symlink_file")).to be false
38
- expect(File.exist?("#{managed_directory}/managed_subdir_1/subdir_unmanaged_1")).to be false
39
- end
40
- end
41
- end
@@ -1,28 +0,0 @@
1
- RSpec::Matchers.define :exit_with do |expected|
2
-
3
- supports_block_expectations
4
-
5
- match do |block|
6
- actual = nil
7
- begin
8
- block.call
9
- rescue SystemExit => e
10
- actual = e.status
11
- end
12
- actual and actual == expected
13
- end
14
-
15
- failure_message do |actual|
16
- "expected exit with code #{expected} but " +
17
- (actual.nil? ? " exit was not called" : "we exited with #{actual} instead")
18
- end
19
-
20
- failure_message_when_negated do |actual|
21
- "expected that exit would not be called with #{expected}"
22
- end
23
-
24
- description do
25
- "expect exit with #{expected}"
26
- end
27
- end
28
-
@@ -1,18 +0,0 @@
1
- RSpec::Matchers.define :match_realpath do |expected|
2
-
3
- match do |actual|
4
- actual == expected || realpath(actual) == realpath(expected)
5
- end
6
-
7
- failure_message do |actual|
8
- "expected that #{actual} would have a real path of #{expected}"
9
- end
10
-
11
- failure_message_when_negated do |actual|
12
- "expected that #{actual} would not have a real path of #{expected}"
13
- end
14
-
15
- def realpath(path)
16
- Pathname.new(path).realpath.to_s
17
- end
18
- end
@@ -1,33 +0,0 @@
1
- require 'r10k/deployment/config'
2
-
3
- module R10K
4
- class Deployment
5
- class MockConfig
6
-
7
- attr_accessor :hash
8
-
9
- def initialize(hash)
10
- @hash = hash.merge(deploy: {})
11
- end
12
-
13
- def configfile
14
- "/some/nonexistent/config_file"
15
- end
16
-
17
- # Perform a scan for key and check for both string and symbol keys
18
- def setting(key)
19
- @hash[key]
20
- end
21
-
22
- alias [] setting
23
-
24
- def settings
25
- @hash
26
- end
27
-
28
- def merge(other)
29
- hash.merge(other)
30
- end
31
- end
32
- end
33
- end
@@ -1,18 +0,0 @@
1
- require 'r10k/environment'
2
- require 'r10k/util/purgeable'
3
-
4
- class R10K::Environment::Mock < R10K::Environment::Base
5
- include R10K::Util::Purgeable
6
-
7
- def sync
8
- "synced"
9
- end
10
-
11
- def status
12
- :insync
13
- end
14
-
15
- def signature
16
- "mock"
17
- end
18
- end
@@ -1,17 +0,0 @@
1
- require 'r10k/source'
2
- require 'r10k-mocks/mock_env'
3
-
4
- class R10K::Source::Mock < R10K::Source::Base
5
- R10K::Source.register(:mock, self)
6
-
7
- def environments
8
- if @_environments.nil?
9
- corrected_environment_names = @options[:environments].map do |env|
10
- R10K::Environment::Name.new(env, :prefix => @prefix, :invalid => 'correct_and_warn')
11
- end
12
- @_environments = corrected_environment_names.map { |env| R10K::Environment::Mock.new(env.name, @basedir, env.dirname, { overrides: @options[:overrides] }) }
13
- end
14
-
15
- @_environments
16
- end
17
- end
data/spec/r10k-mocks.rb DELETED
@@ -1,3 +0,0 @@
1
- require 'r10k-mocks/mock_env'
2
- require 'r10k-mocks/mock_source'
3
- require 'r10k-mocks/mock_config'