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,124 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Stages
6
+ module CleanupRepo
7
+ def stages_cleanup_repo(repo)
8
+ lock_repo(repo) do
9
+ raise Error::Command, code: :stages_cleanup_required_option unless stages_cleanup_option?
10
+
11
+ registry = registry(repo)
12
+ repo_dimgs, repo_stages = repo_dimgs_and_cache(registry)
13
+ repo_stages.delete_if { |_, siid| repo_dimgs.values.include?(siid) } # ignoring stages with dimgs ids (v2)
14
+
15
+ proper_repo_cache(registry, repo_stages) if proper_cache_version?
16
+ repo_stages_cleanup(registry, repo_dimgs, repo_stages) if proper_repo_cache?
17
+ proper_repo_git_commit(registry) if proper_git_commit?
18
+ end
19
+ end
20
+
21
+ protected
22
+
23
+ def proper_repo_cache(registry, repo_stages)
24
+ log_proper_cache do
25
+ wrong_cache_images = repo_stages.select do |image_tag, _|
26
+ repo_image_dapp_cache_version_label(registry, image_tag) != ::Dapp::BUILD_CACHE_VERSION.to_s
27
+ end
28
+ wrong_cache_images.each { |image_tag, _| delete_repo_image(registry, image_tag) }
29
+ repo_stages.delete_if { |image_tag, _| wrong_cache_images.keys.include?(image_tag) }
30
+ end
31
+ end
32
+
33
+ def repo_stages_cleanup(registry, repo_dimgs, repo_stages)
34
+ log_step_with_indent(repo) do
35
+ repo_dimgs.each { |image_tag, image_id| clear_repo_stages(registry, repo_stages, image_tag, image_id) }
36
+ repo_stages.keys.each { |image_tag| delete_repo_image(registry, image_tag) }
37
+ end
38
+ end
39
+
40
+ def clear_repo_stages(registry, repo_stages, image_tag, image_id)
41
+ repo_image_dapp_artifacts_labels(registry, image_tag).each do |iid|
42
+ itag = find_image_tag_by_id(repo_stages, iid)
43
+ clear_repo_stages(registry, repo_stages, itag, iid) unless itag.nil?
44
+ end
45
+
46
+ itag = image_tag
47
+ iid = image_id
48
+ loop do
49
+ repo_stages.delete_if { |_, siid| siid == iid }
50
+ break if itag.nil? || (iid = registry.image_parent_id(itag)).empty?
51
+ itag = find_image_tag_by_id(repo_stages, iid)
52
+ end
53
+ end
54
+
55
+ def repo_image_dapp_artifacts_labels(registry, image_tag)
56
+ select_dapp_artifacts_ids(registry.image_labels(image_tag))
57
+ end
58
+
59
+ def repo_image_dapp_cache_version_label(registry, image_tag)
60
+ registry.image_labels(image_tag)['dapp-cache-version']
61
+ end
62
+
63
+ def find_image_tag_by_id(images, image_id)
64
+ images.each { |tag, id| return tag if id == image_id }
65
+ nil
66
+ end
67
+
68
+ def proper_repo_git_commit(registry)
69
+ log_proper_git_commit do
70
+ unproper_images = []
71
+ repo_dapp_dappstage_images_detailed(registry).each do |_, attrs|
72
+ attrs[:labels].each do |repo_name, commit|
73
+ next if (repo = dapp_git_repositories[repo_name]).nil?
74
+ unproper_images.concat(repo_image_tags_hierarchy(registry, attrs[:id])) unless repo.commit_exists?(commit)
75
+ end
76
+ end
77
+ remove_repo_images(registry, unproper_images.uniq)
78
+ end
79
+ end
80
+
81
+ def repo_dapp_dappstage_images_detailed(registry)
82
+ @repo_dapp_images_detailed ||= begin
83
+ registry.tags.map do |tag|
84
+ next unless tag.start_with?('dimgstage')
85
+
86
+ image_history = registry.image_history(tag)
87
+ attrs = {
88
+ id: registry.image_id(tag),
89
+ parent: image_history['container_config']['Image'],
90
+ labels: image_history['config']['Labels']
91
+ }
92
+ [tag, attrs]
93
+ end.compact
94
+ end
95
+ end
96
+
97
+ def repo_image_tags_hierarchy(registry, registry_image_id)
98
+ hierarchy = []
99
+ iids = [registry_image_id]
100
+
101
+ loop do
102
+ hierarchy.concat(iids)
103
+ break if begin
104
+ iids.map! do |iid|
105
+ repo_dapp_dappstage_images_detailed(registry).map { |_, attrs| attrs[:id] if attrs[:parent] == iid }.compact
106
+ end.flatten!.empty?
107
+ end
108
+ end
109
+
110
+ repo_dapp_dappstage_images_detailed(registry).map { |tag, attrs| tag if hierarchy.include? attrs[:id] }.compact
111
+ end
112
+
113
+ def remove_repo_images(registry, tags)
114
+ tags.each do |tag|
115
+ log(tag) if dry_run? || log_verbose?
116
+ registry.image_delete(tag) unless dry_run?
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end # Dimg
124
+ end # Dapp
@@ -0,0 +1,85 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Stages
6
+ module Common
7
+ protected
8
+
9
+ def registry(repo)
10
+ validate_repo_name(repo)
11
+ ::Dapp::Dimg::DockerRegistry.new(repo)
12
+ end
13
+
14
+ def repo_dimgs_and_cache(registry)
15
+ format = proc do |arr|
16
+ arr.map do |tag|
17
+ if (id = registry.image_id(tag)).nil?
18
+ log_warning(desc: { code: 'tag_ignored', data: { tag: tag } })
19
+ else
20
+ [tag, id]
21
+ end
22
+ end.compact.to_h
23
+ end
24
+ dimgs, stages = registry.tags.partition { |tag| !tag.start_with?('dimgstage') }
25
+ [format.call(dimgs), format.call(stages)]
26
+ end
27
+
28
+ def registry_tags(registry)
29
+ registry.tags
30
+ rescue Exception::Registry => e
31
+ raise unless e.net_status[:code] == :no_such_dimg
32
+ log_warning(desc: { code: :dimg_not_found_in_registry })
33
+ []
34
+ end
35
+
36
+ def delete_repo_image(registry, image_tag)
37
+ if dry_run?
38
+ log(image_tag)
39
+ else
40
+ registry.image_delete(image_tag)
41
+ end
42
+ end
43
+
44
+ def select_dapp_artifacts_ids(hash)
45
+ hash.select { |k, _v| k.start_with?('dapp-artifact') }.values
46
+ end
47
+
48
+ def dapp_git_repositories
49
+ @dapp_git_repositories ||= begin
50
+ {}.tap do |repositories|
51
+ dimgs = build_configs.map { |config| Dimg.new(config: config, dapp: self, ignore_git_fetch: true) }
52
+ dimgs.each do |dimg|
53
+ [dimg, dimg.artifacts].flatten
54
+ .map(&:git_artifacts).flatten
55
+ .map { |ga_artifact| repositories[ga_artifact.full_name] = ga_artifact.repo }
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ def proper_repo_cache?
62
+ !!cli_options[:proper_repo_cache]
63
+ end
64
+
65
+ def proper_git_commit?
66
+ !!cli_options[:proper_git_commit]
67
+ end
68
+
69
+ def stages_cleanup_option?
70
+ proper_git_commit? || proper_cache_version? || proper_repo_cache?
71
+ end
72
+
73
+ def log_proper_git_commit(&blk)
74
+ log_step_with_indent(:'proper git commit', &blk)
75
+ end
76
+
77
+ def lock_repo(repo, *args, &blk)
78
+ lock("repo.#{hashsum repo}", *args, &blk)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end # Dimg
85
+ end # Dapp
@@ -0,0 +1,21 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Stages
6
+ module FlushLocal
7
+ def stages_flush_local
8
+ lock("#{name}.images") do
9
+ log_step_with_indent(name) do
10
+ dapp_containers_flush
11
+ dapp_dangling_images_flush
12
+ remove_images(dapp_images_names)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end # Dimg
21
+ end # Dapp
@@ -0,0 +1,21 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Stages
6
+ module FlushRepo
7
+ def stages_flush_repo(repo)
8
+ lock_repo(repo) do
9
+ log_step_with_indent(repo) do
10
+ registry = registry(repo)
11
+ repo_dimgs, repo_stages = repo_dimgs_and_cache(registry)
12
+ repo_dimgs.merge(repo_stages).keys.each { |image_tag| delete_repo_image(registry, image_tag) }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end # Dimg
21
+ end # Dapp
@@ -0,0 +1,26 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Stages
6
+ module Pull
7
+ def stages_pull(repo)
8
+ validate_repo_name(repo)
9
+ build_configs.each do |config|
10
+ log_dimg_name_with_indent(config) do
11
+ Dimg.new(config: config, dapp: self, ignore_git_fetch: true).tap do |dimg|
12
+ dimg.import_stages!(repo, format: '%{repo}:dimgstage-%{signature}')
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ def pull_all_stages?
19
+ !!cli_options[:pull_all_stages]
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end # Dimg
26
+ end # Dapp
@@ -0,0 +1,22 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Stages
6
+ module Push
7
+ def stages_push(repo)
8
+ validate_repo_name(repo)
9
+ build_configs.each do |config|
10
+ log_dimg_name_with_indent(config) do
11
+ Dimg.new(config: config, dapp: self, ignore_git_fetch: true, should_be_built: true).tap do |dimg|
12
+ dimg.export_stages!(repo, format: '%{repo}:dimgstage-%{signature}')
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end # Dimg
22
+ end # Dapp
@@ -0,0 +1,17 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Tag
6
+ def tag(tag)
7
+ one_dimg!
8
+ raise Error::Command, code: :tag_command_incorrect_tag, data: { name: tag } unless ::Dapp::Dimg::Image::Docker.image_name?(tag)
9
+ Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true, should_be_built: true).tap do |app|
10
+ app.tag!(tag)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end # Dimg
17
+ end # Dapp
@@ -0,0 +1,192 @@
1
+ module Dapp
2
+ module 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 :dapp
15
+
16
+ def initialize(config:, dapp:, should_be_built: false, ignore_git_fetch: false)
17
+ @config = config
18
+ @dapp = dapp
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
+ dapp.lock("#{dapp.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
+ dapp.lock("#{dapp.name}.images", readonly: true) do
51
+ dimg_name = config._name
52
+ if dapp.dry_run?
53
+ dapp.log_state(dimg_name, state: dapp.t(code: 'state.tag'), styles: { status: :success })
54
+ else
55
+ dapp.log_process(dimg_name, process: dapp.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
+ dapp.lock("#{dapp.name}.images", readonly: true) do
64
+ tags.each do |tag|
65
+ image_name = format(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
+ dapp.lock("#{dapp.name}.images", readonly: true) do
73
+ export_images.each do |image|
74
+ image_name = format(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 dapp.dry_run?
82
+ dapp.log_state(image_name, state: dapp.t(code: 'state.push'), styles: { status: :success })
83
+ else
84
+ dapp.lock("image.#{hashsum image_name}") do
85
+ ::Dapp::Dimg::Image::Stage.cache_reset(image_name)
86
+ dapp.log_process(image_name, process: dapp.t(code: 'status.process.pushing')) do
87
+ dapp.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
+ dapp.lock("#{dapp.name}.images", readonly: true) do
97
+ import_images.each do |image|
98
+ begin
99
+ image_name = format(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 dapp.pull_all_stages?
105
+ end
106
+ end
107
+ end
108
+
109
+ def import_base!(image, image_name)
110
+ if dapp.dry_run?
111
+ dapp.log_state(image_name, state: dapp.t(code: 'state.pull'), styles: { status: :success })
112
+ else
113
+ dapp.lock("image.#{hashsum image_name}") do
114
+ dapp.log_process(image_name, process: dapp.t(code: 'status.process.pulling'),
115
+ status: { failed: dapp.t(code: 'status.failed.not_pulled') },
116
+ style: { failed: :secondary }) do
117
+ image.import!(image_name)
118
+ end
119
+ end
120
+ end
121
+ end
122
+
123
+ def run(docker_options, command)
124
+ cmd = "docker run #{[docker_options, last_stage.image.built_id, command].flatten.compact.join(' ')}"
125
+ if dapp.dry_run?
126
+ dapp.log(cmd)
127
+ else
128
+ system(cmd) || raise(Error::Dimg, code: :dimg_not_run)
129
+ end
130
+ end
131
+
132
+ def stage_image_name(stage_name)
133
+ stages.find { |stage| stage.send(:name) == stage_name }.image.name
134
+ end
135
+
136
+ def builder
137
+ @builder ||= Builder.const_get(config._builder.capitalize).new(self)
138
+ end
139
+
140
+ def artifacts
141
+ @artifacts ||= artifacts_stages.map { |stage| stage.artifacts.map { |artifact| artifact[:dimg] } }.flatten
142
+ end
143
+
144
+ def artifact?
145
+ false
146
+ end
147
+
148
+ def scratch?
149
+ config._docker._from.nil?
150
+ end
151
+
152
+ def dev_mode?
153
+ config._dev_mode || dapp.dev_mode?
154
+ end
155
+
156
+ def build_cache_version
157
+ [::Dapp::BUILD_CACHE_VERSION, dev_mode? ? 1 : 0]
158
+ end
159
+
160
+ def introspect_image!(image:, options:)
161
+ cmd = "docker run -ti --rm --entrypoint #{dapp.bash_bin} #{options} #{image}"
162
+ system(cmd)
163
+ end
164
+
165
+ def cleanup_tmp
166
+ FileUtils.rm_rf(tmp_path)
167
+ artifacts.each(&:cleanup_tmp)
168
+ end
169
+
170
+ def stage_should_be_introspected?(name)
171
+ dapp.cli_options[:introspect_stage] == name
172
+ end
173
+
174
+ protected
175
+
176
+ def should_be_built?
177
+ should_be_built && begin
178
+ builder.before_dimg_should_be_built_check
179
+ !last_stage.image.tagged?
180
+ end
181
+ end
182
+
183
+ def with_introspection
184
+ yield
185
+ rescue Exception::IntrospectImage => e
186
+ data = e.net_status[:data]
187
+ introspect_image!(image: data[:built_id], options: data[:options])
188
+ raise data[:error]
189
+ end
190
+ end # Dimg
191
+ end # Dimg
192
+ end # Dapp