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,138 +0,0 @@
1
- module Dapp
2
- # Project
3
- class Project
4
- # Command
5
- module Command
6
- module Stages
7
- # CleanupLocal
8
- module CleanupLocal
9
- def stages_cleanup_local(repo)
10
- lock_repo(repo, readonly: true) do
11
- raise Error::Project, code: :stages_cleanup_required_option unless stages_cleanup_option?
12
-
13
- project_containers_flush
14
-
15
- proper_cache if proper_cache_version?
16
- stages_cleanup_by_repo(repo) if proper_repo_cache?
17
- proper_git_commit if proper_git_commit?
18
- end
19
- end
20
-
21
- protected
22
-
23
- def proper_cache
24
- log_proper_cache do
25
- lock("#{name}.images") do
26
- log_step_with_indent(name) do
27
- remove_images(project_images_names.select { |image_name| !actual_cache_images.include?(image_name) })
28
- end
29
- end
30
- end
31
- end
32
-
33
- def stages_cleanup_by_repo(repo)
34
- registry = registry(repo)
35
- repo_dimgs = repo_dimgs_images(registry)
36
-
37
- lock("#{name}.images") do
38
- log_step_with_indent(name) do
39
- project_dangling_images_flush
40
- dimgs, stages = project_images_hash.partition { |_, image_id| repo_dimgs.values.include?(image_id) }
41
- dimgs = dimgs.to_h
42
- stages = stages.to_h
43
- dimgs.each { |_, aiid| except_image_with_parents(aiid, stages) }
44
- remove_images(stages.keys)
45
- end
46
- end
47
- end
48
-
49
- def repo_dimgs_images(registry)
50
- repo_dimgs_and_cache(registry).first
51
- end
52
-
53
- def actual_cache_images
54
- shellout!([
55
- 'docker images',
56
- '--format="{{.Repository}}:{{.Tag}}"',
57
- %(-f "label=dapp-cache-version=#{Dapp::BUILD_CACHE_VERSION}"),
58
- stage_cache
59
- ].join(' ')).stdout.lines.map(&:strip)
60
- end
61
-
62
- def project_images_hash
63
- shellout!(%(docker images --format "{{.Repository}}:{{.Tag}};{{.ID}}" --no-trunc #{stage_cache})).stdout.lines.map do |line|
64
- line.strip.split(';')
65
- end.to_h
66
- end
67
-
68
- def except_image_with_parents(image_id, stages)
69
- if image_exist?(image_id)
70
- image_dapp_artifacts_label(image_id).each { |aiid| except_image_with_parents(aiid, stages) }
71
- iid = image_id
72
- loop do
73
- stages.delete_if { |_, siid| siid == iid }
74
- break if (iid = image_parent(iid)).empty?
75
- end
76
- else
77
- stages.delete_if { |_, siid| siid == image_id }
78
- end
79
- end
80
-
81
- def image_exist?(image_id)
82
- shellout!(%(docker inspect #{image_id}))
83
- true
84
- rescue Error::Shellout
85
- false
86
- end
87
-
88
- def image_dapp_artifacts_label(image_id)
89
- select_dapp_artifacts_ids(Image::Docker.image_config_option(image_id: image_id, option: 'labels'))
90
- end
91
-
92
- def image_parent(image_id)
93
- shellout!(%(docker inspect -f {{.Parent}} #{image_id})).stdout.strip
94
- end
95
-
96
- def proper_git_commit
97
- log_proper_git_commit do
98
- unproper_images_names = []
99
- project_images_detailed.each do |_, attrs|
100
- attrs['Config']['Labels'].each do |repo_name, commit|
101
- next if (repo = project_git_repositories[repo_name]).nil?
102
- unproper_images_names.concat(image_hierarchy_by_id(attrs['Id'])) unless repo.commit_exists?(commit)
103
- end
104
- end
105
- remove_images(unproper_images_names.uniq)
106
- end
107
- end
108
-
109
- def project_images_detailed
110
- @project_images_detailed ||= {}.tap do |images|
111
- project_images_names.each do |image_name|
112
- shellout!(%(docker inspect --format='{{json .}}' #{image_name})).stdout.strip.tap do |output|
113
- images[image_name] = output == 'null' ? {} : JSON.parse(output)
114
- end
115
- end
116
- end
117
- end
118
-
119
- def image_hierarchy_by_id(image_id)
120
- hierarchy = []
121
- iids = [image_id]
122
-
123
- loop do
124
- hierarchy.concat(project_images_detailed.map { |name, attrs| name if iids.include?(attrs['Id']) }.compact)
125
- break if begin
126
- iids.map! do |iid|
127
- project_images_detailed.map { |_, attrs| attrs['Id'] if attrs['Parent'] == iid }.compact
128
- end.flatten!.empty?
129
- end
130
- end
131
-
132
- hierarchy
133
- end
134
- end
135
- end
136
- end
137
- end # Project
138
- end # Dapp
@@ -1,125 +0,0 @@
1
- module Dapp
2
- # Project
3
- class Project
4
- # Command
5
- module Command
6
- module Stages
7
- # CleanupRepo
8
- module CleanupRepo
9
- def stages_cleanup_repo(repo)
10
- lock_repo(repo) do
11
- raise Error::Project, code: :stages_cleanup_required_option unless stages_cleanup_option?
12
-
13
- registry = registry(repo)
14
- repo_dimgs, repo_stages = repo_dimgs_and_cache(registry)
15
- repo_stages.delete_if { |_, siid| repo_dimgs.values.include?(siid) } # ignoring stages with dimgs ids (v2)
16
-
17
- proper_repo_cache(registry, repo_stages) if proper_cache_version?
18
- repo_stages_cleanup(registry, repo_dimgs, repo_stages) if proper_repo_cache?
19
- proper_repo_git_commit(registry) if proper_git_commit?
20
- end
21
- end
22
-
23
- protected
24
-
25
- def proper_repo_cache(registry, repo_stages)
26
- log_proper_cache do
27
- wrong_cache_images = repo_stages.select do |image_tag, _|
28
- repo_image_dapp_cache_version_label(registry, image_tag) != Dapp::BUILD_CACHE_VERSION.to_s
29
- end
30
- wrong_cache_images.each { |image_tag, _| delete_repo_image(registry, image_tag) }
31
- repo_stages.delete_if { |image_tag, _| wrong_cache_images.keys.include?(image_tag) }
32
- end
33
- end
34
-
35
- def repo_stages_cleanup(registry, repo_dimgs, repo_stages)
36
- log_step_with_indent(repo) do
37
- repo_dimgs.each { |image_tag, image_id| clear_repo_stages(registry, repo_stages, image_tag, image_id) }
38
- repo_stages.keys.each { |image_tag| delete_repo_image(registry, image_tag) }
39
- end
40
- end
41
-
42
- def clear_repo_stages(registry, repo_stages, image_tag, image_id)
43
- repo_image_dapp_artifacts_labels(registry, image_tag).each do |iid|
44
- itag = find_image_tag_by_id(repo_stages, iid)
45
- clear_repo_stages(registry, repo_stages, itag, iid) unless itag.nil?
46
- end
47
-
48
- itag = image_tag
49
- iid = image_id
50
- loop do
51
- repo_stages.delete_if { |_, siid| siid == iid }
52
- break if itag.nil? || (iid = registry.image_parent_id(itag)).empty?
53
- itag = find_image_tag_by_id(repo_stages, iid)
54
- end
55
- end
56
-
57
- def repo_image_dapp_artifacts_labels(registry, image_tag)
58
- select_dapp_artifacts_ids(registry.image_labels(image_tag))
59
- end
60
-
61
- def repo_image_dapp_cache_version_label(registry, image_tag)
62
- registry.image_labels(image_tag)['dapp-cache-version']
63
- end
64
-
65
- def find_image_tag_by_id(images, image_id)
66
- images.each { |tag, id| return tag if id == image_id }
67
- nil
68
- end
69
-
70
- def proper_repo_git_commit(registry)
71
- log_proper_git_commit do
72
- unproper_images = []
73
- repo_project_dappstage_images_detailed(registry).each do |_, attrs|
74
- attrs[:labels].each do |repo_name, commit|
75
- next if (repo = project_git_repositories[repo_name]).nil?
76
- unproper_images.concat(repo_image_tags_hierarchy(registry, attrs[:id])) unless repo.commit_exists?(commit)
77
- end
78
- end
79
- remove_repo_images(registry, unproper_images.uniq)
80
- end
81
- end
82
-
83
- def repo_project_dappstage_images_detailed(registry)
84
- @repo_project_images_detailed ||= begin
85
- registry.tags.map do |tag|
86
- next unless tag.start_with?('dimgstage')
87
-
88
- image_history = registry.image_history(tag)
89
- attrs = {
90
- id: registry.image_id(tag),
91
- parent: image_history['container_config']['Image'],
92
- labels: image_history['config']['Labels']
93
- }
94
- [tag, attrs]
95
- end.compact
96
- end
97
- end
98
-
99
- def repo_image_tags_hierarchy(registry, registry_image_id)
100
- hierarchy = []
101
- iids = [registry_image_id]
102
-
103
- loop do
104
- hierarchy.concat(iids)
105
- break if begin
106
- iids.map! do |iid|
107
- repo_project_dappstage_images_detailed(registry).map { |_, attrs| attrs[:id] if attrs[:parent] == iid }.compact
108
- end.flatten!.empty?
109
- end
110
- end
111
-
112
- repo_project_dappstage_images_detailed(registry).map { |tag, attrs| tag if hierarchy.include? attrs[:id] }.compact
113
- end
114
-
115
- def remove_repo_images(registry, tags)
116
- tags.each do |tag|
117
- log(tag) if dry_run? || log_verbose?
118
- registry.image_delete(tag) unless dry_run?
119
- end
120
- end
121
- end
122
- end
123
- end
124
- end # Project
125
- end # Dapp
@@ -1,86 +0,0 @@
1
- module Dapp
2
- # Project
3
- class Project
4
- # Command
5
- module Command
6
- module Stages
7
- # Common
8
- module Common
9
- protected
10
-
11
- def registry(repo)
12
- validate_repo_name(repo)
13
- DockerRegistry.new(repo)
14
- end
15
-
16
- def repo_dimgs_and_cache(registry)
17
- format = proc do |arr|
18
- arr.map do |tag|
19
- if (id = registry.image_id(tag)).nil?
20
- log_warning(desc: { code: 'tag_ignored', data: { tag: tag } })
21
- else
22
- [tag, id]
23
- end
24
- end.compact.to_h
25
- end
26
- dimgs, stages = registry.tags.partition { |tag| !tag.start_with?('dimgstage') }
27
- [format.call(dimgs), format.call(stages)]
28
- end
29
-
30
- def registry_tags(registry)
31
- registry.tags
32
- rescue Exception::Registry => e
33
- raise unless e.net_status[:code] == :no_such_dimg
34
- log_warning(desc: { code: :dimg_not_found_in_registry })
35
- []
36
- end
37
-
38
- def delete_repo_image(registry, image_tag)
39
- if dry_run?
40
- log(image_tag)
41
- else
42
- registry.image_delete(image_tag)
43
- end
44
- end
45
-
46
- def select_dapp_artifacts_ids(hash)
47
- hash.select { |k, _v| k.start_with?('dapp-artifact') }.values
48
- end
49
-
50
- def project_git_repositories
51
- @project_git_repositories ||= begin
52
- {}.tap do |repositories|
53
- dimgs = build_configs.map { |config| Dimg.new(config: config, project: self, ignore_git_fetch: true) }
54
- dimgs.each do |dimg|
55
- [dimg, dimg.artifacts].flatten
56
- .map(&:git_artifacts).flatten
57
- .map { |ga_artifact| repositories[ga_artifact.full_name] = ga_artifact.repo }
58
- end
59
- end
60
- end
61
- end
62
-
63
- def proper_repo_cache?
64
- !!cli_options[:proper_repo_cache]
65
- end
66
-
67
- def proper_git_commit?
68
- !!cli_options[:proper_git_commit]
69
- end
70
-
71
- def stages_cleanup_option?
72
- proper_git_commit? || proper_cache_version? || proper_repo_cache?
73
- end
74
-
75
- def log_proper_git_commit(&blk)
76
- log_step_with_indent(:'proper git commit', &blk)
77
- end
78
-
79
- def lock_repo(repo, *args, &blk)
80
- lock("repo.#{hashsum repo}", *args, &blk)
81
- end
82
- end
83
- end
84
- end
85
- end # Project
86
- end # Dapp
@@ -1,22 +0,0 @@
1
- module Dapp
2
- # Project
3
- class Project
4
- # Command
5
- module Command
6
- module Stages
7
- # FlushLocal
8
- module FlushLocal
9
- def stages_flush_local
10
- lock("#{name}.images") do
11
- log_step_with_indent(name) do
12
- project_containers_flush
13
- project_dangling_images_flush
14
- remove_images(project_images_names)
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end # Project
22
- end # Dapp
@@ -1,22 +0,0 @@
1
- module Dapp
2
- # Project
3
- class Project
4
- # Command
5
- module Command
6
- module Stages
7
- # FlushRepo
8
- module FlushRepo
9
- def stages_flush_repo(repo)
10
- lock_repo(repo) do
11
- log_step_with_indent(repo) do
12
- registry = registry(repo)
13
- repo_dimgs, repo_stages = repo_dimgs_and_cache(registry)
14
- repo_dimgs.merge(repo_stages).keys.each { |image_tag| delete_repo_image(registry, image_tag) }
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end # Project
22
- end # Dapp
@@ -1,27 +0,0 @@
1
- module Dapp
2
- # Project
3
- class Project
4
- # Command
5
- module Command
6
- module Stages
7
- # Pull
8
- module Pull
9
- def stages_pull(repo)
10
- validate_repo_name(repo)
11
- build_configs.each do |config|
12
- log_dimg_name_with_indent(config) do
13
- Dimg.new(config: config, project: self, ignore_git_fetch: true).tap do |dimg|
14
- dimg.import_stages!(repo, format: '%{repo}:dimgstage-%{signature}')
15
- end
16
- end
17
- end
18
- end
19
-
20
- def pull_all_stages?
21
- !!cli_options[:pull_all_stages]
22
- end
23
- end
24
- end
25
- end
26
- end # Project
27
- end # Dapp
@@ -1,23 +0,0 @@
1
- module Dapp
2
- # Project
3
- class Project
4
- # Command
5
- module Command
6
- module Stages
7
- # Push
8
- module Push
9
- def stages_push(repo)
10
- validate_repo_name(repo)
11
- build_configs.each do |config|
12
- log_dimg_name_with_indent(config) do
13
- Dimg.new(config: config, project: self, ignore_git_fetch: true, should_be_built: true).tap do |dimg|
14
- dimg.export_stages!(repo, format: '%{repo}:dimgstage-%{signature}')
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end # Project
23
- end # Dapp