dapp 0.8.0 → 0.9.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 (299) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dapp +5 -5
  3. data/config/en/common.yml +6 -4
  4. data/config/en/net_status.yml +8 -7
  5. data/lib/dapp.rb +157 -139
  6. data/lib/dapp/cli.rb +6 -16
  7. data/lib/dapp/cli/base.rb +3 -5
  8. data/lib/dapp/config/base.rb +19 -7
  9. data/lib/dapp/config/directive/base.rb +0 -1
  10. data/lib/dapp/config/error/config.rb +7 -0
  11. data/lib/dapp/core_ext/hash.rb +0 -2
  12. data/lib/dapp/core_ext/pathname.rb +1 -3
  13. data/lib/dapp/{project.rb → dapp.rb} +2 -21
  14. data/lib/dapp/{project → dapp}/chef.rb +2 -4
  15. data/lib/dapp/{project → dapp}/dappfile.rb +5 -7
  16. data/lib/dapp/{project → dapp}/deps/base.rb +3 -6
  17. data/lib/dapp/{project → dapp}/deps/gitartifact.rb +2 -5
  18. data/lib/dapp/{project → dapp}/git_artifact.rb +2 -4
  19. data/lib/dapp/{project → dapp}/lock.rb +3 -5
  20. data/lib/dapp/{project → dapp}/logging/base.rb +2 -5
  21. data/lib/dapp/{project → dapp}/logging/i18n.rb +2 -3
  22. data/lib/dapp/{project → dapp}/logging/paint.rb +2 -4
  23. data/lib/dapp/{project → dapp}/logging/process.rb +2 -5
  24. data/lib/dapp/{project → dapp}/shellout/base.rb +2 -4
  25. data/lib/dapp/{project → dapp}/shellout/streaming.rb +3 -8
  26. data/lib/dapp/{project → dapp}/ssh_agent.rb +6 -9
  27. data/lib/dapp/dimg.rb +1 -192
  28. data/lib/dapp/dimg/artifact.rb +24 -0
  29. data/lib/dapp/dimg/build/stage/after_install_artifact.rb +14 -0
  30. data/lib/dapp/dimg/build/stage/after_setup_artifact.rb +18 -0
  31. data/lib/dapp/dimg/build/stage/artifact_base.rb +80 -0
  32. data/lib/dapp/dimg/build/stage/artifact_default.rb +63 -0
  33. data/lib/dapp/dimg/build/stage/base.rb +210 -0
  34. data/lib/dapp/dimg/build/stage/before_install.rb +33 -0
  35. data/lib/dapp/dimg/build/stage/before_install_artifact.rb +14 -0
  36. data/lib/dapp/dimg/build/stage/before_setup.rb +31 -0
  37. data/lib/dapp/dimg/build/stage/before_setup_artifact.rb +14 -0
  38. data/lib/dapp/dimg/build/stage/build_artifact.rb +31 -0
  39. data/lib/dapp/dimg/build/stage/docker_instructions.rb +25 -0
  40. data/lib/dapp/dimg/build/stage/from.rb +50 -0
  41. data/lib/dapp/dimg/build/stage/ga_archive.rb +28 -0
  42. data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +27 -0
  43. data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +22 -0
  44. data/lib/dapp/dimg/build/stage/ga_base.rb +80 -0
  45. data/lib/dapp/dimg/build/stage/ga_dependencies_base.rb +20 -0
  46. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +54 -0
  47. data/lib/dapp/dimg/build/stage/import_artifact.rb +64 -0
  48. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch.rb +22 -0
  49. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +22 -0
  50. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb +22 -0
  51. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +22 -0
  52. data/lib/dapp/dimg/build/stage/install/install.rb +35 -0
  53. data/lib/dapp/dimg/build/stage/mod/group.rb +42 -0
  54. data/lib/dapp/dimg/build/stage/mod/logging.rb +101 -0
  55. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb +22 -0
  56. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +32 -0
  57. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch.rb +22 -0
  58. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +22 -0
  59. data/lib/dapp/dimg/build/stage/setup/setup.rb +35 -0
  60. data/lib/dapp/dimg/builder.rb +6 -0
  61. data/lib/dapp/{builder → dimg/builder}/base.rb +4 -5
  62. data/lib/dapp/{builder → dimg/builder}/chef.rb +41 -33
  63. data/lib/dapp/dimg/builder/chef/berksfile.rb +121 -0
  64. data/lib/dapp/dimg/builder/chef/cookbook.rb +285 -0
  65. data/lib/dapp/dimg/builder/chef/cookbook_metadata.rb +106 -0
  66. data/lib/dapp/{builder → dimg/builder}/none.rb +4 -5
  67. data/lib/dapp/{builder → dimg/builder}/shell.rb +5 -6
  68. data/lib/dapp/dimg/cli/base.rb +16 -0
  69. data/lib/dapp/dimg/cli/bp.rb +37 -0
  70. data/lib/dapp/dimg/cli/build.rb +64 -0
  71. data/lib/dapp/dimg/cli/build_context.rb +18 -0
  72. data/lib/dapp/dimg/cli/build_context/export.rb +26 -0
  73. data/lib/dapp/dimg/cli/build_context/import.rb +17 -0
  74. data/lib/dapp/dimg/cli/cleanup.rb +22 -0
  75. data/lib/dapp/dimg/cli/cli.rb +1 -0
  76. data/lib/dapp/dimg/cli/dimg.rb +30 -0
  77. data/lib/dapp/dimg/cli/list.rb +17 -0
  78. data/lib/dapp/dimg/cli/mrproper.rb +26 -0
  79. data/lib/dapp/dimg/cli/push.rb +61 -0
  80. data/lib/dapp/dimg/cli/run.rb +59 -0
  81. data/lib/dapp/{cli → dimg/cli}/spush.rb +7 -7
  82. data/lib/dapp/dimg/cli/stage_image.rb +24 -0
  83. data/lib/dapp/dimg/cli/stages.rb +22 -0
  84. data/lib/dapp/dimg/cli/stages/cleanup_local.rb +44 -0
  85. data/lib/dapp/dimg/cli/stages/cleanup_repo.rb +26 -0
  86. data/lib/dapp/dimg/cli/stages/flush_local.rb +23 -0
  87. data/lib/dapp/dimg/cli/stages/flush_repo.rb +24 -0
  88. data/lib/dapp/dimg/cli/stages/pull.rb +28 -0
  89. data/lib/dapp/dimg/cli/stages/push.rb +24 -0
  90. data/lib/dapp/dimg/cli/tag.rb +24 -0
  91. data/lib/dapp/dimg/config/artifact_dimg.rb +17 -0
  92. data/lib/dapp/dimg/config/artifact_group.rb +47 -0
  93. data/lib/dapp/dimg/config/base.rb +7 -0
  94. data/lib/dapp/dimg/config/dimg.rb +24 -0
  95. data/lib/dapp/dimg/config/dimg/instance_methods.rb +177 -0
  96. data/lib/dapp/dimg/config/dimg/validation.rb +126 -0
  97. data/lib/dapp/dimg/config/dimg_group.rb +61 -0
  98. data/lib/dapp/dimg/config/dimg_group_base.rb +54 -0
  99. data/lib/dapp/dimg/config/dimg_group_main.rb +22 -0
  100. data/lib/dapp/dimg/config/directive/artifact.rb +70 -0
  101. data/lib/dapp/dimg/config/directive/artifact_base.rb +97 -0
  102. data/lib/dapp/dimg/config/directive/base.rb +9 -0
  103. data/lib/dapp/dimg/config/directive/chef.rb +68 -0
  104. data/lib/dapp/dimg/config/directive/docker/artifact.rb +15 -0
  105. data/lib/dapp/dimg/config/directive/docker/base.rb +22 -0
  106. data/lib/dapp/dimg/config/directive/docker/dimg.rb +82 -0
  107. data/lib/dapp/dimg/config/directive/git_artifact_local.rb +47 -0
  108. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +58 -0
  109. data/lib/dapp/dimg/config/directive/mount.rb +27 -0
  110. data/lib/dapp/dimg/config/directive/shell/artifact.rb +18 -0
  111. data/lib/dapp/dimg/config/directive/shell/dimg.rb +65 -0
  112. data/lib/dapp/dimg/dapp/command.rb +21 -0
  113. data/lib/dapp/dimg/dapp/command/bp.rb +20 -0
  114. data/lib/dapp/dimg/dapp/command/build.rb +22 -0
  115. data/lib/dapp/dimg/dapp/command/build_context/common.rb +27 -0
  116. data/lib/dapp/dimg/dapp/command/build_context/export.rb +55 -0
  117. data/lib/dapp/dimg/dapp/command/build_context/import.rb +71 -0
  118. data/lib/dapp/dimg/dapp/command/cleanup.rb +23 -0
  119. data/lib/dapp/dimg/dapp/command/common.rb +96 -0
  120. data/lib/dapp/dimg/dapp/command/list.rb +19 -0
  121. data/lib/dapp/dimg/dapp/command/mrproper.rb +75 -0
  122. data/lib/dapp/dimg/dapp/command/push.rb +27 -0
  123. data/lib/dapp/dimg/dapp/command/run.rb +15 -0
  124. data/lib/dapp/dimg/dapp/command/spush.rb +17 -0
  125. data/lib/dapp/dimg/dapp/command/stage_image.rb +14 -0
  126. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +137 -0
  127. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +124 -0
  128. data/lib/dapp/dimg/dapp/command/stages/common.rb +85 -0
  129. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +21 -0
  130. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +21 -0
  131. data/lib/dapp/dimg/dapp/command/stages/pull.rb +26 -0
  132. data/lib/dapp/dimg/dapp/command/stages/push.rb +22 -0
  133. data/lib/dapp/dimg/dapp/command/tag.rb +17 -0
  134. data/lib/dapp/dimg/dimg.rb +192 -0
  135. data/lib/dapp/dimg/dimg/git_artifact.rb +26 -0
  136. data/lib/dapp/dimg/dimg/path.rb +37 -0
  137. data/lib/dapp/dimg/dimg/stages.rb +60 -0
  138. data/lib/dapp/dimg/dimg/tags.rb +65 -0
  139. data/lib/dapp/dimg/docker_registry.rb +37 -0
  140. data/lib/dapp/dimg/docker_registry/base.rb +109 -0
  141. data/lib/dapp/dimg/docker_registry/base/authorization.rb +63 -0
  142. data/lib/dapp/dimg/docker_registry/base/request.rb +34 -0
  143. data/lib/dapp/dimg/docker_registry/default.rb +18 -0
  144. data/lib/dapp/dimg/error/base.rb +7 -0
  145. data/lib/dapp/dimg/error/build.rb +7 -0
  146. data/lib/dapp/dimg/error/chef.rb +11 -0
  147. data/lib/dapp/dimg/error/command.rb +7 -0
  148. data/lib/dapp/dimg/error/config.rb +7 -0
  149. data/lib/dapp/dimg/error/dimg.rb +7 -0
  150. data/lib/dapp/dimg/error/lock.rb +7 -0
  151. data/lib/dapp/dimg/error/registry.rb +7 -0
  152. data/lib/dapp/dimg/error/rugged.rb +7 -0
  153. data/lib/dapp/dimg/error/shellout.rb +7 -0
  154. data/lib/dapp/dimg/error/tar_writer.rb +7 -0
  155. data/lib/dapp/dimg/exception/base.rb +7 -0
  156. data/lib/dapp/dimg/exception/introspect_image.rb +7 -0
  157. data/lib/dapp/dimg/exception/registry.rb +7 -0
  158. data/lib/dapp/dimg/filelock.rb +43 -0
  159. data/lib/dapp/dimg/git_artifact.rb +241 -18
  160. data/lib/dapp/dimg/git_repo/base.rb +90 -0
  161. data/lib/dapp/dimg/git_repo/own.rb +39 -0
  162. data/lib/dapp/dimg/git_repo/remote.rb +50 -0
  163. data/lib/dapp/dimg/image/argument.rb +143 -0
  164. data/lib/dapp/dimg/image/docker.rb +127 -0
  165. data/lib/dapp/dimg/image/scratch.rb +32 -0
  166. data/lib/dapp/dimg/image/stage.rb +95 -0
  167. data/lib/dapp/dimg/lock/base.rb +51 -0
  168. data/lib/dapp/dimg/lock/file.rb +48 -0
  169. data/lib/dapp/error/base.rb +0 -1
  170. data/lib/dapp/error/dapp.rb +5 -0
  171. data/lib/dapp/error/dappfile.rb +0 -1
  172. data/lib/dapp/error/shellout.rb +0 -1
  173. data/lib/dapp/exception/base.rb +0 -1
  174. data/lib/dapp/helper/cli.rb +5 -6
  175. data/lib/dapp/helper/net_status.rb +0 -1
  176. data/lib/dapp/helper/sha256.rb +0 -1
  177. data/lib/dapp/helper/trivia.rb +0 -1
  178. data/lib/dapp/prctl.rb +0 -1
  179. data/lib/dapp/version.rb +1 -2
  180. metadata +172 -140
  181. data/lib/dapp/artifact.rb +0 -23
  182. data/lib/dapp/build/stage/after_install_artifact.rb +0 -13
  183. data/lib/dapp/build/stage/after_setup_artifact.rb +0 -17
  184. data/lib/dapp/build/stage/artifact_base.rb +0 -80
  185. data/lib/dapp/build/stage/artifact_default.rb +0 -63
  186. data/lib/dapp/build/stage/base.rb +0 -203
  187. data/lib/dapp/build/stage/before_install.rb +0 -32
  188. data/lib/dapp/build/stage/before_install_artifact.rb +0 -13
  189. data/lib/dapp/build/stage/before_setup.rb +0 -30
  190. data/lib/dapp/build/stage/before_setup_artifact.rb +0 -13
  191. data/lib/dapp/build/stage/build_artifact.rb +0 -36
  192. data/lib/dapp/build/stage/docker_instructions.rb +0 -24
  193. data/lib/dapp/build/stage/from.rb +0 -34
  194. data/lib/dapp/build/stage/ga_archive.rb +0 -27
  195. data/lib/dapp/build/stage/ga_archive_dependencies.rb +0 -26
  196. data/lib/dapp/build/stage/ga_artifact_patch.rb +0 -21
  197. data/lib/dapp/build/stage/ga_base.rb +0 -79
  198. data/lib/dapp/build/stage/ga_dependencies_base.rb +0 -19
  199. data/lib/dapp/build/stage/ga_latest_patch.rb +0 -53
  200. data/lib/dapp/build/stage/import_artifact.rb +0 -65
  201. data/lib/dapp/build/stage/install/ga_post_install_patch.rb +0 -21
  202. data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +0 -21
  203. data/lib/dapp/build/stage/install/ga_pre_install_patch.rb +0 -21
  204. data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +0 -21
  205. data/lib/dapp/build/stage/install/install.rb +0 -40
  206. data/lib/dapp/build/stage/mod/group.rb +0 -42
  207. data/lib/dapp/build/stage/mod/logging.rb +0 -104
  208. data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +0 -21
  209. data/lib/dapp/build/stage/setup/ga_post_setup_patch_dependencies.rb +0 -31
  210. data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +0 -21
  211. data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +0 -21
  212. data/lib/dapp/build/stage/setup/setup.rb +0 -40
  213. data/lib/dapp/builder/chef/berksfile.rb +0 -78
  214. data/lib/dapp/builder/chef/cookbook.rb +0 -257
  215. data/lib/dapp/builder/chef/cookbook_metadata.rb +0 -54
  216. data/lib/dapp/builder/chef/error.rb +0 -12
  217. data/lib/dapp/cli/bp.rb +0 -37
  218. data/lib/dapp/cli/build.rb +0 -60
  219. data/lib/dapp/cli/cleanup.rb +0 -22
  220. data/lib/dapp/cli/list.rb +0 -17
  221. data/lib/dapp/cli/mrproper.rb +0 -26
  222. data/lib/dapp/cli/push.rb +0 -61
  223. data/lib/dapp/cli/run.rb +0 -53
  224. data/lib/dapp/cli/stage_image.rb +0 -24
  225. data/lib/dapp/cli/stages.rb +0 -23
  226. data/lib/dapp/cli/stages/cleanup_local.rb +0 -44
  227. data/lib/dapp/cli/stages/cleanup_repo.rb +0 -26
  228. data/lib/dapp/cli/stages/flush_local.rb +0 -23
  229. data/lib/dapp/cli/stages/flush_repo.rb +0 -24
  230. data/lib/dapp/cli/stages/pull.rb +0 -28
  231. data/lib/dapp/cli/stages/push.rb +0 -24
  232. data/lib/dapp/cli/tag.rb +0 -24
  233. data/lib/dapp/config/artifact_dimg.rb +0 -20
  234. data/lib/dapp/config/artifact_group.rb +0 -56
  235. data/lib/dapp/config/dimg.rb +0 -23
  236. data/lib/dapp/config/dimg/instance_methods.rb +0 -194
  237. data/lib/dapp/config/dimg/validation.rb +0 -125
  238. data/lib/dapp/config/dimg_group.rb +0 -60
  239. data/lib/dapp/config/dimg_group_base.rb +0 -53
  240. data/lib/dapp/config/dimg_group_main.rb +0 -21
  241. data/lib/dapp/config/directive/artifact.rb +0 -69
  242. data/lib/dapp/config/directive/artifact_base.rb +0 -93
  243. data/lib/dapp/config/directive/chef.rb +0 -57
  244. data/lib/dapp/config/directive/docker/artifact.rb +0 -15
  245. data/lib/dapp/config/directive/docker/base.rb +0 -20
  246. data/lib/dapp/config/directive/docker/dimg.rb +0 -81
  247. data/lib/dapp/config/directive/git_artifact_local.rb +0 -13
  248. data/lib/dapp/config/directive/git_artifact_remote.rb +0 -57
  249. data/lib/dapp/config/directive/mount.rb +0 -26
  250. data/lib/dapp/config/directive/shell/artifact.rb +0 -17
  251. data/lib/dapp/config/directive/shell/dimg.rb +0 -65
  252. data/lib/dapp/dimg/path.rb +0 -37
  253. data/lib/dapp/dimg/stages.rb +0 -59
  254. data/lib/dapp/dimg/tags.rb +0 -65
  255. data/lib/dapp/docker_registry.rb +0 -36
  256. data/lib/dapp/docker_registry/base.rb +0 -109
  257. data/lib/dapp/docker_registry/default.rb +0 -18
  258. data/lib/dapp/docker_registry/mod/authorization.rb +0 -63
  259. data/lib/dapp/docker_registry/mod/request.rb +0 -32
  260. data/lib/dapp/error/build.rb +0 -6
  261. data/lib/dapp/error/config.rb +0 -6
  262. data/lib/dapp/error/dimg.rb +0 -6
  263. data/lib/dapp/error/image.rb +0 -6
  264. data/lib/dapp/error/project.rb +0 -6
  265. data/lib/dapp/error/registry.rb +0 -6
  266. data/lib/dapp/error/rugged.rb +0 -6
  267. data/lib/dapp/error/tar_writer.rb +0 -6
  268. data/lib/dapp/exception/introspect_image.rb +0 -6
  269. data/lib/dapp/exception/registry.rb +0 -6
  270. data/lib/dapp/filelock.rb +0 -43
  271. data/lib/dapp/git_artifact.rb +0 -241
  272. data/lib/dapp/git_repo/base.rb +0 -88
  273. data/lib/dapp/git_repo/own.rb +0 -38
  274. data/lib/dapp/git_repo/remote.rb +0 -49
  275. data/lib/dapp/image/argument.rb +0 -134
  276. data/lib/dapp/image/docker.rb +0 -115
  277. data/lib/dapp/image/scratch.rb +0 -32
  278. data/lib/dapp/image/stage.rb +0 -94
  279. data/lib/dapp/lock/base.rb +0 -51
  280. data/lib/dapp/lock/error.rb +0 -14
  281. data/lib/dapp/lock/file.rb +0 -45
  282. data/lib/dapp/project/command/bp.rb +0 -21
  283. data/lib/dapp/project/command/build.rb +0 -20
  284. data/lib/dapp/project/command/cleanup.rb +0 -24
  285. data/lib/dapp/project/command/common.rb +0 -96
  286. data/lib/dapp/project/command/list.rb +0 -20
  287. data/lib/dapp/project/command/mrproper.rb +0 -69
  288. data/lib/dapp/project/command/push.rb +0 -28
  289. data/lib/dapp/project/command/run.rb +0 -15
  290. data/lib/dapp/project/command/spush.rb +0 -18
  291. data/lib/dapp/project/command/stage_image.rb +0 -15
  292. data/lib/dapp/project/command/stages/cleanup_local.rb +0 -138
  293. data/lib/dapp/project/command/stages/cleanup_repo.rb +0 -125
  294. data/lib/dapp/project/command/stages/common.rb +0 -86
  295. data/lib/dapp/project/command/stages/flush_local.rb +0 -22
  296. data/lib/dapp/project/command/stages/flush_repo.rb +0 -22
  297. data/lib/dapp/project/command/stages/pull.rb +0 -27
  298. data/lib/dapp/project/command/stages/push.rb +0 -23
  299. data/lib/dapp/project/command/tag.rb +0 -18
@@ -0,0 +1,126 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ class Dimg < Base
5
+ module Validation
6
+ protected
7
+
8
+ def validate!
9
+ directives_validate!
10
+ validate_scratch!
11
+ validate_artifacts!
12
+ validate_artifacts_artifacts!
13
+ end
14
+
15
+ def validate_scratch!
16
+ if _docker._from.nil?
17
+ validate_scratch_directives!
18
+ validate_scratch_artifacts!
19
+ else
20
+ raise Error::Config, code: :stage_artifact_not_associated unless _import_artifact.empty?
21
+ end
22
+ end
23
+
24
+ def directives_validate!
25
+ passed_directives.each do |v|
26
+ next if (value = instance_variable_get(v)).nil?
27
+ Array(value).each do |elm|
28
+ elm.send(:validate!) if elm.methods.include?(:validate!)
29
+ end
30
+ end
31
+ end
32
+
33
+ def validate_scratch_directives!
34
+ directives = [[:_shell, :shell], [:_chef, :chef], [:_git_artifact, :git],
35
+ [:_tmp_dir_mount, :mount], [:_build_dir_mount, :mount]]
36
+ directives.each do |name, user_name|
37
+ raise Error::Config,
38
+ code: :scratch_unsupported_directive,
39
+ data: { directive: user_name } unless public_send(name).send(:empty?)
40
+ end
41
+
42
+ docker_directives = [:_expose, :_env, :_cmd, :_onbuild, :_workdir, :_user, :_entrypoint]
43
+ docker_directives.each do |directive|
44
+ value = _docker.public_send(directive)
45
+ raise Error::Config,
46
+ code: :scratch_unsupported_directive,
47
+ data: { directive: "docker.#{directive}" } unless value.nil? || value.send(:empty?)
48
+ end
49
+ end
50
+
51
+ def validate_scratch_artifacts!
52
+ raise Error::Config, code: :scratch_artifact_associated unless _associated_artifacts.empty?
53
+ raise Error::Config, code: :scratch_artifact_required if _import_artifact.empty?
54
+ _import_artifact.each do |artifact|
55
+ raise Error::Config, code: :scratch_artifact_docker_from if artifact._config._docker._from.nil?
56
+ end
57
+ end
58
+
59
+ def validate_artifacts_artifacts!
60
+ _artifact.each { |artifact_dimg| artifact_dimg._config.validate! }
61
+ end
62
+
63
+ def validate_artifacts!
64
+ artifacts = validate_artifact_format(validated_artifacts)
65
+ loop do
66
+ break if artifacts.empty?
67
+ verifiable_artifact = artifacts.shift
68
+ artifacts.select { |a| a[:to] == verifiable_artifact[:to] }.each do |artifact|
69
+ next if verifiable_artifact[:index] == artifact[:index]
70
+ validate_artifact!(verifiable_artifact, artifact)
71
+ validate_artifact!(artifact, verifiable_artifact)
72
+ end
73
+ end
74
+ end
75
+
76
+ def validate_artifact_format(artifacts)
77
+ artifacts.map do |a|
78
+ path_format = proc { |path| File.expand_path(File.join('/', path, '/'))[1..-1] }
79
+
80
+ path_format.call(a._to) =~ %r{^([^\/]*)\/?(.*)$}
81
+ to = Regexp.last_match(1)
82
+ include_paths = a._include_paths.dup
83
+ include_paths << Regexp.last_match(2) unless Regexp.last_match(2).empty?
84
+ exclude_paths = a._exclude_paths.dup
85
+
86
+ {
87
+ index: artifacts.index(a),
88
+ to: to,
89
+ include_paths: include_paths.map(&path_format),
90
+ exclude_paths: exclude_paths.map(&path_format)
91
+ }
92
+ end
93
+ end
94
+
95
+ def validate_artifact!(verifiable_artifact, artifact)
96
+ verifiable_artifact[:include_paths].each do |verifiable_path|
97
+ potential_conflicts = artifact[:include_paths].select { |path| path.start_with?(verifiable_path) }
98
+ validate_artifact_path!(verifiable_artifact, potential_conflicts)
99
+ end.empty? && verifiable_artifact[:exclude_paths].empty? && raise(Error::Config, code: :artifact_conflict)
100
+ validate_artifact_path!(verifiable_artifact, artifact[:include_paths]) if verifiable_artifact[:include_paths].empty?
101
+ end
102
+
103
+ def validate_artifact_path!(verifiable_artifact, potential_conflicts)
104
+ potential_conflicts.all? do |path|
105
+ loop do
106
+ break if verifiable_artifact[:exclude_paths].include?(path) || ((path = File.dirname(path)) == '.')
107
+ end
108
+ verifiable_artifact[:exclude_paths].include?(path)
109
+ end.tap { |res| res || raise(Error::Config, code: :artifact_conflict) }
110
+ end
111
+
112
+ def _associated_artifacts
113
+ _artifact.select do |art|
114
+ !(art._before.nil? && art._after.nil?)
115
+ end
116
+ end
117
+
118
+ def validated_artifacts
119
+ _artifact + _git_artifact._local + _git_artifact._remote
120
+ end
121
+ end # Validation
122
+ # rubocop:enable Metrics/ModuleLength
123
+ end # Dimg
124
+ end # Config
125
+ end # Dimg
126
+ end # Dapp
@@ -0,0 +1,61 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ class DimgGroup < DimgGroupBase
5
+ include Dimg::InstanceMethods
6
+
7
+ def chef(&blk)
8
+ check_dimg_directive_order(:chef)
9
+ super
10
+ end
11
+
12
+ def shell(&blk)
13
+ check_dimg_directive_order(:shell)
14
+ super
15
+ end
16
+
17
+ def docker(&blk)
18
+ check_dimg_directive_order(:docker)
19
+ super
20
+ end
21
+
22
+ def artifact(&blk)
23
+ check_dimg_group_directive_order(:artifact)
24
+ super
25
+ end
26
+
27
+ def git(url = nil, &blk)
28
+ check_dimg_directive_order(:git)
29
+ super
30
+ end
31
+
32
+ def mount(to, &blk)
33
+ check_dimg_directive_order(:mount)
34
+ super
35
+ end
36
+
37
+ protected
38
+
39
+ def before_dimg_eval(dimg)
40
+ pass_to_default(dimg)
41
+ end
42
+
43
+ def before_dimg_group_eval(dimg_group)
44
+ pass_to_default(dimg_group)
45
+ end
46
+
47
+ def check_dimg_directive_order(directive)
48
+ dapp.log_config_warning(desc: { code: 'wrong_using_base_directive',
49
+ data: { directive: directive },
50
+ context: 'warning' }) if _dimg.any? || _dimg_group.any? || _artifact.any?
51
+ end
52
+
53
+ def check_dimg_group_directive_order(directive)
54
+ dapp.log_config_warning(desc: { code: 'wrong_using_directive',
55
+ data: { directive: directive },
56
+ context: 'warning' }) if _dimg.any? || _dimg_group.any?
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,54 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ class DimgGroupBase < Base
5
+ attr_reader :_dimg_group
6
+
7
+ def initialize(dapp:)
8
+ @_dimg = []
9
+ @_dimg_group = []
10
+
11
+ super(dapp: dapp)
12
+ end
13
+
14
+ def dev_mode
15
+ @_dev_mode = true
16
+ end
17
+
18
+ def dimg(name = nil, &blk)
19
+ Config::Dimg.new(name, dapp: dapp).tap do |dimg|
20
+ before_dimg_eval(dimg)
21
+ dimg.instance_eval(&blk) if block_given?
22
+ @_dimg << dimg
23
+ end
24
+ end
25
+
26
+ def dimg_group(&blk)
27
+ Config::DimgGroup.new(dapp: dapp).tap do |dimg_group|
28
+ before_dimg_group_eval(dimg_group)
29
+ dimg_group.instance_eval(&blk) if block_given?
30
+ @_dimg_group << dimg_group
31
+ end
32
+ end
33
+
34
+ def _dimg
35
+ (@_dimg + @_dimg_group.map(&:_dimg)).flatten
36
+ end
37
+
38
+ protected
39
+
40
+ def before_dimg_eval(dimg)
41
+ pass_to_default(dimg)
42
+ end
43
+
44
+ def before_dimg_group_eval(dimg_group)
45
+ pass_to_default(dimg_group)
46
+ end
47
+
48
+ def pass_to_default(obj)
49
+ obj.instance_variable_set(:@_dev_mode, @_dev_mode)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,22 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ class DimgGroupMain < DimgGroupBase
5
+ def dimg(name = nil, &blk)
6
+ with_dimg_validation { super(name, &blk) }
7
+ end
8
+
9
+ def dimg_group(&blk)
10
+ with_dimg_validation { super(&blk) }
11
+ end
12
+
13
+ protected
14
+
15
+ def with_dimg_validation
16
+ yield
17
+ raise Error::Config, code: :dimg_name_required if _dimg.any? { |dimg| dimg._name.nil? } && _dimg.size > 1
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,70 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class Artifact < ArtifactBase
6
+ attr_reader :_config
7
+
8
+ def initialize(config:, **kwargs, &blk)
9
+ @_config = config
10
+
11
+ super(**kwargs, &blk)
12
+ end
13
+
14
+ def _export
15
+ super do |export|
16
+ export._before ||= @_before
17
+ export._after ||= @_after
18
+ export._config = _config
19
+ end
20
+ end
21
+
22
+ class Export < ArtifactBase::Export
23
+ attr_accessor :_config
24
+ attr_accessor :_before, :_after
25
+
26
+ def not_associated?
27
+ (_before || _after).nil?
28
+ end
29
+
30
+ protected
31
+
32
+ def before(stage)
33
+ stage = stage.to_sym
34
+ associate_validation!(:before, stage, @_before)
35
+ @_before = stage
36
+ end
37
+
38
+ def after(stage)
39
+ stage = stage.to_sym
40
+ associate_validation!(:after, stage, @_after)
41
+ @_after = stage
42
+ end
43
+
44
+ def associate_validation!(type, stage, _old_stage)
45
+ conflict_type = [:before, :after].find { |t| t != type }
46
+ conflict_stage = send("_#{conflict_type}")
47
+
48
+ raise Error::Config, code: :stage_artifact_not_supported_associated_stage,
49
+ data: { stage: "#{type} #{stage.inspect}" } unless [:install, :setup].include? stage
50
+
51
+ raise Error::Config, code: :stage_artifact_double_associate,
52
+ data: { stage: "#{type} #{stage.inspect}",
53
+ conflict_stage: "#{conflict_type} #{conflict_stage.inspect}" } if conflict_stage
54
+
55
+ defined_stage = send("_#{type}")
56
+ dapp.log_config_warning(
57
+ desc: {
58
+ code: :stage_artifact_rewritten,
59
+ context: :warning,
60
+ data: { stage: "#{type} #{stage.inspect}",
61
+ conflict_stage: "#{type} #{defined_stage.inspect}" }
62
+ }
63
+ ) if defined_stage
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,97 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class ArtifactBase < Base
6
+ attr_reader :_owner, :_group
7
+
8
+ def initialize(**kwargs, &blk)
9
+ @_export = []
10
+
11
+ super(**kwargs, &blk)
12
+ end
13
+
14
+ def _export
15
+ @_export.each do |export|
16
+ export._owner ||= @_owner
17
+ export._group ||= @_group
18
+
19
+ yield(export) if block_given?
20
+ end
21
+ end
22
+
23
+ class Export < Directive::Base
24
+ attr_accessor :_cwd, :_to, :_include_paths, :_exclude_paths, :_owner, :_group
25
+
26
+ def initialize(cwd = '/', **kwargs, &blk)
27
+ raise Error::Config, code: :export_cwd_absolute_path_required unless Pathname(cwd).absolute?
28
+ @_cwd = path_format(cwd)
29
+ @_include_paths ||= []
30
+ @_exclude_paths ||= []
31
+
32
+ super(**kwargs, &blk)
33
+ end
34
+
35
+ def _artifact_options
36
+ {
37
+ to: _to,
38
+ cwd: _cwd,
39
+ include_paths: _include_paths,
40
+ exclude_paths: _exclude_paths,
41
+ owner: _owner,
42
+ group: _group
43
+ }
44
+ end
45
+
46
+ protected
47
+
48
+ def to(absolute_path)
49
+ raise Error::Config, code: :export_to_absolute_path_required unless Pathname(absolute_path).absolute?
50
+ @_to = path_format(absolute_path)
51
+ end
52
+
53
+ def include_paths(*relative_paths)
54
+ unless relative_paths.all? { |path| Pathname(path).relative? }
55
+ raise Error::Config, code: :export_include_paths_relative_path_required
56
+ end
57
+ _include_paths.concat(relative_paths.map(&method(:path_format)))
58
+ end
59
+
60
+ def exclude_paths(*relative_paths)
61
+ unless relative_paths.all? { |path| Pathname(path).relative? }
62
+ raise Error::Config, code: :export_exclude_paths_relative_path_required
63
+ end
64
+ _exclude_paths.concat(relative_paths.map(&method(:path_format)))
65
+ end
66
+
67
+ def owner(owner)
68
+ @_owner = owner
69
+ end
70
+
71
+ def group(group)
72
+ @_group = group
73
+ end
74
+
75
+ def validate!
76
+ raise Error::Config, code: :export_to_required if _to.nil?
77
+ end
78
+ end
79
+
80
+ protected
81
+
82
+ def owner(owner)
83
+ @_owner = owner
84
+ end
85
+
86
+ def group(group)
87
+ @_group = group
88
+ end
89
+
90
+ def export(absolute_dir_path = '/', &blk)
91
+ @_export << self.class.const_get('Export').new(absolute_dir_path, dapp: dapp, &blk)
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,9 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class Base < ::Dapp::Config::Directive::Base; end
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,68 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class Chef < Base
6
+ attr_accessor :_dimod, :_cookbook, :_recipe, :_attributes
7
+
8
+ def initialize(**kwargs, &blk)
9
+ @_dimod = []
10
+ @_recipe = []
11
+ @_cookbook = {}
12
+
13
+ super(**kwargs, &blk)
14
+ end
15
+
16
+ def dimod(name, *args)
17
+ @_dimod << name
18
+ cookbook(name, *args)
19
+ end
20
+
21
+ def recipe(name)
22
+ @_recipe << name
23
+ end
24
+
25
+ def attributes
26
+ @_attributes ||= Attributes.new
27
+ end
28
+
29
+ def cookbook(name, version_constraint=nil, **kwargs)
30
+ @_cookbook[name] = {}.tap do |desc|
31
+ desc.update(kwargs)
32
+ desc[:name] = name
33
+ desc[:version_constraint] = version_constraint if version_constraint
34
+ desc[:path] = File.expand_path(desc[:path], dapp.path) if desc.key? :path
35
+ end
36
+ end
37
+
38
+ %i(before_install install before_setup setup build_artifact).each do |stage|
39
+ define_method("_#{stage}_attributes") do
40
+ var = "@__#{stage}_attributes"
41
+ instance_variable_get(var) || instance_variable_set(var, Attributes.new)
42
+ end
43
+ end
44
+
45
+ class Attributes < Hash
46
+ def [](key)
47
+ super || begin
48
+ self[key] = self.class.new
49
+ end
50
+ end
51
+ end # Attributes
52
+
53
+ %i(before_install install before_setup setup build_artifact).each do |stage|
54
+ define_method("__#{stage}_attributes") do
55
+ attributes.in_depth_merge send("_#{stage}_attributes")
56
+ end
57
+ end
58
+
59
+ protected
60
+
61
+ def empty?
62
+ (@_dimod + @_recipe).empty? && attributes.empty?
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end