eac_tools 0.111.0 → 0.112.0

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 (388) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +51 -51
  3. data/eac_tools.gemspec +41 -0
  4. data/exe/eac +6 -1
  5. data/lib/eac_tools/version.rb +1 -1
  6. data/sub/avm/avm.gemspec +27 -0
  7. data/sub/avm/lib/avm/application_scms/base.rb +37 -0
  8. data/sub/avm/lib/avm/application_stereotypes/base.rb +29 -0
  9. data/sub/avm/lib/avm/applications/base/auto_local_source_path.rb +22 -0
  10. data/sub/avm/lib/avm/applications/base/local_instance.rb +28 -0
  11. data/sub/avm/lib/avm/applications/base/local_source.rb +31 -0
  12. data/sub/avm/lib/avm/applications/base/naming.rb +26 -0
  13. data/sub/avm/lib/avm/applications/base/organization.rb +27 -0
  14. data/sub/avm/lib/avm/applications/base/publishing.rb +39 -0
  15. data/sub/avm/lib/avm/applications/base/scm.rb +24 -0
  16. data/sub/avm/lib/avm/applications/base/stereotype.rb +29 -0
  17. data/sub/avm/lib/avm/applications/base.rb +34 -0
  18. data/sub/avm/lib/avm/data/callbacks.rb +36 -0
  19. data/sub/avm/lib/avm/data/clearer.rb +17 -0
  20. data/sub/avm/lib/avm/data/dumper.rb +137 -0
  21. data/sub/avm/lib/avm/data/loader.rb +23 -0
  22. data/sub/avm/lib/avm/data/package/base_performer.rb +36 -0
  23. data/sub/avm/lib/avm/data/package/build_directory.rb +25 -0
  24. data/sub/avm/lib/avm/data/package/clear.rb +19 -0
  25. data/sub/avm/lib/avm/data/package/dump.rb +42 -0
  26. data/sub/avm/lib/avm/data/package/load.rb +33 -0
  27. data/sub/avm/lib/avm/data/package.rb +64 -0
  28. data/sub/avm/lib/avm/data/performer.rb +45 -0
  29. data/sub/avm/lib/avm/data/rotate.rb +106 -0
  30. data/sub/avm/lib/avm/data/unit.rb +44 -0
  31. data/sub/avm/lib/avm/data/unit_with_commands.rb +48 -0
  32. data/sub/avm/lib/avm/docker/container.rb +47 -0
  33. data/sub/avm/lib/avm/docker/image.rb +70 -0
  34. data/sub/avm/lib/avm/docker/runner.rb +129 -0
  35. data/sub/avm/lib/avm/entries/auto_values/entry.rb +36 -0
  36. data/sub/avm/lib/avm/entries/auto_values/uri_entry.rb +21 -0
  37. data/sub/avm/lib/avm/entries/base/inherited_entry_value.rb +42 -0
  38. data/sub/avm/lib/avm/entries/base/uri_component_entry_value/default_value.rb +24 -0
  39. data/sub/avm/lib/avm/entries/base/uri_component_entry_value/inherited_value.rb +35 -0
  40. data/sub/avm/lib/avm/entries/base/uri_component_entry_value/url_entry_value.rb +27 -0
  41. data/sub/avm/lib/avm/entries/base/uri_component_entry_value.rb +40 -0
  42. data/sub/avm/lib/avm/entries/base/uri_components_entries_values/component_factory.rb +40 -0
  43. data/sub/avm/lib/avm/entries/base/uri_components_entries_values/generic_component.rb +59 -0
  44. data/sub/avm/lib/avm/entries/base/uri_components_entries_values/path_component.rb +16 -0
  45. data/sub/avm/lib/avm/entries/base/uri_components_entries_values/url_component.rb +22 -0
  46. data/sub/avm/lib/avm/entries/base/uri_components_entries_values.rb +23 -0
  47. data/sub/avm/lib/avm/entries/base.rb +53 -0
  48. data/sub/avm/lib/avm/entries/entry/no_context_entry.rb +21 -0
  49. data/sub/avm/lib/avm/entries/entry.rb +69 -0
  50. data/sub/avm/lib/avm/entries/jobs/base.rb +58 -0
  51. data/sub/avm/lib/avm/entries/jobs/variables_source/read_entry.rb +48 -0
  52. data/sub/avm/lib/avm/entries/jobs/variables_source.rb +13 -0
  53. data/sub/avm/lib/avm/entries/jobs/with_variables_source.rb +13 -0
  54. data/sub/avm/lib/avm/entries/keys_constants_set.rb +41 -0
  55. data/sub/avm/lib/avm/entries/uri_builder.rb +87 -0
  56. data/sub/avm/lib/avm/executables.rb +21 -0
  57. data/sub/avm/lib/avm/file_formats/base.rb +34 -0
  58. data/sub/avm/lib/avm/file_formats/file_result.rb +11 -0
  59. data/sub/avm/lib/avm/file_formats/search_formatter.rb +83 -0
  60. data/sub/avm/lib/avm/file_formats/unknown.rb +15 -0
  61. data/sub/avm/lib/avm/file_formats/utf8_assert.rb +72 -0
  62. data/sub/avm/lib/avm/files/appendable/file_content.rb +28 -0
  63. data/sub/avm/lib/avm/files/appendable/plain_directory.rb +27 -0
  64. data/sub/avm/lib/avm/files/appendable/resource_base.rb +17 -0
  65. data/sub/avm/lib/avm/files/appendable/tar_output_command.rb +27 -0
  66. data/sub/avm/lib/avm/files/appendable/templatized_directory.rb +36 -0
  67. data/sub/avm/lib/avm/files/appendable.rb +51 -0
  68. data/sub/avm/lib/avm/files/appender.rb +9 -0
  69. data/sub/avm/lib/avm/files/deploy.rb +70 -0
  70. data/sub/avm/lib/avm/files/text_replacer/gsub.rb +22 -0
  71. data/sub/avm/lib/avm/files/text_replacer.rb +29 -0
  72. data/sub/avm/lib/avm/instances/base/auto_values/data.rb +28 -0
  73. data/sub/avm/lib/avm/instances/base/auto_values/database.rb +60 -0
  74. data/sub/avm/lib/avm/instances/base/auto_values/mailer.rb +31 -0
  75. data/sub/avm/lib/avm/instances/base/auto_values/source.rb +16 -0
  76. data/sub/avm/lib/avm/instances/base/auto_values.rb +12 -0
  77. data/sub/avm/lib/avm/instances/base/dockerizable.rb +41 -0
  78. data/sub/avm/lib/avm/instances/base/entry_keys.rb +25 -0
  79. data/sub/avm/lib/avm/instances/base/install.rb +28 -0
  80. data/sub/avm/lib/avm/instances/base/processes.rb +25 -0
  81. data/sub/avm/lib/avm/instances/base/production.rb +33 -0
  82. data/sub/avm/lib/avm/instances/base/subcommand_parent.rb +23 -0
  83. data/sub/avm/lib/avm/instances/base/web.rb +15 -0
  84. data/sub/avm/lib/avm/instances/base.rb +70 -0
  85. data/sub/avm/lib/avm/instances/data/files_unit.rb +57 -0
  86. data/sub/avm/lib/avm/instances/data/loading_denied_error.rb +10 -0
  87. data/sub/avm/lib/avm/instances/data/package.rb +25 -0
  88. data/sub/avm/lib/avm/instances/data/unit.rb +36 -0
  89. data/sub/avm/lib/avm/instances/docker_image.rb +13 -0
  90. data/sub/avm/lib/avm/instances/entry_keys.rb +39 -0
  91. data/sub/avm/lib/avm/instances/ids.rb +28 -0
  92. data/sub/avm/lib/avm/instances/process.rb +29 -0
  93. data/sub/avm/lib/avm/instances/runner.rb +34 -0
  94. data/sub/avm/lib/avm/launcher/context/instance_collector.rb +44 -0
  95. data/sub/avm/lib/avm/launcher/context/instance_discovery/root_instance_paths.rb +51 -0
  96. data/sub/avm/lib/avm/launcher/context/instance_discovery.rb +53 -0
  97. data/sub/avm/lib/avm/launcher/context/instance_manager/cached_instance.rb +34 -0
  98. data/sub/avm/lib/avm/launcher/context/instance_manager/cached_instances.rb +32 -0
  99. data/sub/avm/lib/avm/launcher/context/instance_manager.rb +74 -0
  100. data/sub/avm/lib/avm/launcher/context/settings.rb +51 -0
  101. data/sub/avm/lib/avm/launcher/context.rb +83 -0
  102. data/sub/avm/lib/avm/launcher/errors/base.rb +10 -0
  103. data/sub/avm/lib/avm/launcher/errors/non_project.rb +13 -0
  104. data/sub/avm/lib/avm/launcher/instances/base/cache.rb +43 -0
  105. data/sub/avm/lib/avm/launcher/instances/base/publishing.rb +53 -0
  106. data/sub/avm/lib/avm/launcher/instances/base.rb +77 -0
  107. data/sub/{avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api.rb → avm/lib/avm/launcher/instances/error.rb} +2 -2
  108. data/sub/avm/lib/avm/launcher/instances/runner_helper.rb +43 -0
  109. data/sub/avm/lib/avm/launcher/instances/settings.rb +24 -0
  110. data/sub/avm/lib/avm/launcher/paths/logical.rb +76 -0
  111. data/sub/avm/lib/avm/launcher/paths/real.rb +44 -0
  112. data/sub/avm/lib/avm/launcher/project.rb +15 -0
  113. data/sub/avm/lib/avm/launcher/publish/base.rb +44 -0
  114. data/sub/avm/lib/avm/launcher/publish/check_result.rb +64 -0
  115. data/sub/avm/lib/avm/launcher/stereotype.rb +63 -0
  116. data/sub/avm/lib/avm/patches/eac_config/entry_path.rb +44 -0
  117. data/sub/avm/lib/avm/path_string.rb +27 -0
  118. data/sub/avm/lib/avm/registry/application_scms.rb +13 -0
  119. data/sub/avm/lib/avm/registry/application_stereotypes/build_available.rb +45 -0
  120. data/sub/avm/lib/avm/registry/application_stereotypes/stereotype_builder.rb +30 -0
  121. data/sub/avm/lib/avm/registry/application_stereotypes.rb +42 -0
  122. data/sub/avm/lib/avm/registry/applications.rb +35 -0
  123. data/sub/avm/lib/avm/registry/base.rb +26 -0
  124. data/sub/avm/lib/avm/registry/config_objects.rb +15 -0
  125. data/sub/avm/lib/avm/registry/detection_error.rb +8 -0
  126. data/sub/avm/lib/avm/registry/file_formats.rb +17 -0
  127. data/sub/avm/lib/avm/registry/from_gems.rb +67 -0
  128. data/sub/avm/lib/avm/registry/instances.rb +13 -0
  129. data/sub/avm/lib/avm/registry/launcher_stereotypes.rb +8 -0
  130. data/sub/avm/lib/avm/registry/runners.rb +8 -0
  131. data/sub/avm/lib/avm/registry/scms.rb +8 -0
  132. data/sub/avm/lib/avm/registry/source_generators.rb +14 -0
  133. data/sub/avm/lib/avm/registry/sources.rb +38 -0
  134. data/sub/avm/lib/avm/registry/with_path/cache.rb +28 -0
  135. data/sub/avm/lib/avm/registry/with_path.rb +44 -0
  136. data/sub/avm/lib/avm/registry.rb +31 -0
  137. data/sub/avm/lib/avm/result.rb +80 -0
  138. data/sub/avm/lib/avm/rspec/launcher_controller.rb +91 -0
  139. data/sub/avm/lib/avm/rspec/setup/launcher.rb +18 -0
  140. data/sub/avm/lib/avm/rspec/setup/source_generator.rb +20 -0
  141. data/sub/avm/lib/avm/rspec/setup.rb +32 -0
  142. data/sub/avm/lib/avm/rspec/shared_examples/avm_file_format_file_resource_name.rb +13 -0
  143. data/sub/avm/lib/avm/rspec/shared_examples/avm_file_formats_with_fixtures.rb +28 -0
  144. data/sub/avm/lib/avm/rspec/shared_examples/avm_source_generated.rb +23 -0
  145. data/sub/avm/lib/avm/rspec/shared_examples/entries_values.rb +19 -0
  146. data/sub/avm/lib/avm/rspec/shared_examples/in_avm_registry.rb +9 -0
  147. data/sub/avm/lib/avm/rspec/shared_examples/not_in_avm_registry.rb +12 -0
  148. data/sub/avm/lib/avm/rspec/shared_examples/with_config.rb +9 -0
  149. data/sub/avm/lib/avm/rspec/shared_examples/with_launcher.rb +13 -0
  150. data/sub/avm/lib/avm/runner_with/file_replacer.rb +28 -0
  151. data/sub/avm/lib/avm/runner_with/filesystem_renamer.rb +99 -0
  152. data/sub/avm/lib/avm/runner_with/filesystem_traverser.rb +49 -0
  153. data/sub/avm/lib/avm/runners/base.rb +25 -0
  154. data/sub/avm/lib/avm/scms/auto_commit/file_resource_name.rb +47 -0
  155. data/sub/avm/lib/avm/scms/auto_commit/for_file.rb +79 -0
  156. data/sub/avm/lib/avm/scms/auto_commit/rules/base.rb +37 -0
  157. data/sub/avm/lib/avm/scms/auto_commit/rules/last.rb +17 -0
  158. data/sub/avm/lib/avm/scms/auto_commit/rules/manual.rb +38 -0
  159. data/sub/avm/lib/avm/scms/auto_commit/rules/new.rb +21 -0
  160. data/sub/avm/lib/avm/scms/auto_commit/rules/nth.rb +29 -0
  161. data/sub/avm/lib/avm/scms/auto_commit/rules/unique.rb +19 -0
  162. data/sub/avm/lib/avm/scms/auto_commit/rules.rb +32 -0
  163. data/sub/avm/lib/avm/scms/base/branches.rb +20 -0
  164. data/sub/avm/lib/avm/scms/base/commits.rb +32 -0
  165. data/sub/avm/lib/avm/scms/base/milestones.rb +19 -0
  166. data/sub/avm/lib/avm/scms/base/remotes.rb +20 -0
  167. data/sub/avm/lib/avm/scms/base.rb +59 -0
  168. data/sub/avm/lib/avm/scms/branch.rb +24 -0
  169. data/sub/avm/lib/avm/scms/changed_file.rb +46 -0
  170. data/sub/avm/lib/avm/scms/commit.rb +64 -0
  171. data/sub/avm/lib/avm/scms/commit_info.rb +37 -0
  172. data/sub/avm/lib/avm/scms/inflector.rb +22 -0
  173. data/sub/avm/lib/avm/scms/interval.rb +16 -0
  174. data/sub/avm/lib/avm/scms/null/commit.rb +11 -0
  175. data/sub/avm/lib/avm/scms/null.rb +16 -0
  176. data/sub/avm/lib/avm/scms/remote.rb +9 -0
  177. data/sub/avm/lib/avm/self/docker_image.rb +11 -0
  178. data/sub/avm/lib/avm/self/instance/entry_keys.rb +12 -0
  179. data/sub/avm/lib/avm/self/instance.rb +27 -0
  180. data/sub/avm/lib/avm/source_generators/base.rb +69 -0
  181. data/sub/avm/lib/avm/source_generators/option.rb +11 -0
  182. data/sub/avm/lib/avm/source_generators/option_list.rb +29 -0
  183. data/sub/avm/lib/avm/source_generators/runner.rb +55 -0
  184. data/sub/avm/lib/avm/sources/auto_commit/for_file.rb +29 -0
  185. data/sub/avm/lib/avm/sources/base/application.rb +32 -0
  186. data/sub/avm/lib/avm/sources/base/configuration.rb +89 -0
  187. data/sub/avm/lib/avm/sources/base/instance.rb +13 -0
  188. data/sub/avm/lib/avm/sources/base/locale.rb +30 -0
  189. data/sub/avm/lib/avm/sources/base/organizational.rb +30 -0
  190. data/sub/avm/lib/avm/sources/base/parent.rb +26 -0
  191. data/sub/avm/lib/avm/sources/base/stereotype.rb +16 -0
  192. data/sub/avm/lib/avm/sources/base/sub/remove.rb +36 -0
  193. data/sub/avm/lib/avm/sources/base/sub.rb +23 -0
  194. data/sub/avm/lib/avm/sources/base/subs.rb +63 -0
  195. data/sub/avm/lib/avm/sources/base/subs_paths.rb +30 -0
  196. data/sub/avm/lib/avm/sources/base/testing.rb +67 -0
  197. data/sub/avm/lib/avm/sources/base/update.rb +37 -0
  198. data/sub/avm/lib/avm/sources/base/update_sub.rb +55 -0
  199. data/sub/avm/lib/avm/sources/base/update_subs.rb +17 -0
  200. data/sub/avm/lib/avm/sources/base/version_bump.rb +26 -0
  201. data/sub/avm/lib/avm/sources/base.rb +56 -0
  202. data/sub/avm/lib/avm/sources/configuration/rubocop.rb +26 -0
  203. data/sub/avm/lib/avm/sources/configuration.rb +57 -0
  204. data/sub/avm/lib/avm/sources/issues/deliver.rb +51 -0
  205. data/sub/avm/lib/avm/sources/runner.rb +38 -0
  206. data/sub/avm/lib/avm/sources/tests/builder.rb +91 -0
  207. data/sub/avm/lib/avm/sources/tests/performer.rb +32 -0
  208. data/sub/avm/lib/avm/sources/tests/result.rb +13 -0
  209. data/sub/avm/lib/avm/sources/tests/single.rb +71 -0
  210. data/sub/avm/lib/avm/sources/update_error.rb +8 -0
  211. data/sub/avm/lib/avm/sync.rb +90 -0
  212. data/sub/avm/lib/avm/version.rb +5 -0
  213. data/sub/avm/lib/avm/version_number.rb +45 -0
  214. data/sub/avm/lib/avm/with/application_stereotype.rb +29 -0
  215. data/sub/avm/lib/avm/with/extra_subcommands.rb +41 -0
  216. data/sub/avm/lib/avm.rb +18 -0
  217. data/sub/avm/locale/en.yml +6 -0
  218. data/sub/avm/locale/pt-BR.yml +6 -0
  219. data/sub/avm/spec/lib/avm/applications/base/entries_spec.rb +29 -0
  220. data/sub/avm/spec/lib/avm/applications/base/entries_spec_files/config.yml +12 -0
  221. data/sub/avm/spec/lib/avm/applications/base_spec.rb +21 -0
  222. data/sub/avm/spec/lib/avm/applications/base_spec_fixture.yml +3 -0
  223. data/sub/avm/spec/lib/avm/file_formats/base_spec.rb +9 -0
  224. data/sub/avm/spec/lib/avm/instances/base/entries_spec.rb +78 -0
  225. data/sub/avm/spec/lib/avm/instances/base/entries_spec_files/config.yml +50 -0
  226. data/sub/avm/spec/lib/avm/instances/base_spec.rb +29 -0
  227. data/sub/avm/spec/lib/avm/launcher/context_spec.rb +98 -0
  228. data/sub/avm/spec/lib/avm/launcher/context_spec.yml +5 -0
  229. data/sub/avm/spec/lib/avm/launcher/context_spec_files/config.yml +9 -0
  230. data/sub/avm/spec/lib/avm/launcher/instances/base_spec.rb +39 -0
  231. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/config.yml +5 -0
  232. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/settings.yaml +5 -0
  233. data/sub/avm/spec/lib/avm/patches/eac_config/entry_path_spec.rb +26 -0
  234. data/sub/avm/spec/lib/avm/scms/auto_commit/file_resource_name_spec.rb +20 -0
  235. data/sub/avm/spec/lib/avm/scms/base_spec.rb +5 -0
  236. data/sub/avm/spec/lib/avm/sources/base_spec.rb +5 -0
  237. data/sub/avm/spec/lib/avm/sources/runner_spec.rb +7 -0
  238. data/sub/avm/spec/spec_helper/launcher_context/settings.yml +6 -0
  239. data/sub/{avm-eac_redmine_base0 → avm}/spec/spec_helper.rb +4 -3
  240. data/sub/avm/template/avm/rspec/launcher_controller/dummy/avm-tools_stub/avm-tools.gemspec +29 -0
  241. data/sub/{avm-eac_redmine_base0/lib/avm/eac_redmine_base0 → avm/template/avm/rspec/launcher_controller/dummy/avm-tools_stub/lib/avm/tools}/version.rb +2 -2
  242. data/sub/avm/template/avm/rspec/launcher_controller/dummy/avm-tools_stub/lib/avm/tools.rb +6 -0
  243. data/sub/avm/template/avm/rspec/launcher_controller/dummy/ruby_gem_stub/lib/ruby_gem_stub/version.rb +5 -0
  244. data/sub/avm/template/avm/rspec/launcher_controller/dummy/ruby_gem_stub/lib/ruby_gem_stub.rb +3 -0
  245. data/sub/avm/template/avm/rspec/launcher_controller/dummy/ruby_gem_stub/ruby_gem_stub.gemspec +16 -0
  246. data/sub/avm/template/avm/rspec/launcher_controller/settings.yml +1 -0
  247. data/sub/avm/template/avm/self/docker_image/Dockerfile +17 -0
  248. data/sub/avm/template/avm/self/docker_image/entrypoint.sh +12 -0
  249. data/sub/avm-eac_webapp_base0/avm-eac_webapp_base0.gemspec +1 -1
  250. data/sub/avm-eac_webapp_base0/lib/avm/eac_webapp_base0/instances/base/install.rb +1 -1
  251. data/sub/avm-eac_webapp_base0/lib/avm/eac_webapp_base0/version.rb +1 -1
  252. data/sub/avm-tools/README.textile +28 -0
  253. data/sub/avm-tools/avm-tools.gemspec +24 -0
  254. data/sub/avm-tools/exe/avm +6 -0
  255. data/sub/avm-tools/lib/avm/tools/core_ext.rb +1 -0
  256. data/sub/avm-tools/lib/avm/tools/rspec/helpers/runner.rb +19 -0
  257. data/sub/avm-tools/lib/avm/tools/rspec/setup.rb +21 -0
  258. data/sub/avm-tools/lib/avm/tools/runner/application/info.rb +34 -0
  259. data/sub/avm-tools/lib/avm/tools/runner/application.rb +21 -0
  260. data/sub/avm-tools/lib/avm/tools/runner/application_stereotypes/list.rb +29 -0
  261. data/sub/avm-tools/lib/avm/tools/runner/application_stereotypes.rb +13 -0
  262. data/sub/avm-tools/lib/avm/tools/runner/applications/list.rb +29 -0
  263. data/sub/avm-tools/lib/avm/tools/runner/applications.rb +13 -0
  264. data/sub/avm-tools/lib/avm/tools/runner/config/load_path.rb +48 -0
  265. data/sub/avm-tools/lib/avm/tools/runner/config.rb +14 -0
  266. data/sub/avm-tools/lib/avm/tools/runner/files/format.rb +46 -0
  267. data/sub/avm-tools/lib/avm/tools/runner/files/rotate.rb +28 -0
  268. data/sub/avm-tools/lib/avm/tools/runner/files.rb +14 -0
  269. data/sub/avm-tools/lib/avm/tools/runner/instance/data/clear.rb +15 -0
  270. data/sub/avm-tools/lib/avm/tools/runner/instance/data/dump.rb +17 -0
  271. data/sub/avm-tools/lib/avm/tools/runner/instance/data/load.rb +22 -0
  272. data/sub/avm-tools/lib/avm/tools/runner/instance/data/unit/clear.rb +17 -0
  273. data/sub/avm-tools/lib/avm/tools/runner/instance/data/unit/dump.rb +17 -0
  274. data/sub/avm-tools/lib/avm/tools/runner/instance/data/unit/load.rb +22 -0
  275. data/sub/avm-tools/lib/avm/tools/runner/instance/data/unit.rb +40 -0
  276. data/sub/avm-tools/lib/avm/tools/runner/instance/data.rb +23 -0
  277. data/sub/avm-tools/lib/avm/tools/runner/instance/entry.rb +41 -0
  278. data/sub/avm-tools/lib/avm/tools/runner/instance/info.rb +35 -0
  279. data/sub/avm-tools/lib/avm/tools/runner/instance/system.rb +63 -0
  280. data/sub/avm-tools/lib/avm/tools/runner/instance.rb +10 -0
  281. data/sub/avm-tools/lib/avm/tools/runner/launcher/instances.rb +34 -0
  282. data/sub/avm-tools/lib/avm/tools/runner/launcher/projects.rb +37 -0
  283. data/sub/avm-tools/lib/avm/tools/runner/launcher/publish.rb +51 -0
  284. data/sub/avm-tools/lib/avm/tools/runner/launcher.rb +14 -0
  285. data/sub/avm-tools/lib/avm/tools/runner/launcher_stereotypes/list.rb +38 -0
  286. data/sub/avm-tools/lib/avm/tools/runner/launcher_stereotypes.rb +13 -0
  287. data/sub/avm-tools/lib/avm/tools/runner/self/docker.rb +12 -0
  288. data/sub/avm-tools/lib/avm/tools/runner/self/registry.rb +22 -0
  289. data/sub/avm-tools/lib/avm/tools/runner/self.rb +18 -0
  290. data/sub/avm-tools/lib/avm/tools/runner/source/auto_commit.rb +67 -0
  291. data/sub/avm-tools/lib/avm/tools/runner/source/info.rb +54 -0
  292. data/sub/avm-tools/lib/avm/tools/runner/source/issue/complete.rb +85 -0
  293. data/sub/avm-tools/lib/avm/tools/runner/source/issue/deliver.rb +32 -0
  294. data/sub/{avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/runners/logs.rb → avm-tools/lib/avm/tools/runner/source/issue.rb} +5 -5
  295. data/sub/avm-tools/lib/avm/tools/runner/source/sub/remove.rb +20 -0
  296. data/sub/avm-tools/lib/avm/tools/runner/source/sub.rb +25 -0
  297. data/sub/avm-tools/lib/avm/tools/runner/source/subs.rb +70 -0
  298. data/sub/avm-tools/lib/avm/tools/runner/source/test.rb +90 -0
  299. data/sub/avm-tools/lib/avm/tools/runner/source/update.rb +20 -0
  300. data/sub/avm-tools/lib/avm/tools/runner/source/version_bump.rb +78 -0
  301. data/sub/avm-tools/lib/avm/tools/runner/source.rb +13 -0
  302. data/sub/avm-tools/lib/avm/tools/runner/source_generate.rb +10 -0
  303. data/sub/avm-tools/lib/avm/tools/runner.rb +19 -0
  304. data/sub/avm-tools/lib/avm/tools/runner_with/include_exclude.rb +20 -0
  305. data/sub/avm-tools/lib/avm/tools/runner_with/instance_data_clear.rb +19 -0
  306. data/sub/avm-tools/lib/avm/tools/runner_with/instance_data_dump.rb +55 -0
  307. data/sub/avm-tools/lib/avm/tools/runner_with/instance_data_load.rb +64 -0
  308. data/sub/avm-tools/lib/avm/tools/runner_with/instance_data_performer.rb +37 -0
  309. data/sub/avm-tools/lib/avm/tools/self.rb +17 -0
  310. data/sub/{avm-eac_rails_base1/lib/avm/eac_rails_base1 → avm-tools/lib/avm/tools}/version.rb +2 -2
  311. data/sub/avm-tools/lib/avm/tools.rb +16 -0
  312. data/sub/avm-tools/spec/lib/avm/tools/runner/files/rotate_spec.rb +71 -0
  313. data/sub/avm-tools/spec/lib/avm/tools/runner/launcher_stereotypes/list_spec.rb +15 -0
  314. data/sub/avm-tools/spec/lib/avm/tools/runner/source/issue/complete_spec.rb +47 -0
  315. data/sub/avm-tools/spec/lib/avm/tools/runner_spec.rb +12 -0
  316. data/sub/{avm-eac_rails_base1 → avm-tools}/spec/spec_helper.rb +3 -2
  317. metadata +329 -93
  318. data/sub/avm-eac_rails_base1/avm-eac_rails_base1.gemspec +0 -22
  319. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/apache_base.rb +0 -14
  320. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/apache_host.rb +0 -15
  321. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/apache_path.rb +0 -17
  322. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/base/install.rb +0 -25
  323. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/base.rb +0 -44
  324. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/deploy.rb +0 -20
  325. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/processes/daemon.rb +0 -36
  326. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/processes/tasks_scheduler.rb +0 -24
  327. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/runners/bundle.rb +0 -26
  328. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/runners/code_runner.rb +0 -25
  329. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/runners/log.rb +0 -43
  330. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/runners/logs/clear.rb +0 -25
  331. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/runners/rails_server.rb +0 -31
  332. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/runners/tasks_scheduler/systemd_unit.rb +0 -45
  333. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/runners/tasks_scheduler.rb +0 -15
  334. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/systemd_unit/service.rb +0 -70
  335. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/systemd_unit/tasks_scheduler_command.rb +0 -29
  336. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/instances/systemd_unit.rb +0 -56
  337. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/runner_with/bundle.rb +0 -23
  338. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/runner_with/rails_environment.rb +0 -42
  339. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1/sources/base.rb +0 -40
  340. data/sub/avm-eac_rails_base1/lib/avm/eac_rails_base1.rb +0 -12
  341. data/sub/avm-eac_rails_base1/template/avm/eac_rails_base1/instances/apache_path/extra_content.conf +0 -6
  342. data/sub/avm-eac_rails_base1/template/avm/eac_rails_base1/instances/systemd_unit/tasks_scheduler.service +0 -12
  343. data/sub/avm-eac_rails_base1/template/avm/eac_rails_base1/instances/systemd_unit/tasks_scheduler_command.sh +0 -6
  344. data/sub/avm-eac_redmine_base0/avm-eac_redmine_base0.gemspec +0 -26
  345. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/apache_host.rb +0 -10
  346. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/database.rb +0 -27
  347. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/files.rb +0 -18
  348. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/gitolite.rb +0 -52
  349. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/install.rb +0 -43
  350. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/nodejs.rb +0 -19
  351. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base/web.rb +0 -17
  352. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/base.rb +0 -63
  353. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/deploy.rb +0 -16
  354. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/docker_image.rb +0 -110
  355. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/entity_base.rb +0 -31
  356. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/project.rb +0 -21
  357. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/root.rb +0 -17
  358. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/rest_api/wiki_page.rb +0 -50
  359. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/docker.rb +0 -15
  360. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project/wiki_page/read.rb +0 -25
  361. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project/wiki_page/write.rb +0 -68
  362. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project/wiki_page.rb +0 -26
  363. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project.rb +0 -22
  364. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/instances/runners/project_rename.rb +0 -53
  365. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/base/default_settings.rb +0 -40
  366. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/base.rb +0 -34
  367. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/core_update.rb +0 -125
  368. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/runners/core_update.rb +0 -61
  369. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0/sources/runners/docker.rb +0 -16
  370. data/sub/avm-eac_redmine_base0/lib/avm/eac_redmine_base0.rb +0 -16
  371. data/sub/avm-eac_redmine_base0/locale/en.yml +0 -6
  372. data/sub/avm-eac_redmine_base0/locale/pt-BR.yml +0 -6
  373. data/sub/avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0/instances/apache_host_spec.rb +0 -19
  374. data/sub/avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0/instances/apache_host_spec_files/apache_host_spec_no_ssl_content.conf +0 -11
  375. data/sub/avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0/instances/base/gitolite_spec.rb +0 -24
  376. data/sub/avm-eac_redmine_base0/spec/lib/avm/eac_redmine_base0/instances/base/gitolite_spec_files/config.yml +0 -10
  377. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/deploy/config/install.sh.template +0 -46
  378. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/deploy/config/secrets.yml +0 -8
  379. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/Dockerfile.template +0 -37
  380. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_host_dockerfile +0 -8
  381. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_http_virtualhost.conf.template +0 -10
  382. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_https_virtualhost.conf.template +0 -16
  383. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/apache_path_dockerfile +0 -5
  384. data/sub/avm-eac_redmine_base0/template/avm/eac_redmine_base0/instances/docker_image/start.sh.template +0 -53
  385. /data/sub/{avm-eac_redmine_base0 → avm}/Gemfile +0 -0
  386. /data/sub/{avm-eac_redmine_base0 → avm}/spec/meta/rubocop_spec.rb +0 -0
  387. /data/sub/{avm-eac_rails_base1 → avm-tools}/Gemfile +0 -0
  388. /data/sub/{avm-eac_rails_base1 → avm-tools}/spec/meta/rubocop_spec.rb +0 -0
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module SourceGenerators
5
+ class OptionList
6
+ enable_immutable
7
+ immutable_accessor :option, type: :array
8
+
9
+ alias immutable_option option
10
+
11
+ def option(*args)
12
+ immutable_option(::Avm::SourceGenerators::Option.new(*args))
13
+ end
14
+
15
+ # @return [Hash<Symbol, String>]
16
+ def validate(options_hash)
17
+ options_hash.transform_keys { |k| validate_option(k) }
18
+ end
19
+
20
+ def validate_option(option_name)
21
+ option_name = option_name.to_sym
22
+
23
+ return option_name if options.any? { |option| option.name == option_name }
24
+
25
+ raise "No option found with name \"#{option_name}\""
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module SourceGenerators
5
+ class Runner
6
+ OPTION_NAME_VALUE_SEPARATOR = ':'
7
+
8
+ runner_with :help do
9
+ arg_opt '-o', '--option', 'Option for generator.', repeat: true, optional: true
10
+ pos_arg :stereotype_name
11
+ pos_arg :target_path
12
+ end
13
+
14
+ def run
15
+ start_banner
16
+ generate
17
+ end
18
+
19
+ def generate
20
+ infom 'Generating...'
21
+ generator.perform
22
+ success "Source generated in \"#{generator.target_path}\""
23
+ end
24
+
25
+ # @return [String]
26
+ def help_extra_text
27
+ help_list_section('Stereotypes', ::Avm::Registry.source_generators.available
28
+ .map(&:application_stereotype_name))
29
+ end
30
+
31
+ def start_banner
32
+ infov 'Stereotype', stereotype_name
33
+ infov 'Target path', target_path
34
+ infov 'Generator', generator.class
35
+ end
36
+
37
+ def generator_uncached
38
+ ::Avm::Registry.source_generators
39
+ .detect_optional(stereotype_name, target_path, options) ||
40
+ fatal_error("No generator found for stereotype \"#{stereotype_name}\"")
41
+ end
42
+
43
+ delegate :stereotype_name, to: :parsed
44
+
45
+ # @return [Hash<String, String>]
46
+ def options
47
+ parsed.option.to_h { |v| v.split(OPTION_NAME_VALUE_SEPARATOR) }
48
+ end
49
+
50
+ def target_path
51
+ parsed.target_path.to_pathname
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ module AutoCommit
6
+ class ForFile
7
+ common_constructor :source, :path, :rules
8
+
9
+ delegate :run, to: :scm_auto_commit
10
+
11
+ # @return [Pathname]
12
+ def path_for_auto_commit
13
+ path.relative_path_from(source_for_auto_commit.path)
14
+ end
15
+
16
+ # @return [Avm::Scms::AutoCommit::ForFile]
17
+ def scm_auto_commit
18
+ ::Avm::Scms::AutoCommit::ForFile.new(source_for_auto_commit.scm, path_for_auto_commit,
19
+ rules)
20
+ end
21
+
22
+ # @return [Avm::Sources::Base]
23
+ def source_for_auto_commit
24
+ source.sub_for_path(path) || source
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ module Application
7
+ APPLICATION_NAME_KEY = 'application'
8
+
9
+ # @return [Avm::Applications::Base]
10
+ def application
11
+ @application ||= ::Avm::Applications::Base.new(application_id)
12
+ end
13
+
14
+ # @return [String]
15
+ def application_id
16
+ application_id_by_configuration || application_id_by_directory
17
+ end
18
+
19
+ # @return [String, nil]
20
+ def application_id_by_configuration
21
+ configuration.entry(APPLICATION_NAME_KEY).value
22
+ end
23
+
24
+ # @return [String]
25
+ def application_id_by_directory
26
+ path.basename.to_path.gsub(::EacConfig::EntryPath::PART_SEPARATOR, '-')
27
+ .gsub(/\A-+/, '').gsub(/-+\z/, '')
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'shellwords'
4
+
5
+ module Avm
6
+ module Sources
7
+ class Base
8
+ module Configuration
9
+ PARENT_CONFIGURATION_SUFFIX = %w[subs at].freeze
10
+ CONFIGURATION_FILENAMES = %w[.avm.yml .avm.yaml].freeze
11
+
12
+ # @return [EacConfig::NodeEntry]
13
+ def configuration_entry(*entry_args)
14
+ parent_configuration.if_present do |v|
15
+ parent_entry = v.entry(*entry_args)
16
+ return parent_entry if parent_entry.found?
17
+ end
18
+
19
+ configuration.entry(*entry_args)
20
+ end
21
+
22
+ # The possible absolute paths for configuration files.
23
+ #
24
+ # @return [Array<Pathname>]
25
+ def configuration_paths
26
+ CONFIGURATION_FILENAMES.map { |filename| path.join(filename) }
27
+ end
28
+
29
+ # @return [EacRubyUtils::Envs::Command, nil]
30
+ def configuration_value_to_env_command(value)
31
+ return value if value.is_a?(::EacRubyUtils::Envs::Command)
32
+
33
+ configuration_value_to_shell_words(value).if_present { |v| env.command(v).chdir(path) }
34
+ end
35
+
36
+ # @return [Array<String>, nil]
37
+ def configuration_value_to_shell_words(value)
38
+ return nil if value.blank?
39
+
40
+ value.is_a?(::Enumerable) ? value.map(&:to_s) : ::Shellwords.split(value.to_s)
41
+ end
42
+
43
+ # @return [Array<String>, nil]
44
+ def read_configuration_as_shell_words(key)
45
+ configuration_value_to_shell_words(configuration_entry(key).value)
46
+ end
47
+
48
+ # Utility to read a configuration as a [EacRubyUtils::Envs::Command].
49
+ # @return [EacRubyUtils::Envs::Command]
50
+ def read_configuration_as_env_command(key)
51
+ configuration_value_to_env_command(configuration_entry(key).value)
52
+ end
53
+
54
+ private
55
+
56
+ # @return [EacConfig::YamlFileNode]
57
+ def configuration_uncached
58
+ configuration_paths.each do |config_path|
59
+ configuration_with_filename(config_path, true)
60
+ end
61
+ configuration_with_filename(configuration_paths.first, false)
62
+ end
63
+
64
+ # @return [Enumerable<String>]
65
+ def parent_configuration_prefix
66
+ PARENT_CONFIGURATION_SUFFIX + [relative_path.to_path.gsub(/\A\.+|\.+\z/, '')]
67
+ end
68
+
69
+ # @return [EacConfig::PrefixedPathNode]
70
+ def parent_configuration_uncached
71
+ parent.if_present { |v| v.configuration.with_prefix(parent_configuration_prefix) }
72
+ end
73
+
74
+ # @return [EacConfig::YamlFileNode, nil]
75
+ def configuration_with_filename(config_path, needs_exist)
76
+ return ::EacConfig::YamlFileNode.new(config_path) if !needs_exist || config_path.exist?
77
+
78
+ nil
79
+ end
80
+
81
+ # @return [Avm::Sources::Configuration]
82
+ def old_configuration_uncached
83
+ ::Avm::Sources::Configuration.find_in_path(path) ||
84
+ ::Avm::Sources::Configuration.temp_instance
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ module Instance
7
+ def instance
8
+ application.local_instance
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'i18n'
4
+
5
+ module Avm
6
+ module Sources
7
+ class Base
8
+ module Locale
9
+ LOCALE_KEY = 'locale'
10
+
11
+ def locale
12
+ configured_locale || default_locale
13
+ end
14
+
15
+ def configured_locale
16
+ configuration_entry(LOCALE_KEY).value
17
+ end
18
+
19
+ delegate :default_locale, to: :'::I18n'
20
+
21
+ # @param entry_suffix [String]
22
+ # @param values [Hash]
23
+ # @return [String]
24
+ def i18n_translate(entry_suffix, values = {})
25
+ self.class.i18n_translate(entry_suffix, values.merge(__locale: locale))
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ module Organizational
7
+ DEFAULT_ORGANIZATIONAL = false
8
+ ORGANIZATIONAL_KEY = 'organizational'
9
+
10
+ # @return [Boolean]
11
+ def organizational?
12
+ if organizational_entry.found?
13
+ organizational_entry.value.to_bool
14
+ else
15
+ default_organizational
16
+ end
17
+ end
18
+
19
+ def organizational_entry
20
+ configuration.entry(ORGANIZATIONAL_KEY)
21
+ end
22
+
23
+ # @return [Boolean]
24
+ def default_organizational
25
+ DEFAULT_ORGANIZATIONAL
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ module Parent
7
+ # @return [Avm::Sources::Base]
8
+ def parent_by_option
9
+ options[OPTION_PARENT]
10
+ end
11
+
12
+ # @return [Avm::Sources::Base]
13
+ def parent_by_search
14
+ ::Avm::Registry.sources.detect_by_path_optional(path.parent)
15
+ end
16
+
17
+ private
18
+
19
+ # @return [Avm::Sources::Base]
20
+ def parent_uncached
21
+ parent_by_option || parent_by_search
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ module Stereotype
7
+ STEREOTYPE_NAME_KEY = 'stereotype'
8
+
9
+ # @return [String, nil]
10
+ def stereotype_name_by_configuration
11
+ configuration.entry(STEREOTYPE_NAME_KEY).value
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ class Sub
7
+ class Remove
8
+ acts_as_instance_method
9
+
10
+ # !method initialize(sub)
11
+ # @param sub [Avm::Sources::Base::Sub]
12
+ common_constructor :sub
13
+ delegate :source, to: :sub
14
+
15
+ # @return [void]
16
+ def result
17
+ source.scm.commit_if_change(commit_message) { do_changes }
18
+ end
19
+
20
+ private
21
+
22
+ # @return [String]
23
+ def commit_message
24
+ sub.i18n_translate(:remove_commit_message, sub_path: sub.sub_path)
25
+ end
26
+
27
+ # @return [void]
28
+ def do_changes
29
+ ::FileUtils.rm_rf(sub.absolute_path)
30
+ source.on_sub_updated
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ class Sub
7
+ # !method initialize(source, sub_path)
8
+ # @param source [Avm::Sources::Base]
9
+ # @param sub_path [Pathname]
10
+ common_constructor :source, :sub_path do
11
+ self.sub_path = sub_path.to_pathname.cleanpath
12
+ end
13
+
14
+ # @return [Pathname]
15
+ def absolute_path
16
+ sub_path.expand_path(source.path)
17
+ end
18
+
19
+ require_sub __FILE__, require_mode: :kernel
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ module Subs
7
+ CONFIGURATION_SUBS_EXCLUDE_PATHS_KEY = 'subs.exclude_path'
8
+ CONFIGURATION_SUBS_INCLUDE_PATHS_KEY = 'subs.include_path'
9
+ SUBS_EXCLUDE_PATHS_DEFAULT = [].freeze
10
+ SUBS_INCLUDE_PATHS_DEFAULT = ['sub/*'].freeze
11
+
12
+ # @return [Avm::Sources::Base, nil]
13
+ def sub_for_path(path)
14
+ subs.lazy.map { |sub| path.expand_path.child_of?(sub.path) ? sub : nil }.find(&:present?)
15
+ end
16
+
17
+ # @param sub_path [Pathname]
18
+ # @return [Avm::Sources::Base::Sub]
19
+ def sub(sub_path)
20
+ ::Avm::Sources::Base::Sub.new(self, sub_path)
21
+ end
22
+
23
+ # @return [Enumerable<Avm::Sources::Base>]
24
+ def subs
25
+ subs_paths_to_search
26
+ .map { |sub_path| ::Avm::Registry.sources.detect_optional(sub_path, parent: self) }
27
+ .compact_blank
28
+ .sort_by { |sub| [sub.path] }
29
+ end
30
+
31
+ def subs_paths_to_search
32
+ subs_include_paths.flat_map do |subs_include_path|
33
+ ::Pathname.glob(path.join(subs_include_path)).reject do |sub_path|
34
+ subs_exclude_paths.any? do |subs_exclude_path|
35
+ sub_path.fnmatch?(path.join(subs_exclude_path).to_path)
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ %i[include exclude].each do |type|
42
+ %i[path paths configured_paths default_paths].each do |method_suffix|
43
+ obj_method_name = "subs_#{type}_path_obj"
44
+
45
+ define_method "subs_#{type}_#{method_suffix}" do
46
+ send(obj_method_name).send(method_suffix)
47
+ end
48
+
49
+ define_method "#{obj_method_name}_uncached" do
50
+ ::Avm::Sources::Base::SubsPaths.new(
51
+ self,
52
+ self.class.const_get("CONFIGURATION_SUBS_#{type}_PATHS_KEY".upcase),
53
+ self.class.const_get("SUBS_#{type}_PATHS_DEFAULT".upcase)
54
+ )
55
+ end
56
+
57
+ private "#{obj_method_name}_uncached" # rubocop:disable Style/AccessModifierDeclarations
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ class SubsPaths
7
+ SUBS_PATH_SEPARATOR = ':'
8
+
9
+ common_constructor :source, :configuration_key, :default_paths
10
+
11
+ # @return [String]
12
+ def path
13
+ paths.join(SUBS_PATH_SEPARATOR)
14
+ end
15
+
16
+ # @return [Array<String>]
17
+ def paths
18
+ configured_paths || default_paths
19
+ end
20
+
21
+ # @return [Array<String>]
22
+ def configured_paths
23
+ source.configuration_entry(configuration_key).value.if_present do |v|
24
+ v.split(SUBS_PATH_SEPARATOR)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ module Testing
7
+ DEFAULT_TEST_COMMANDS = {}.freeze
8
+ TEST_KEY = 'test'
9
+ TEST_COMMAND_KEY = "#{TEST_KEY}.command"
10
+ TEST_COMMANDS_KEY = "#{TEST_KEY}.commands"
11
+
12
+ def configured_test_command
13
+ read_configuration_as_env_command(TEST_COMMAND_KEY)
14
+ end
15
+
16
+ # @return [Hash<String, EacRubyUtils::Envs::Command>, nil]
17
+ def configured_test_commands
18
+ configured_value_as_test_commands(configuration_entry(TEST_COMMANDS_KEY).value)
19
+ end
20
+
21
+ # @return [Hash<String, EacRubyUtils::Envs::Command>, nil]
22
+ def configured_value_as_test_commands(value)
23
+ return nil if value.nil?
24
+
25
+ [::EacRubyUtils::Envs::Command, ::Hash, ::Enumerable].each do |type|
26
+ next unless value.is_a?(type)
27
+
28
+ return send(
29
+ "configured_#{type.name.demodulize.variableize}_value_as_test_commands",
30
+ value
31
+ )
32
+ end
33
+
34
+ raise "Value for test commands should be a Hash or a Enumerable (Actual: #{value})"
35
+ end
36
+
37
+ # @return [Hash<String, EacRubyUtils::Envs::Command>]
38
+ def default_test_commands
39
+ DEFAULT_TEST_COMMANDS
40
+ end
41
+
42
+ # @return [Enumerable<EacRubyUtils::Envs::Command>]
43
+ def test_commands
44
+ configured_test_commands ||
45
+ configured_value_as_test_commands(configured_test_command) ||
46
+ default_test_commands
47
+ end
48
+
49
+ protected
50
+
51
+ def configured_command_value_as_test_commands(value)
52
+ configured_enumerable_value_as_test_commands([value])
53
+ end
54
+
55
+ def configured_enumerable_value_as_test_commands(value)
56
+ configured_hash_value_as_test_commands(
57
+ value.each_with_index.to_h { |v, i| ["test_#{i}", v] }
58
+ )
59
+ end
60
+
61
+ def configured_hash_value_as_test_commands(value)
62
+ value.to_h { |k, v| [k.to_s.strip, configuration_value_to_env_command(v)] }
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ module Update
7
+ # To override in subclasses.
8
+ def on_sub_updated
9
+ # Do nothing
10
+ end
11
+
12
+ def update
13
+ update_self
14
+ update_subs
15
+ end
16
+
17
+ def update_self
18
+ scm.commit_if_change(-> { update_self_commit_message }) do
19
+ update_self_content
20
+ parent.if_present(&:on_sub_updated)
21
+ end
22
+ end
23
+
24
+ # Update source self content.
25
+ #
26
+ # To override in subclasses.
27
+ def update_self_content
28
+ # Do nothing
29
+ end
30
+
31
+ def update_self_commit_message
32
+ i18n_translate(__method__)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ class UpdateSub
7
+ enable_method_class
8
+
9
+ common_constructor :source, :sub
10
+
11
+ def result
12
+ update_version
13
+ return unless sub.organizational?
14
+
15
+ sub.update
16
+ end
17
+
18
+ private
19
+
20
+ def update_version
21
+ base_commit = source.scm.head_commit
22
+ sub.scm.update
23
+ on_update_version_commit_change(base_commit) unless base_commit == source.scm.head_commit
24
+ end
25
+
26
+ def on_update_version_commit_change(base_commit)
27
+ source.on_sub_updated if no_scm_updated?
28
+ source.scm.reset_and_commit(base_commit, update_version_commit_info)
29
+ end
30
+
31
+ def no_scm_updated?
32
+ source.scm.head_commit.no_scm_changed_files.any?
33
+ end
34
+
35
+ # @param commit_info [Avm::Scms::CommitInfo]
36
+ def update_version_commit_info
37
+ Avm::Scms::CommitInfo.new.message(
38
+ no_scm_updated? ? update_version_no_scm_message : update_version_scm_message
39
+ )
40
+ end
41
+
42
+ # @return [String]
43
+ def update_version_no_scm_message
44
+ source.i18n_translate(__method__, application_id: sub.application_id,
45
+ path: sub.relative_path, version: sub.version)
46
+ end
47
+
48
+ # @return [String]
49
+ def update_version_scm_message
50
+ sub.scm.i18n_translate(__method__)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Sources
5
+ class Base
6
+ class UpdateSubs
7
+ enable_method_class
8
+
9
+ common_constructor :source
10
+
11
+ def result
12
+ source.subs.each { |sub| source.update_sub(sub) }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end