dapp 0.10.2 → 0.36.24

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 (287) hide show
  1. checksums.yaml +5 -5
  2. data/bin/dapp +77 -15
  3. data/config/en/common.yml +20 -11
  4. data/config/en/net_status.yml +108 -27
  5. data/lib/dapp/cli/cli.rb +1 -0
  6. data/lib/dapp/cli/command/base.rb +111 -0
  7. data/lib/dapp/cli/command/sample/base.rb +28 -0
  8. data/lib/dapp/cli/command/sample/create.rb +24 -0
  9. data/lib/dapp/cli/command/sample/list.rb +25 -0
  10. data/lib/dapp/cli/command/sample.rb +20 -0
  11. data/lib/dapp/cli/command/slug.rb +26 -0
  12. data/lib/dapp/cli/command/update.rb +65 -0
  13. data/lib/dapp/cli/options/ssh.rb +18 -0
  14. data/lib/dapp/cli/options/tag.rb +51 -0
  15. data/lib/dapp/cli.rb +11 -3
  16. data/lib/dapp/config/config.rb +21 -0
  17. data/lib/dapp/config/directive/base.rb +100 -3
  18. data/lib/dapp/core_ext/hash.rb +14 -0
  19. data/lib/dapp/core_ext/pathname.rb +6 -4
  20. data/lib/dapp/dapp/chef.rb +1 -9
  21. data/lib/dapp/dapp/command/common.rb +24 -0
  22. data/lib/dapp/dapp/command/sample/common.rb +54 -0
  23. data/lib/dapp/dapp/command/sample/create.rb +57 -0
  24. data/lib/dapp/dapp/command/sample/list.rb +13 -0
  25. data/lib/dapp/dapp/command/slug.rb +11 -0
  26. data/lib/dapp/dapp/dapp_config.rb +85 -0
  27. data/lib/dapp/dapp/dappfile.rb +108 -27
  28. data/lib/dapp/dapp/deps/base.rb +9 -32
  29. data/lib/dapp/dapp/deps/common.rb +26 -0
  30. data/lib/dapp/dapp/deps/gitartifact.rb +2 -20
  31. data/lib/dapp/dapp/deps/toolchain.rb +11 -0
  32. data/lib/dapp/dapp/git_artifact.rb +6 -4
  33. data/lib/dapp/dapp/lock.rb +6 -5
  34. data/lib/dapp/dapp/logging/base.rb +32 -20
  35. data/lib/dapp/dapp/logging/i18n.rb +5 -1
  36. data/lib/dapp/dapp/logging/process.rb +6 -6
  37. data/lib/dapp/dapp/option_tags.rb +98 -0
  38. data/lib/dapp/dapp/ruby2go.rb +130 -0
  39. data/lib/dapp/dapp/sentry.rb +97 -0
  40. data/lib/dapp/dapp/shellout/base.rb +26 -18
  41. data/lib/dapp/dapp/shellout/streaming.rb +2 -2
  42. data/lib/dapp/dapp/slug.rb +12 -0
  43. data/lib/dapp/dapp/ssh_agent.rb +25 -7
  44. data/lib/dapp/dapp.rb +192 -41
  45. data/lib/dapp/deployment.rb +1 -0
  46. data/lib/dapp/dimg/artifact.rb +12 -4
  47. data/lib/dapp/dimg/build/stage/artifact_base.rb +26 -30
  48. data/lib/dapp/dimg/build/stage/artifact_default.rb +50 -28
  49. data/lib/dapp/dimg/build/stage/base.rb +187 -52
  50. data/lib/dapp/dimg/build/stage/before_install.rb +4 -15
  51. data/lib/dapp/dimg/build/stage/before_install_artifact.rb +4 -0
  52. data/lib/dapp/dimg/build/stage/before_setup.rb +1 -20
  53. data/lib/dapp/dimg/build/stage/build_artifact.rb +1 -20
  54. data/lib/dapp/dimg/build/stage/docker_instructions.rb +5 -4
  55. data/lib/dapp/dimg/build/stage/from.rb +62 -9
  56. data/lib/dapp/dimg/build/stage/ga_archive.rb +14 -1
  57. data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +1 -5
  58. data/lib/dapp/dimg/build/stage/ga_base.rb +5 -35
  59. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +15 -34
  60. data/lib/dapp/dimg/build/stage/ga_related_base.rb +21 -0
  61. data/lib/dapp/dimg/build/stage/import_artifact.rb +22 -11
  62. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch.rb +6 -2
  63. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb +6 -2
  64. data/lib/dapp/dimg/build/stage/install/install.rb +1 -19
  65. data/lib/dapp/dimg/build/stage/instructions.rb +27 -0
  66. data/lib/dapp/dimg/build/stage/mod/group.rb +19 -7
  67. data/lib/dapp/dimg/build/stage/mod/logging.rb +15 -19
  68. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb +24 -1
  69. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch.rb +6 -2
  70. data/lib/dapp/dimg/build/stage/setup/setup.rb +1 -19
  71. data/lib/dapp/dimg/builder/ansible.rb +5 -0
  72. data/lib/dapp/dimg/builder/chef/cookbook.rb +8 -8
  73. data/lib/dapp/dimg/builder/chef.rb +29 -16
  74. data/lib/dapp/dimg/builder/none.rb +1 -34
  75. data/lib/dapp/dimg/builder/ruby2go.rb +57 -0
  76. data/lib/dapp/dimg/builder/shell.rb +1 -20
  77. data/lib/dapp/dimg/cli/cli.rb +2 -1
  78. data/lib/dapp/dimg/cli/command/base.rb +24 -0
  79. data/lib/dapp/dimg/cli/command/dimg/bp.rb +60 -0
  80. data/lib/dapp/dimg/cli/command/dimg/build.rb +43 -0
  81. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/export.rb +9 -4
  82. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/import.rb +4 -4
  83. data/lib/dapp/dimg/cli/{build_context.rb → command/dimg/build_context.rb} +5 -5
  84. data/lib/dapp/dimg/cli/{cleanup.rb → command/dimg/cleanup.rb} +4 -6
  85. data/lib/dapp/dimg/cli/command/dimg/cleanup_repo.rb +47 -0
  86. data/lib/dapp/dimg/cli/command/dimg/flush_local.rb +24 -0
  87. data/lib/dapp/dimg/cli/command/dimg/flush_repo.rb +36 -0
  88. data/lib/dapp/dimg/cli/{list.rb → command/dimg/list.rb} +6 -3
  89. data/lib/dapp/dimg/cli/{mrproper.rb → command/dimg/mrproper.rb} +4 -4
  90. data/lib/dapp/dimg/cli/command/dimg/push.rb +39 -0
  91. data/lib/dapp/dimg/cli/{run.rb → command/dimg/run.rb} +30 -15
  92. data/lib/dapp/dimg/cli/{spush.rb → command/dimg/spush.rb} +4 -4
  93. data/lib/dapp/dimg/cli/{stage_image.rb → command/dimg/stage_image.rb} +12 -3
  94. data/lib/dapp/dimg/cli/command/dimg/stages/base.rb +13 -0
  95. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_local.rb +13 -9
  96. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_repo.rb +6 -8
  97. data/lib/dapp/dimg/cli/command/dimg/stages/flush_local.rb +21 -0
  98. data/lib/dapp/dimg/cli/command/dimg/stages/flush_repo.rb +28 -0
  99. data/lib/dapp/dimg/cli/command/dimg/stages/pull.rb +34 -0
  100. data/lib/dapp/dimg/cli/command/dimg/stages/push.rb +30 -0
  101. data/lib/dapp/dimg/cli/command/dimg/stages.rb +22 -0
  102. data/lib/dapp/dimg/cli/command/dimg/tag.rb +24 -0
  103. data/lib/dapp/dimg/cli/command/dimg.rb +31 -0
  104. data/lib/dapp/dimg/cli/options/introspection.rb +45 -0
  105. data/lib/dapp/dimg/config/config.rb +24 -0
  106. data/lib/dapp/dimg/config/directive/artifact.rb +13 -15
  107. data/lib/dapp/dimg/config/directive/artifact_base.rb +13 -8
  108. data/lib/dapp/dimg/config/directive/artifact_dimg.rb +12 -0
  109. data/lib/dapp/dimg/config/directive/artifact_group.rb +60 -0
  110. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +203 -0
  111. data/lib/dapp/dimg/config/directive/dimg/validation.rb +217 -0
  112. data/lib/dapp/dimg/config/directive/dimg.rb +36 -0
  113. data/lib/dapp/dimg/config/directive/dimg_group.rb +73 -0
  114. data/lib/dapp/dimg/config/directive/dimg_group_base.rb +46 -0
  115. data/lib/dapp/dimg/config/directive/docker/artifact.rb +5 -0
  116. data/lib/dapp/dimg/config/directive/docker/base.rb +2 -3
  117. data/lib/dapp/dimg/config/directive/docker/dimg.rb +4 -4
  118. data/lib/dapp/dimg/config/directive/git_artifact_local.rb +24 -5
  119. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +23 -12
  120. data/lib/dapp/dimg/config/directive/mount.rb +11 -3
  121. data/lib/dapp/dimg/config/directive/shell/dimg.rb +2 -2
  122. data/lib/dapp/dimg/dapp/command/bp.rb +3 -5
  123. data/lib/dapp/dimg/dapp/command/build.rb +4 -6
  124. data/lib/dapp/dimg/dapp/command/build_context/common.rb +2 -2
  125. data/lib/dapp/dimg/dapp/command/build_context/export.rb +14 -14
  126. data/lib/dapp/dimg/dapp/command/build_context/import.rb +28 -23
  127. data/lib/dapp/dimg/dapp/command/cleanup.rb +4 -11
  128. data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +143 -0
  129. data/lib/dapp/dimg/dapp/command/common.rb +148 -38
  130. data/lib/dapp/dimg/dapp/command/flush_local.rb +25 -0
  131. data/lib/dapp/dimg/dapp/command/flush_repo.rb +25 -0
  132. data/lib/dapp/dimg/dapp/command/list.rb +1 -1
  133. data/lib/dapp/dimg/dapp/command/mrproper.rb +16 -63
  134. data/lib/dapp/dimg/dapp/command/push.rb +11 -16
  135. data/lib/dapp/dimg/dapp/command/ruby2go_cleanup.rb +48 -0
  136. data/lib/dapp/dimg/dapp/command/run.rb +4 -4
  137. data/lib/dapp/dimg/dapp/command/spush.rb +4 -5
  138. data/lib/dapp/dimg/dapp/command/stage_image.rb +2 -2
  139. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +13 -115
  140. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +23 -102
  141. data/lib/dapp/dimg/dapp/command/stages/common.rb +57 -39
  142. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +13 -7
  143. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +14 -8
  144. data/lib/dapp/dimg/dapp/command/stages/pull.rb +4 -13
  145. data/lib/dapp/dimg/dapp/command/stages/push.rb +4 -9
  146. data/lib/dapp/dimg/dapp/command/tag.rb +4 -6
  147. data/lib/dapp/dimg/dapp/config_artifact_group.rb +20 -0
  148. data/lib/dapp/dimg/dapp/dapp.rb +40 -0
  149. data/lib/dapp/dimg/dapp/dappfile.rb +43 -0
  150. data/lib/dapp/dimg/dapp/dimg.rb +41 -0
  151. data/lib/dapp/dimg/dimg/git_artifact.rb +25 -11
  152. data/lib/dapp/dimg/dimg/path.rb +7 -9
  153. data/lib/dapp/dimg/dimg/stages.rb +27 -15
  154. data/lib/dapp/dimg/dimg.rb +172 -69
  155. data/lib/dapp/dimg/docker_registry/base.rb +31 -74
  156. data/lib/dapp/dimg/docker_registry/dimg.rb +55 -0
  157. data/lib/dapp/dimg/docker_registry.rb +5 -23
  158. data/lib/dapp/dimg/error/build.rb +1 -1
  159. data/lib/dapp/dimg/error/chef.rb +1 -5
  160. data/lib/dapp/dimg/error/{command.rb → default.rb} +1 -1
  161. data/lib/dapp/dimg/error/dimg.rb +1 -1
  162. data/lib/dapp/dimg/error/lock.rb +1 -1
  163. data/lib/dapp/dimg/error/registry.rb +1 -1
  164. data/lib/dapp/dimg/error/rugged.rb +1 -1
  165. data/lib/dapp/dimg/error/tar_writer.rb +1 -1
  166. data/lib/dapp/dimg/git_artifact.rb +195 -179
  167. data/lib/dapp/dimg/git_repo/base.rb +49 -45
  168. data/lib/dapp/dimg/git_repo/local.rb +45 -0
  169. data/lib/dapp/dimg/git_repo/own.rb +3 -31
  170. data/lib/dapp/dimg/git_repo/remote.rb +65 -26
  171. data/lib/dapp/dimg/image/argument.rb +15 -50
  172. data/lib/dapp/dimg/image/dimg.rb +15 -0
  173. data/lib/dapp/dimg/image/scratch.rb +35 -9
  174. data/lib/dapp/dimg/image/stage.rb +223 -44
  175. data/lib/dapp/dimg/lock/file.rb +4 -4
  176. data/lib/dapp/downloader.rb +117 -0
  177. data/lib/dapp/error/base.rb +1 -5
  178. data/lib/dapp/error/command.rb +5 -0
  179. data/lib/dapp/error/config.rb +5 -0
  180. data/lib/dapp/error/dapp.rb +1 -1
  181. data/lib/dapp/error/dappfile.rb +1 -1
  182. data/lib/dapp/error/default.rb +11 -0
  183. data/lib/dapp/error/mod/user.rb +11 -0
  184. data/lib/dapp/error/shellout.rb +1 -1
  185. data/lib/dapp/exception/base.rb +1 -1
  186. data/lib/dapp/helper/case_conversion.rb +17 -0
  187. data/lib/dapp/helper/cli.rb +18 -7
  188. data/lib/dapp/helper/net_status.rb +5 -1
  189. data/lib/dapp/helper/sha256.rb +1 -1
  190. data/lib/dapp/helper/tar.rb +31 -0
  191. data/lib/dapp/helper/trivia.rb +40 -1
  192. data/lib/dapp/helper/url.rb +23 -0
  193. data/lib/dapp/helper/yaml.rb +24 -0
  194. data/lib/dapp/kube/cli/cli.rb +1 -0
  195. data/lib/dapp/kube/cli/command/base.rb +14 -0
  196. data/lib/dapp/kube/cli/command/kube/chart_create.rb +19 -0
  197. data/lib/dapp/kube/cli/command/kube/deploy.rb +80 -0
  198. data/lib/dapp/kube/cli/command/kube/dismiss.rb +31 -0
  199. data/lib/dapp/kube/cli/command/kube/lint.rb +53 -0
  200. data/lib/dapp/kube/cli/command/kube/minikube_setup.rb +19 -0
  201. data/lib/dapp/kube/cli/command/kube/render.rb +63 -0
  202. data/lib/dapp/kube/cli/command/kube/secret_edit.rb +30 -0
  203. data/lib/dapp/kube/cli/command/kube/secret_extract.rb +39 -0
  204. data/lib/dapp/kube/cli/command/kube/secret_generate.rb +34 -0
  205. data/lib/dapp/kube/cli/command/kube/secret_key_generate.rb +16 -0
  206. data/lib/dapp/kube/cli/command/kube/secret_regenerate.rb +29 -0
  207. data/lib/dapp/kube/cli/command/kube/value_get.rb +47 -0
  208. data/lib/dapp/kube/cli/command/kube.rb +28 -0
  209. data/lib/dapp/kube/dapp/command/chart_create.rb +103 -0
  210. data/lib/dapp/kube/dapp/command/common.rb +379 -0
  211. data/lib/dapp/kube/dapp/command/deploy.rb +351 -0
  212. data/lib/dapp/kube/dapp/command/dismiss.rb +50 -0
  213. data/lib/dapp/kube/dapp/command/lint.rb +69 -0
  214. data/lib/dapp/kube/dapp/command/minikube_setup.rb +402 -0
  215. data/lib/dapp/kube/dapp/command/render.rb +54 -0
  216. data/lib/dapp/kube/dapp/command/ruby2go.rb +17 -0
  217. data/lib/dapp/kube/dapp/command/secret_edit.rb +21 -0
  218. data/lib/dapp/kube/dapp/command/secret_extract.rb +17 -0
  219. data/lib/dapp/kube/dapp/command/secret_generate.rb +21 -0
  220. data/lib/dapp/kube/dapp/command/secret_key_generate.rb +13 -0
  221. data/lib/dapp/kube/dapp/command/secret_regenerate.rb +13 -0
  222. data/lib/dapp/kube/dapp/command/value_get.rb +32 -0
  223. data/lib/dapp/kube/dapp/dapp.rb +26 -0
  224. data/lib/dapp/kube/error/default.rb +7 -0
  225. data/lib/dapp/kube/helm/release.rb +189 -0
  226. data/lib/dapp/kube/helm/values.rb +148 -0
  227. data/lib/dapp/kube/helm.rb +5 -0
  228. data/lib/dapp/kube/kubernetes/client/error.rb +43 -0
  229. data/lib/dapp/kube/kubernetes/client/resource/base.rb +33 -0
  230. data/lib/dapp/kube/kubernetes/client/resource/deployment.rb +11 -0
  231. data/lib/dapp/kube/kubernetes/client/resource/event.rb +8 -0
  232. data/lib/dapp/kube/kubernetes/client/resource/job.rb +27 -0
  233. data/lib/dapp/kube/kubernetes/client/resource/pod.rb +62 -0
  234. data/lib/dapp/kube/kubernetes/client/resource/replicaset.rb +8 -0
  235. data/lib/dapp/kube/kubernetes/client.rb +314 -0
  236. data/lib/dapp/kube/kubernetes/config.rb +132 -0
  237. data/lib/dapp/kube/kubernetes/error.rb +15 -0
  238. data/lib/dapp/kube/kubernetes/manager/base.rb +15 -0
  239. data/lib/dapp/kube/kubernetes/manager/container.rb +103 -0
  240. data/lib/dapp/kube/kubernetes/manager/deployment.rb +212 -0
  241. data/lib/dapp/kube/kubernetes/manager/job.rb +65 -0
  242. data/lib/dapp/kube/kubernetes/manager/pod.rb +69 -0
  243. data/lib/dapp/kube/kubernetes.rb +6 -0
  244. data/lib/dapp/kube/secret.rb +93 -0
  245. data/lib/dapp/kube.rb +1 -0
  246. data/lib/dapp/version.rb +2 -2
  247. data/lib/dapp.rb +155 -61
  248. metadata +208 -61
  249. data/lib/dapp/cli/base.rb +0 -63
  250. data/lib/dapp/config/base.rb +0 -54
  251. data/lib/dapp/config/error/config.rb +0 -7
  252. data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +0 -27
  253. data/lib/dapp/dimg/build/stage/ga_dependencies_base.rb +0 -20
  254. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +0 -22
  255. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +0 -22
  256. data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +0 -23
  257. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +0 -32
  258. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +0 -22
  259. data/lib/dapp/dimg/cli/base.rb +0 -16
  260. data/lib/dapp/dimg/cli/bp.rb +0 -37
  261. data/lib/dapp/dimg/cli/build.rb +0 -64
  262. data/lib/dapp/dimg/cli/dimg.rb +0 -30
  263. data/lib/dapp/dimg/cli/push.rb +0 -61
  264. data/lib/dapp/dimg/cli/stages/flush_local.rb +0 -23
  265. data/lib/dapp/dimg/cli/stages/flush_repo.rb +0 -24
  266. data/lib/dapp/dimg/cli/stages/pull.rb +0 -28
  267. data/lib/dapp/dimg/cli/stages/push.rb +0 -24
  268. data/lib/dapp/dimg/cli/stages.rb +0 -22
  269. data/lib/dapp/dimg/cli/tag.rb +0 -24
  270. data/lib/dapp/dimg/config/artifact_dimg.rb +0 -17
  271. data/lib/dapp/dimg/config/artifact_group.rb +0 -43
  272. data/lib/dapp/dimg/config/base.rb +0 -7
  273. data/lib/dapp/dimg/config/dimg/instance_methods.rb +0 -179
  274. data/lib/dapp/dimg/config/dimg/validation.rb +0 -126
  275. data/lib/dapp/dimg/config/dimg.rb +0 -24
  276. data/lib/dapp/dimg/config/dimg_group.rb +0 -61
  277. data/lib/dapp/dimg/config/dimg_group_base.rb +0 -54
  278. data/lib/dapp/dimg/config/dimg_group_main.rb +0 -22
  279. data/lib/dapp/dimg/dapp/command.rb +0 -21
  280. data/lib/dapp/dimg/dimg/tags.rb +0 -65
  281. data/lib/dapp/dimg/docker_registry/base/authorization.rb +0 -63
  282. data/lib/dapp/dimg/docker_registry/base/request.rb +0 -34
  283. data/lib/dapp/dimg/docker_registry/default.rb +0 -18
  284. data/lib/dapp/dimg/error/base.rb +0 -7
  285. data/lib/dapp/dimg/error/config.rb +0 -7
  286. data/lib/dapp/dimg/exception/introspect_image.rb +0 -7
  287. data/lib/dapp/dimg/image/docker.rb +0 -134
@@ -18,7 +18,7 @@ module Dapp
18
18
  sub_directive_eval { @_group = group }
19
19
  end
20
20
 
21
- def export(absolute_dir_path = '/', &blk)
21
+ def export(absolute_dir_path = nil, &blk)
22
22
  self.class.const_get('Export').new(absolute_dir_path, dapp: dapp, &blk).tap do |export|
23
23
  @_export << export
24
24
  end
@@ -36,9 +36,8 @@ module Dapp
36
36
  class Export < Directive::Base
37
37
  attr_accessor :_cwd, :_to, :_include_paths, :_exclude_paths, :_owner, :_group
38
38
 
39
- def initialize(cwd = '/', **kwargs, &blk)
40
- raise Error::Config, code: :export_cwd_absolute_path_required unless Pathname(cwd).absolute?
41
- @_cwd = path_format(cwd)
39
+ def initialize(cwd, **kwargs, &blk)
40
+ self._cwd = cwd
42
41
  @_include_paths ||= []
43
42
  @_exclude_paths ||= []
44
43
 
@@ -56,9 +55,15 @@ module Dapp
56
55
  }
57
56
  end
58
57
 
58
+ def _cwd=(value)
59
+ return if value.nil?
60
+ raise ::Dapp::Error::Config, code: :export_cwd_absolute_path_required unless Pathname(value).absolute?
61
+ @_cwd = path_format(value)
62
+ end
63
+
59
64
  def to(absolute_path)
60
65
  sub_directive_eval do
61
- raise Error::Config, code: :export_to_absolute_path_required unless Pathname(absolute_path).absolute?
66
+ raise ::Dapp::Error::Config, code: :export_to_absolute_path_required unless Pathname(absolute_path).absolute?
62
67
  @_to = path_format(absolute_path)
63
68
  end
64
69
  end
@@ -66,7 +71,7 @@ module Dapp
66
71
  def include_paths(*relative_paths)
67
72
  sub_directive_eval do
68
73
  unless relative_paths.all? { |path| Pathname(path).relative? }
69
- raise Error::Config, code: :export_include_paths_relative_path_required
74
+ raise ::Dapp::Error::Config, code: :export_include_paths_relative_path_required
70
75
  end
71
76
  _include_paths.concat(relative_paths.map(&method(:path_format)))
72
77
  end
@@ -75,7 +80,7 @@ module Dapp
75
80
  def exclude_paths(*relative_paths)
76
81
  sub_directive_eval do
77
82
  unless relative_paths.all? { |path| Pathname(path).relative? }
78
- raise Error::Config, code: :export_exclude_paths_relative_path_required
83
+ raise ::Dapp::Error::Config, code: :export_exclude_paths_relative_path_required
79
84
  end
80
85
  _exclude_paths.concat(relative_paths.map(&method(:path_format)))
81
86
  end
@@ -90,7 +95,7 @@ module Dapp
90
95
  end
91
96
 
92
97
  def validate!
93
- raise Error::Config, code: :export_to_required if _to.nil?
98
+ raise ::Dapp::Error::Config, code: :export_to_required if _to.nil?
94
99
  end
95
100
  end
96
101
  end
@@ -0,0 +1,12 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class ArtifactDimg < Dimg
6
+ def validate_scratch!
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,60 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class ArtifactGroup < DimgGroup
6
+ attr_reader :_name
7
+
8
+ def initialize(name = nil, dapp:)
9
+ super(dapp: dapp)
10
+ @_name = name
11
+ end
12
+
13
+ def export(*args, &blk)
14
+ _artifact_export(_artifact_config, *args, &blk)
15
+ end
16
+
17
+ def _artifact_config
18
+ artifact_config_name = "artifact-#{[_name, SecureRandom.hex(2)].compact.join('-')}"
19
+ pass_to(ArtifactDimg.new(artifact_config_name, dapp: dapp))
20
+ end
21
+
22
+ def _artifact_export(artifact_config, *args, &blk)
23
+ artifact = Artifact.new(dapp: dapp, config: artifact_config)
24
+ artifact.export(*args, &blk).tap do
25
+ _export.concat artifact._export
26
+ end
27
+ end
28
+
29
+ def _shell(&blk)
30
+ @_shell ||= Shell::Artifact.new(dapp: dapp, &blk)
31
+ end
32
+
33
+ def _docker(&blk)
34
+ @_docker ||= Docker::Artifact.new(dapp: dapp, &blk)
35
+ end
36
+
37
+ def _export
38
+ @_export ||= []
39
+ end
40
+
41
+ def validate!
42
+ _export.each(&:validate!)
43
+ end
44
+
45
+ undef :artifact
46
+ undef :dimg
47
+ undef :dimg_group
48
+
49
+ protected
50
+
51
+ def check_dimg_directive_order(_directive)
52
+ end
53
+
54
+ def check_dimg_group_directive_order(_directive)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,203 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class Dimg < Base
6
+ module InstanceMethods
7
+ attr_reader :_builder
8
+ attr_reader :_chef, :_shell, :_docker, :_git_artifact, :_mount, :_artifact, :_ansible
9
+ attr_reader :_artifact_groups
10
+ attr_reader :_from_dimg, :_from_dimg_artifact
11
+
12
+ def chef(&blk)
13
+ builder(:chef)
14
+ directive_eval(_chef, &blk)
15
+ end
16
+
17
+ def shell(&blk)
18
+ builder(:shell)
19
+ directive_eval(_shell, &blk)
20
+ end
21
+
22
+ def docker(&blk)
23
+ directive_eval(_docker, &blk)
24
+ end
25
+
26
+ def artifact(name = nil, &blk)
27
+ pass_to(ArtifactGroup.new(name, dapp: dapp), :clone_to_artifact).tap do |artifact_group|
28
+ _context_artifact_groups << directive_eval(artifact_group, &blk)
29
+ dapp.artifact_config(name, artifact_group._artifact_config) unless name.nil?
30
+ end
31
+ end
32
+
33
+ def import(name, from = nil, &blk)
34
+ ArtifactGroup.new(dapp: dapp).tap do |artifact_group|
35
+ artifact_group._artifact_export(dapp.artifact_config_by_name(name), from, &blk)
36
+ _context_artifact_groups << artifact_group
37
+ end
38
+ end
39
+
40
+ def git(url = nil, &blk)
41
+ type = url.nil? ? :local : :remote
42
+ _git_artifact.public_send(type, url.to_s, &blk)
43
+ end
44
+
45
+ def mount(to, &blk)
46
+ Mount.new(to, dapp: dapp, &blk).tap do |mount|
47
+ _mount << mount
48
+ end
49
+ end
50
+
51
+ def _builder
52
+ @_builder || :none
53
+ end
54
+
55
+ def _chef
56
+ @_chef ||= Chef.new(dapp: dapp)
57
+ end
58
+
59
+ def _shell
60
+ @_shell ||= Shell::Dimg.new(dapp: dapp)
61
+ end
62
+
63
+ def _docker
64
+ @_docker ||= Docker::Dimg.new(dapp: dapp)
65
+ end
66
+
67
+ def _mount
68
+ @_mount ||= []
69
+ end
70
+
71
+ def _git_artifact
72
+ @_git_artifact ||= GitArtifact.new(dapp: dapp)
73
+ end
74
+
75
+ [:build_dir, :tmp_dir, :custom_dir].each do |mount_type|
76
+ define_method "_#{mount_type}_mount" do
77
+ _mount.select { |m| m._type == mount_type }
78
+ end
79
+ end
80
+
81
+ def _artifact_groups
82
+ @_artifact_groups ||= []
83
+ end
84
+
85
+ def _context_artifact_groups
86
+ @_context_artifact_groups ||= []
87
+ end
88
+
89
+ def _artifact
90
+ [_artifact_groups, _context_artifact_groups].flatten.map(&:_export).flatten
91
+ end
92
+
93
+ [:before, :after].each do |order|
94
+ [:setup, :install].each do |stage|
95
+ define_method "_#{order}_#{stage}_artifact" do
96
+ _artifact.select do |art|
97
+ art.public_send("_#{order}") == stage
98
+ end
99
+ end
100
+ end
101
+ end
102
+
103
+ def _import_artifact
104
+ _artifact.select(&:not_associated?)
105
+ end
106
+
107
+ class GitArtifact < Base
108
+ attr_reader :_local, :_remote
109
+
110
+ def initialize(**kwargs, &blk)
111
+ @_local = []
112
+ @_remote = []
113
+
114
+ super(**kwargs, &blk)
115
+ end
116
+
117
+ def local(_, &blk)
118
+ GitArtifactLocal.new(dapp: dapp, &blk).tap do |git|
119
+ @_local << git
120
+ end
121
+ end
122
+
123
+ def remote(repo_url, &blk)
124
+ GitArtifactRemote.new(repo_url, dapp: dapp, &blk).tap do |git|
125
+ @_remote << git
126
+ end
127
+ end
128
+
129
+ def _local
130
+ @_local.map(&:_export).flatten
131
+ end
132
+
133
+ def _remote
134
+ @_remote.map(&:_export).flatten
135
+ end
136
+
137
+ def empty?
138
+ (_local + _remote).empty?
139
+ end
140
+
141
+ def validate!
142
+ (_local + _remote).each(&:validate!)
143
+ end
144
+ end
145
+
146
+ def artifacts_after_parsing!
147
+ _artifacts_auto_excluding!
148
+ _artifact.map(&:_config).each(&:artifacts_after_parsing!)
149
+ end
150
+
151
+ protected
152
+
153
+ def builder(type)
154
+ @_builder = type if _builder == :none
155
+ raise ::Dapp::Error::Config, code: :builder_type_conflict unless @_builder == type
156
+ end
157
+
158
+ def passed_directives
159
+ [:@_chef, :@_shell, :@_docker, :@_git_artifact, :@_mount, :@_artifact_groups, :@_builder]
160
+ end
161
+
162
+ def _artifacts_auto_excluding!
163
+ path_to_relative = proc { |path| path.reverse.chomp('/').reverse }
164
+
165
+ all_artifacts.reduce({}) do |hash, artifact|
166
+ unless artifact._to.nil?
167
+ to_common = artifact._to[/^\/[^\/]*/]
168
+ hash[to_common] ||= []
169
+ hash[to_common] << artifact
170
+ end
171
+ hash
172
+ end.each do |to_common, artifacts|
173
+ include_paths_common = artifacts.reduce([]) do |arr, artifact|
174
+ arr << artifact._to.sub(to_common, '')
175
+ arr.concat(artifact._include_paths.map { |path| File.join(artifact._to.sub(to_common, ''), path) } )
176
+ arr
177
+ end.map(&path_to_relative).uniq
178
+
179
+ artifacts.each do |artifact|
180
+ artifact_include_shift = path_to_relative.call(artifact._to.sub(to_common, ''))
181
+
182
+ include_paths_common.each do |path|
183
+ next if artifact_include_shift.start_with? path
184
+
185
+ path = path_to_relative.call(path.sub(artifact_include_shift, ''))
186
+ unless artifact._include_paths.any? { |ipath| ipath.start_with? path } || artifact._exclude_paths.any? { |epath| path.start_with? epath }
187
+ artifact._exclude_paths << path
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
193
+
194
+ def all_artifacts
195
+ _artifact + _git_artifact._local + _git_artifact._remote
196
+ end
197
+ end # InstanceMethods
198
+ # rubocop:enable Metrics/ModuleLength
199
+ end # Dimg
200
+ end # Directive
201
+ end # Config
202
+ end # Dimg
203
+ end # Dapp
@@ -0,0 +1,217 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class Dimg < Base
6
+ module Validation
7
+ include Helper::Trivia
8
+
9
+ def validate!
10
+ directives_validate!
11
+ validate_scratch!
12
+ validate_artifacts!
13
+ validate_artifacts_artifacts!
14
+ end
15
+
16
+ protected
17
+
18
+ def validate_scratch!
19
+ if _docker._from.nil? && _from_dimg.nil? && _from_dimg_artifact.nil?
20
+ validate_scratch_directives!
21
+ validate_scratch_artifacts!
22
+ else
23
+ raise ::Dapp::Error::Config, code: :stage_artifact_not_associated unless _import_artifact.empty?
24
+ end
25
+ end
26
+
27
+ def directives_validate!
28
+ passed_directives.each do |v|
29
+ next if (value = instance_variable_get(v)).nil?
30
+ Array(value).each do |elm|
31
+ elm.validate! if elm.respond_to?(:validate!)
32
+ end
33
+ end
34
+ _context_artifact_groups.each(&:validate!)
35
+ _mount.map(&:_to).tap do |mounts_points|
36
+ mounts_points.each do |path|
37
+ raise ::Dapp::Error::Config, code: :mount_duplicate_to, data: { path: path } if mounts_points.count(path) > 1
38
+ end
39
+ end
40
+ end
41
+
42
+ def validate_scratch_directives!
43
+ directives = [[:_shell, :shell], [:_chef, :chef], [:_git_artifact, :git],
44
+ [:_tmp_dir_mount, :mount], [:_build_dir_mount, :mount], [:_custom_dir_mount, :mount]]
45
+ directives.each do |name, user_name|
46
+ raise ::Dapp::Error::Config, code: :scratch_unsupported_directive,
47
+ data: { directive: user_name } unless public_send(name).empty?
48
+ end
49
+
50
+ docker_directives = [:_expose, :_env, :_cmd, :_onbuild, :_workdir, :_user, :_entrypoint]
51
+ docker_directives.each do |directive|
52
+ value = _docker.public_send(directive)
53
+ raise ::Dapp::Error::Config, code: :scratch_unsupported_directive,
54
+ data: { directive: "docker.#{directive}" } unless value.nil? || value.empty?
55
+ end
56
+ end
57
+
58
+ def validate_scratch_artifacts!
59
+ raise ::Dapp::Error::Config, code: :scratch_artifact_associated unless _associated_artifacts.empty?
60
+ raise ::Dapp::Error::Config, code: :scratch_artifact_required if _import_artifact.empty?
61
+ _import_artifact.each do |artifact|
62
+ raise ::Dapp::Error::Config, code: :scratch_artifact_docker_from if artifact._config._docker._from.nil?
63
+ end
64
+ end
65
+
66
+ def validate_artifacts_artifacts!
67
+ _artifact.each { |artifact_dimg| artifact_dimg._config.validate! }
68
+ end
69
+
70
+ def validate_artifacts!
71
+ artifacts = validate_artifact_format(all_artifacts)
72
+ loop do
73
+ break if artifacts.empty?
74
+ verifiable_artifact = artifacts.shift
75
+ artifacts.each do |artifact|
76
+ next if verifiable_artifact[:index] == artifact[:index]
77
+ begin
78
+ validate_artifact!(verifiable_artifact, artifact)
79
+ validate_artifact!(artifact, verifiable_artifact)
80
+ rescue ::Dapp::Error::Config => e
81
+ conflict_between_artifacts!(artifact, verifiable_artifact) if e.net_status[:code] == :artifact_conflict
82
+ raise
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ def conflict_between_artifacts!(*formatted_artifacts)
89
+ artifacts = formatted_artifacts.flatten.map { |formatted_artifact| formatted_artifact[:related_artifact] }
90
+ artifact_imports = []
91
+ git_artifacts = []
92
+ artifacts.map do |artifact|
93
+ (artifact.is_a?(Artifact::Export) ? artifact_imports : git_artifacts) << artifact
94
+ end
95
+
96
+ common_artifact_dsl = proc do |a|
97
+ [].tap do |context|
98
+ context << " to '#{a._to}'"
99
+ [:include_paths, :exclude_paths].each do |directive|
100
+ next if (paths = a.send("_#{directive}")).empty?
101
+ context << " #{directive} '#{paths.join("', '")}'"
102
+ end
103
+ end
104
+ end
105
+
106
+ import_dsl = proc do |ga|
107
+ [].tap do |context|
108
+ context << "artifact.export('#{ga._cwd}') do"
109
+ context.concat(common_artifact_dsl.call(ga))
110
+ context << 'end'
111
+ end
112
+ end
113
+
114
+ git_artifact_dsl = proc do |ga|
115
+ [].tap do |context|
116
+ context << "git#{"('#{ga._url}')" if ga.respond_to?(:_url)}.add('#{ga._cwd}') do"
117
+ context.concat(common_artifact_dsl.call(ga))
118
+ context << 'end'
119
+ end
120
+ end
121
+
122
+ common_artifact_yaml = proc do |a|
123
+ [].tap do |context|
124
+ context << " to: #{a._to}"
125
+ {
126
+ include_paths: 'includePaths',
127
+ exclude_paths: 'excludePaths',
128
+ }.each do |directive, yamlDirective|
129
+ next if (paths = a.send("_#{directive}")).empty?
130
+ context << " #{yamlDirective}: [#{paths.join(", ")}]"
131
+ end
132
+ end
133
+ end
134
+
135
+ import_yaml = proc do |a|
136
+ [].tap do |context|
137
+ context << "- artifact: #{a._config._name}"
138
+ context << " add: #{a._cwd}"
139
+ context.concat(common_artifact_yaml.call(a))
140
+ end
141
+ end
142
+
143
+ git_artifact_yaml = proc do |ga|
144
+ [].tap do |context|
145
+ if ga.respond_to?(:_url)
146
+ context << "- url: #{ga._url}"
147
+ context << " add: #{ga._cwd}"
148
+ else
149
+ context << "- add: #{ga._cwd}"
150
+ end
151
+ context.concat(common_artifact_yaml.call(ga))
152
+ end
153
+ end
154
+
155
+ dappfile_context = [].tap do |msg|
156
+ if artifact_imports.count != 0
157
+ if dapp
158
+ artifact_imports.each { |a| msg.concat(import_dsl.call(a)) }
159
+ else
160
+ msg << 'import:'
161
+ artifact_imports.each { |a| msg.concat(import_yaml.call(a)) }
162
+ end
163
+ end
164
+
165
+ if git_artifacts.count != 0
166
+ if dapp
167
+ git_artifacts.each { |a| msg.concat(git_artifact_dsl.call(a)) }
168
+ else
169
+ msg << 'git:'
170
+ git_artifacts.each { |a| msg.concat(git_artifact_yaml.call(a)) }
171
+ end
172
+ end
173
+ end.join("\n")
174
+ raise ::Dapp::Error::Config, code: :artifact_conflict, data: { dappfile_context: dappfile_context }
175
+ end
176
+
177
+ def validate_artifact_format(artifacts)
178
+ artifacts.map do |a|
179
+ include_paths = begin
180
+ if a._include_paths.empty?
181
+ [a._to]
182
+ else
183
+ a._include_paths.dup.map { |p| File.join(a._to, p) }
184
+ end
185
+ end
186
+
187
+ {
188
+ index: artifacts.index(a),
189
+ include_paths: include_paths,
190
+ exclude_paths: a._exclude_paths.dup.map { |p| File.join(a._to, p) },
191
+ related_artifact: a
192
+ }
193
+ end
194
+ end
195
+
196
+ def validate_artifact!(verifiable_artifact, artifact)
197
+ cases = []
198
+ cases << verifiable_artifact[:include_paths].any? do |verifiable_path|
199
+ !ignore_path?(verifiable_path, paths: artifact[:include_paths], exclude_paths: artifact[:exclude_paths])
200
+ end
201
+ cases << (verifiable_artifact[:include_paths].empty? && artifact[:include_paths].empty?)
202
+
203
+ raise ::Dapp::Error::Config, code: :artifact_conflict if cases.any?
204
+ end
205
+
206
+ def _associated_artifacts
207
+ _artifact.select do |art|
208
+ !(art._before.nil? && art._after.nil?)
209
+ end
210
+ end
211
+ end # Validation
212
+ # rubocop:enable Metrics/ModuleLength
213
+ end # Dimg
214
+ end # Directive
215
+ end # Config
216
+ end # Dimg
217
+ end # Dapp
@@ -0,0 +1,36 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class Dimg < Base
6
+ include Validation
7
+ include InstanceMethods
8
+
9
+ attr_reader :_name
10
+
11
+ def initialize(name, dapp:)
12
+ self._name = name
13
+ super(dapp: dapp)
14
+ end
15
+
16
+ def _name=(name)
17
+ sub_directive_eval do
18
+ return self if name.nil?
19
+ name = name.to_s
20
+ validate_compliance!(dimg_name_pattern, name, :dimg_name_incorrect)
21
+ @_name = name
22
+ end
23
+ end
24
+
25
+ protected
26
+
27
+ def dimg_name_pattern
28
+ separator = '[_\.]|(__)|(-*)'
29
+ alpha_numeric = '[a-z0-9]'
30
+ "^#{alpha_numeric}(#{separator}#{alpha_numeric})*$"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,73 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class DimgGroup < Base
6
+ include DimgGroupBase
7
+ include Dimg::InstanceMethods
8
+
9
+ def chef(&blk)
10
+ check_dimg_directive_order(:chef)
11
+ super
12
+ end
13
+
14
+ def shell(&blk)
15
+ check_dimg_directive_order(:shell)
16
+ super
17
+ end
18
+
19
+ def docker(&blk)
20
+ check_dimg_directive_order(:docker)
21
+ super
22
+ end
23
+
24
+ def artifact(name = nil, &blk)
25
+ check_dimg_group_directive_order(:artifact)
26
+ super
27
+ end
28
+
29
+ def git(url = nil, &blk)
30
+ check_dimg_directive_order(:git)
31
+ super
32
+ end
33
+
34
+ def mount(to, &blk)
35
+ check_dimg_directive_order(:mount)
36
+ super
37
+ end
38
+
39
+ protected
40
+
41
+ def before_dimg_eval(dimg)
42
+ before_eval_base(dimg)
43
+ end
44
+
45
+ def before_dimg_group_eval(dimg_group)
46
+ before_eval_base(dimg_group)
47
+ end
48
+
49
+ def before_eval_base(obj)
50
+ pass_to(obj)
51
+ pass_context_artifact_groups_to(obj)
52
+ end
53
+
54
+ def pass_context_artifact_groups_to(obj)
55
+ obj.instance_variable_set(:@_artifact_groups, [obj._artifact_groups, clone_variable(_context_artifact_groups)].flatten)
56
+ end
57
+
58
+ def check_dimg_directive_order(directive)
59
+ dapp.log_config_warning(desc: { code: 'wrong_using_base_directive',
60
+ data: { directive: directive },
61
+ context: 'warning' }) if _dimg.any? || _dimg_group.any? || _artifact.any?
62
+ end
63
+
64
+ def check_dimg_group_directive_order(directive)
65
+ dapp.log_config_warning(desc: { code: 'wrong_using_directive',
66
+ data: { directive: directive },
67
+ context: 'warning' }) if _dimg.any? || _dimg_group.any?
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end