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
@@ -1,192 +1 @@
1
- module Dapp
2
- # Dimg
3
- class Dimg
4
- include GitArtifact
5
- include Path
6
- include Tags
7
- include Stages
8
-
9
- include Helper::Sha256
10
-
11
- attr_reader :config
12
- attr_reader :ignore_git_fetch
13
- attr_reader :should_be_built
14
- attr_reader :project
15
-
16
- def initialize(config:, project:, should_be_built: false, ignore_git_fetch: false)
17
- @config = config
18
- @project = project
19
-
20
- @ignore_git_fetch = ignore_git_fetch
21
- @should_be_built = should_be_built
22
-
23
- raise Error::Dimg, code: :dimg_not_built if should_be_built?
24
- end
25
-
26
- def build!
27
- with_introspection do
28
- project.lock("#{project.name}.images", readonly: true) do
29
- last_stage.build_lock! do
30
- begin
31
- builder.before_build_check
32
- last_stage.build!
33
- ensure
34
- after_stages_build!
35
- end
36
- end
37
- end
38
- end
39
- ensure
40
- cleanup_tmp
41
- end
42
-
43
- def after_stages_build!
44
- return unless last_stage.image.built? || dev_mode?
45
- last_stage.save_in_cache!
46
- artifacts.each { |artifact| artifact.last_stage.save_in_cache! }
47
- end
48
-
49
- def tag!(tag)
50
- project.lock("#{project.name}.images", readonly: true) do
51
- dimg_name = config._name
52
- if project.dry_run?
53
- project.log_state(dimg_name, state: project.t(code: 'state.tag'), styles: { status: :success })
54
- else
55
- project.log_process(dimg_name, process: project.t(code: 'status.process.tagging')) do
56
- last_stage.image.tag!(tag)
57
- end
58
- end
59
- end
60
- end
61
-
62
- def export!(repo, format:)
63
- project.lock("#{project.name}.images", readonly: true) do
64
- tags.each do |tag|
65
- image_name = format % { repo: repo, dimg_name: config._name, tag: tag }
66
- export_base!(last_stage.image, image_name)
67
- end
68
- end
69
- end
70
-
71
- def export_stages!(repo, format:)
72
- project.lock("#{project.name}.images", readonly: true) do
73
- export_images.each do |image|
74
- image_name = format % { repo: repo, signature: image.name.split(':').last }
75
- export_base!(image, image_name)
76
- end
77
- end
78
- end
79
-
80
- def export_base!(image, image_name)
81
- if project.dry_run?
82
- project.log_state(image_name, state: project.t(code: 'state.push'), styles: { status: :success })
83
- else
84
- project.lock("image.#{hashsum image_name}") do
85
- Dapp::Image::Stage.cache_reset(image_name)
86
- project.log_process(image_name, process: project.t(code: 'status.process.pushing')) do
87
- project.with_log_indent do
88
- image.export!(image_name)
89
- end
90
- end
91
- end
92
- end
93
- end
94
-
95
- def import_stages!(repo, format:)
96
- project.lock("#{project.name}.images", readonly: true) do
97
- import_images.each do |image|
98
- begin
99
- image_name = format % { repo: repo, signature: image.name.split(':').last }
100
- import_base!(image, image_name)
101
- rescue Error::Shellout
102
- next
103
- end
104
- break unless project.pull_all_stages?
105
- end
106
- end
107
- end
108
-
109
- def import_base!(image, image_name)
110
- if project.dry_run?
111
- project.log_state(image_name, state: project.t(code: 'state.pull'), styles: { status: :success })
112
- else
113
- project.lock("image.#{hashsum image_name}") do
114
- project.log_process(image_name,
115
- process: project.t(code: 'status.process.pulling'),
116
- status: { failed: project.t(code: 'status.failed.not_pulled') },
117
- style: { failed: :secondary }) do
118
- image.import!(image_name)
119
- end
120
- end
121
- end
122
- end
123
-
124
- def run(docker_options, command)
125
- cmd = "docker run #{[docker_options, last_stage.image.built_id, command].flatten.compact.join(' ')}"
126
- if project.dry_run?
127
- project.log(cmd)
128
- else
129
- system(cmd) || raise(Error::Dimg, code: :dimg_not_run)
130
- end
131
- end
132
-
133
- def stage_image_name(stage_name)
134
- stages.find { |stage| stage.send(:name) == stage_name }.image.name
135
- end
136
-
137
- def builder
138
- @builder ||= Builder.const_get(config._builder.capitalize).new(self)
139
- end
140
-
141
- def artifacts
142
- @artifacts ||= artifacts_stages.map { |stage| stage.artifacts.map { |artifact| artifact[:dimg] } }.flatten
143
- end
144
-
145
- def artifact?
146
- false
147
- end
148
-
149
- def scratch?
150
- config._docker._from.nil?
151
- end
152
-
153
- def dev_mode?
154
- config._dev_mode || project.dev_mode?
155
- end
156
-
157
- def build_cache_version
158
- [Dapp::BUILD_CACHE_VERSION, dev_mode? ? 1 : 0]
159
- end
160
-
161
- def introspect_image!(image:, options:)
162
- cmd = "docker run -ti --rm --entrypoint #{project.bash_bin} #{options} #{image}"
163
- system(cmd)
164
- end
165
-
166
- def cleanup_tmp
167
- FileUtils.rm_rf(tmp_path)
168
- artifacts.each(&:cleanup_tmp)
169
- end
170
-
171
- def stage_should_be_introspected?(name)
172
- project.cli_options[:introspect_stage] == name
173
- end
174
-
175
- protected
176
-
177
- def should_be_built?
178
- should_be_built && begin
179
- builder.before_dimg_should_be_built_check
180
- !last_stage.image.tagged?
181
- end
182
- end
183
-
184
- def with_introspection
185
- yield
186
- rescue Exception::IntrospectImage => e
187
- data = e.net_status[:data]
188
- introspect_image!(image: data[:built_id], options: data[:options])
189
- raise data[:error]
190
- end
191
- end # Dimg
192
- end # Dapp
1
+ module Dapp::Dimg; end
@@ -0,0 +1,24 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Artifact < Dimg
4
+ def after_stages_build!
5
+ end
6
+
7
+ def stage_should_be_introspected?(name)
8
+ dapp.cli_options[:introspect_artifact_stage] == name
9
+ end
10
+
11
+ def artifact?
12
+ true
13
+ end
14
+
15
+ def should_be_built?
16
+ false
17
+ end
18
+
19
+ def last_stage
20
+ @last_stage ||= Build::Stage::BuildArtifact.new(self)
21
+ end
22
+ end # Artifact
23
+ end # Dimg
24
+ end # Dapp
@@ -0,0 +1,14 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Build
4
+ module Stage
5
+ class AfterInstallArtifact < ArtifactDefault
6
+ def initialize(dimg, next_stage)
7
+ @prev_stage = Install::GAPostInstallPatch.new(dimg, self)
8
+ super
9
+ end
10
+ end # AfterInstallArtifact
11
+ end # Stage
12
+ end # Build
13
+ end # Dimg
14
+ end # Dapp
@@ -0,0 +1,18 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Build
4
+ module Stage
5
+ class AfterSetupArtifact < ArtifactDefault
6
+ def initialize(dimg, next_stage)
7
+ @prev_stage = if dimg.artifact?
8
+ Setup::Setup.new(dimg, self)
9
+ else
10
+ Setup::GAPostSetupPatch.new(dimg, self)
11
+ end
12
+ super
13
+ end
14
+ end # AfterSetupArtifact
15
+ end # Stage
16
+ end # Build
17
+ end # Dimg
18
+ end # Dapp
@@ -0,0 +1,80 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Build
4
+ module Stage
5
+ class ArtifactBase < Base
6
+ def dependencies
7
+ artifacts_signatures
8
+ end
9
+
10
+ def prepare_image
11
+ super
12
+ artifacts_dimgs_build!
13
+ artifacts_labels = {}
14
+ artifacts.each do |artifact|
15
+ apply_artifact(artifact, image)
16
+ artifacts_labels["dapp-artifact-#{artifact[:name]}".to_sym] = artifact[:dimg].last_stage.image.built_id
17
+ end
18
+ image.add_service_change_label artifacts_labels
19
+ end
20
+
21
+ def artifacts
22
+ @artifacts ||= begin
23
+ dimg.config.public_send("_#{name}").map do |artifact|
24
+ artifact_dimg = ::Dapp::Dimg::Artifact.new(config: artifact._config,
25
+ dapp: dimg.dapp,
26
+ ignore_git_fetch: dimg.ignore_git_fetch)
27
+ { name: artifact._config._name, options: artifact._artifact_options, dimg: artifact_dimg }
28
+ end
29
+ end
30
+ end
31
+
32
+ def artifact?
33
+ true
34
+ end
35
+
36
+ protected
37
+
38
+ def should_not_be_detailed?
39
+ true
40
+ end
41
+
42
+ def ignore_log_commands?
43
+ true
44
+ end
45
+
46
+ def artifacts_signatures
47
+ artifacts.map { |artifact| hashsum [artifact[:dimg].signature, artifact[:options]] }
48
+ end
49
+
50
+ def artifacts_dimgs_build!
51
+ artifacts.each do |artifact|
52
+ process = dimg.dapp.t(code: 'process.artifact_building', data: { name: artifact[:name] })
53
+ dimg.dapp.log_secondary_process(process,
54
+ short: !dimg.dapp.log_verbose?,
55
+ quiet: dimg.artifact? && !dimg.dapp.log_verbose?) do
56
+ dimg.dapp.with_log_indent do
57
+ artifact[:dimg].build!
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ def run_artifact_dimg(artifact_dimg, artifact_name, commands)
64
+ docker_options = ['--rm',
65
+ "--volume #{dimg.tmp_path('artifact', artifact_name)}:#{artifact_dimg.container_tmp_path(artifact_name)}",
66
+ "--volumes-from #{dimg.dapp.base_container}",
67
+ "--entrypoint #{dimg.dapp.bash_bin}"]
68
+ dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.artifact_copy',
69
+ data: { name: artifact_name }),
70
+ short: true,
71
+ quiet: dimg.artifact? && !dimg.dapp.log_verbose?) do
72
+ artifact_dimg.run(docker_options, [%(-ec '#{dimg.dapp.shellout_pack(commands)}')])
73
+ end
74
+ end
75
+ # rubocop:enable Metrics/AbcSize
76
+ end # ArtifactBase
77
+ end # Stage
78
+ end # Build
79
+ end # Dimg
80
+ end # Dapp
@@ -0,0 +1,63 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Build
4
+ module Stage
5
+ class ArtifactDefault < ArtifactBase
6
+ protected
7
+
8
+ def apply_artifact(artifact, image)
9
+ return if dimg.dapp.dry_run?
10
+
11
+ artifact_name = artifact[:name]
12
+ artifact_dimg = artifact[:dimg]
13
+ cwd = artifact[:options][:cwd]
14
+ include_paths = artifact[:options][:include_paths]
15
+ exclude_paths = artifact[:options][:exclude_paths]
16
+ owner = artifact[:options][:owner]
17
+ group = artifact[:options][:group]
18
+ to = artifact[:options][:to]
19
+
20
+ command = safe_cp(cwd, artifact_dimg.container_tmp_path(artifact_name).to_s, Process.uid, Process.gid, include_paths, exclude_paths)
21
+ run_artifact_dimg(artifact_dimg, artifact_name, command)
22
+
23
+ command = safe_cp(dimg.container_tmp_path('artifact', artifact_name).to_s, to, owner, group, include_paths, exclude_paths)
24
+ image.add_command command
25
+ image.add_volume "#{dimg.tmp_path('artifact', artifact_name)}:#{dimg.container_tmp_path('artifact', artifact_name)}:ro"
26
+ end
27
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
28
+
29
+ private
30
+
31
+ # rubocop:disable Metrics/ParameterLists
32
+ def safe_cp(from, to, owner, group, include_paths = [], exclude_paths = [])
33
+ credentials = ''
34
+ credentials += "-o #{owner} " if owner
35
+ credentials += "-g #{group} " if group
36
+ excludes = find_command_excludes(from, exclude_paths).join(' ')
37
+
38
+ copy_files = proc do |from_, path_ = ''|
39
+ "if [[ -d #{File.join(from_, path_)} ]] || [[ -f #{File.join(from_, path_)} ]]; then " \
40
+ "#{dimg.dapp.find_bin} #{File.join(from_, path_)} #{excludes} -type f -exec " \
41
+ "#{dimg.dapp.bash_bin} -ec '#{dimg.dapp.install_bin} -D #{credentials} \"{}\" " \
42
+ "\"#{File.join(to, '$(echo "{}" | ' \
43
+ "#{dimg.dapp.sed_bin} -e \"s/^#{from_.gsub('/', '\\/')}\\///g\")")}\"' \\; ;" \
44
+ 'fi'
45
+ end
46
+
47
+ commands = []
48
+ commands << [dimg.dapp.install_bin, credentials, '-d', to].join(' ')
49
+ commands.concat(include_paths.empty? ? Array(copy_files.call(from)) : include_paths.map { |path| copy_files.call(from, path) })
50
+ commands << "#{dimg.dapp.find_bin} #{to} -type d -exec " \
51
+ "#{dimg.dapp.bash_bin} -ec '#{dimg.dapp.install_bin} -d #{credentials} {}' \\;"
52
+ commands.join(' && ')
53
+ end
54
+ # rubocop:enable Metrics/ParameterLists
55
+
56
+ def find_command_excludes(from, exclude_paths)
57
+ exclude_paths.map { |path| "-not \\( -path #{File.join(from, path)} -prune \\)" }
58
+ end
59
+ end # ArtifactDefault
60
+ end # Stage
61
+ end # Build
62
+ end # Dimg
63
+ end # Dapp
@@ -0,0 +1,210 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Build
4
+ module Stage
5
+ class Base
6
+ include Helper::Sha256
7
+ include Helper::Trivia
8
+ include Mod::Logging
9
+
10
+ attr_accessor :prev_stage, :next_stage
11
+ attr_reader :dimg
12
+
13
+ def initialize(dimg, next_stage)
14
+ @dimg = dimg
15
+
16
+ @next_stage = next_stage
17
+ @next_stage.prev_stage = self
18
+ end
19
+
20
+ # rubocop:disable Metrics/PerceivedComplexity
21
+ def build_lock!
22
+ return yield if dimg.dapp.dry_run?
23
+
24
+ try_lock = proc do
25
+ next yield unless should_be_tagged?
26
+
27
+ no_lock = false
28
+
29
+ dimg.dapp.lock("#{dimg.dapp.name}.image.#{image.name}") do
30
+ image.cache_reset
31
+
32
+ if should_be_tagged?
33
+ yield
34
+ else
35
+ no_lock = true
36
+ end
37
+ end
38
+
39
+ yield if no_lock
40
+ end
41
+
42
+ if prev_stage
43
+ prev_stage.build_lock! { try_lock.call }
44
+ else
45
+ try_lock.call
46
+ end
47
+ end
48
+ # rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
49
+
50
+ # rubocop:disable Metrics/CyclomaticComplexity
51
+ def build!
52
+ return if build_should_be_skipped?
53
+ prev_stage.build! if prev_stage
54
+ if image_should_be_build?
55
+ prepare_image if !image.built? && !should_be_not_present?
56
+ log_image_build(&method(:image_build))
57
+ end
58
+ dimg.introspect_image!(image: image.built_id, options: image.send(:prepared_options)) if should_be_introspected?
59
+ end
60
+ # rubocop:enable Metrics/CyclomaticComplexity
61
+
62
+ def save_in_cache!
63
+ prev_stage.save_in_cache! if prev_stage
64
+ return unless should_be_tagged?
65
+ image.save_in_cache! unless dimg.dapp.dry_run?
66
+ end
67
+
68
+ def image
69
+ @image ||= begin
70
+ if empty?
71
+ prev_stage.image
72
+ else
73
+ Image::Stage.image_by_name(name: image_name, from: from_image, dapp: dimg.dapp)
74
+ end
75
+ end
76
+ end
77
+
78
+ def prepare_image
79
+ return if dimg.dapp.dry_run?
80
+ image.add_volumes_from dimg.dapp.base_container
81
+
82
+ image_add_mounts
83
+
84
+ image.add_service_change_label dapp: dimg.stage_dapp_label
85
+ image.add_service_change_label 'dapp-version'.to_sym => ::Dapp::VERSION
86
+ image.add_service_change_label 'dapp-cache-version'.to_sym => ::Dapp::BUILD_CACHE_VERSION
87
+ image.add_service_change_label 'dapp-dev-mode'.to_sym => true if dimg.dev_mode?
88
+
89
+ if dimg.dapp.ssh_auth_sock
90
+ image.add_volume "#{dimg.dapp.ssh_auth_sock}:/tmp/dapp-ssh-agent"
91
+ image.add_env 'SSH_AUTH_SOCK', '/tmp/dapp-ssh-agent'
92
+ end
93
+
94
+ yield if block_given?
95
+ end
96
+
97
+ def image_add_mounts
98
+ [:tmp_dir, :build_dir].each do |type|
99
+ next if (mounts = adding_mounts_by_type(type)).empty?
100
+
101
+ mounts.each do |path|
102
+ absolute_path = File.expand_path(File.join('/', path))
103
+ tmp_path = dimg.send(type, 'mount', absolute_path[1..-1]).tap(&:mkpath)
104
+ image.add_volume "#{tmp_path}:#{absolute_path}"
105
+ end
106
+
107
+ image.add_service_change_label :"dapp-mount-#{type.to_s.tr('_', '-')}" => mounts.join(';')
108
+ end
109
+ end
110
+
111
+ def adding_mounts_by_type(type)
112
+ (config_mounts_by_type(type) + labels_mounts_by_type(type)).uniq
113
+ end
114
+
115
+ def config_mounts_by_type(type)
116
+ dimg.config.public_send("_#{type}_mount").map(&:_to)
117
+ end
118
+
119
+ def labels_mounts_by_type(type)
120
+ from_image.labels.select { |l, _| l == "dapp-mount-#{type.to_s.tr('_', '-')}" }.map { |_, value| value.split(';') }.flatten
121
+ end
122
+
123
+ def image_should_be_build?
124
+ (!empty? && !image.built?) || dimg.dapp.log_verbose?
125
+ end
126
+
127
+ def empty?
128
+ dependencies_empty?
129
+ end
130
+
131
+ def dependencies_empty?
132
+ dependencies.flatten.compact.delete_if { |val| val.respond_to?(:empty?) && val.empty? }.empty?
133
+ end
134
+
135
+ def signature
136
+ @signature ||= begin
137
+ if empty?
138
+ prev_stage.signature
139
+ else
140
+ args = []
141
+ args << prev_stage.signature unless prev_stage.nil?
142
+ args << dimg.build_cache_version
143
+ args << builder_checksum
144
+ args.concat(dependencies.flatten)
145
+
146
+ hashsum args
147
+ end
148
+ end
149
+ end
150
+
151
+ def name
152
+ class_to_lowercase.to_sym
153
+ end
154
+
155
+ def builder_checksum
156
+ end
157
+
158
+ def git_artifacts_dependencies
159
+ dimg.git_artifacts.map { |git_artifact| git_artifact.stage_dependencies_checksums(self) }
160
+ end
161
+
162
+ def dependencies
163
+ []
164
+ end
165
+
166
+ def artifact?
167
+ false
168
+ end
169
+
170
+ protected
171
+
172
+ def image_build
173
+ image.build!
174
+ end
175
+
176
+ def build_should_be_skipped?
177
+ image.built? && !dimg.dapp.log_verbose? && !should_be_introspected?
178
+ end
179
+
180
+ def should_be_tagged?
181
+ !(empty? || image.tagged? || should_be_not_present?) && image.built?
182
+ end
183
+
184
+ def should_be_not_present?
185
+ return false if next_stage.nil?
186
+ next_stage.image.tagged? || next_stage.should_be_not_present?
187
+ end
188
+
189
+ def image_name
190
+ format(dimg.stage_cache_format, signature: signature)
191
+ end
192
+
193
+ def from_image
194
+ prev_stage.image if prev_stage || begin
195
+ raise Error::Build, code: :from_image_required
196
+ end
197
+ end
198
+
199
+ def change_options
200
+ @change_options ||= begin
201
+ dimg.config._docker._change_options.to_h.delete_if do |_, val|
202
+ val.nil? || (val.respond_to?(:empty?) && val.empty?)
203
+ end
204
+ end
205
+ end
206
+ end # Base
207
+ end # Stage
208
+ end # Build
209
+ end # Dimg
210
+ end # Dapp