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,71 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module BuildContext
6
+ module Import
7
+ def build_context_import
8
+ raise Error::Command, code: :context_directory_not_found,
9
+ data: { path: build_context_path } unless build_context_path.exist?
10
+
11
+ log_process(:'import context') do
12
+ with_log_indent do
13
+ import_build_context_build_tar
14
+ import_build_context_image_tar
15
+ end
16
+ end
17
+ end
18
+
19
+ def import_build_context_image_tar
20
+ if build_context_images_tar.exist?
21
+ log_secondary_process(:images, short: true) do
22
+ lock("#{name}.images") do
23
+ Image::Docker.load!(build_context_images_tar)
24
+ end
25
+ end
26
+ else
27
+ log_warning(desc: { code: :context_archive_not_found, data: { path: build_context_images_tar } })
28
+ end
29
+ end
30
+
31
+ def import_build_context_build_tar
32
+ if build_context_build_tar.exist?
33
+ log_secondary_process(:build_dir, short: true) do
34
+ store_current_build_dir
35
+
36
+ File.open(build_context_build_tar, File::RDONLY) do |f|
37
+ Gem::Package::TarReader.new(f).each_entry do |entry|
38
+ header = entry.header
39
+ path = File.join(build_path, entry.full_name)
40
+
41
+ if entry.directory?
42
+ FileUtils.mkpath path, :mode => entry.header.mode
43
+ else
44
+ FileUtils.mkpath File.dirname(path)
45
+ File.write(path, entry.read)
46
+ File.chmod(header.mode, path)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ else
52
+ log_warning(desc: { code: :context_archive_not_found, data: { path: build_context_build_tar } })
53
+ end
54
+ end
55
+
56
+ def store_current_build_dir
57
+ return if build_path_empty?
58
+ raise Error::Command, code: :stored_build_dir_already_exist,
59
+ data: { path: "#{build_path}.old" } if File.exist?("#{build_path}.old")
60
+ FileUtils.mv(build_path, "#{build_path}.old")
61
+ end
62
+
63
+ def build_path_empty?
64
+ (build_path.entries.map(&:to_s) - %w(. .. locks)).empty?
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,23 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Cleanup
6
+ def cleanup
7
+ lock("#{name}.images") do
8
+ log_step_with_indent(name) do
9
+ dapp_containers_flush
10
+ dapp_dangling_images_flush
11
+ remove_images_by_query([
12
+ 'docker images',
13
+ %(--format '{{if ne "#{stage_cache}" .Repository }}{{.Repository}}:{{.Tag}}{{ end }}'),
14
+ %(-f "label=dapp=#{stage_dapp_label}")
15
+ ].join(' ')) # FIXME: negative filter is not currently supported by the Docker CLI
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end # Dimg
23
+ end # Dapp
@@ -0,0 +1,96 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Common
6
+ protected
7
+
8
+ def dapp_images_names
9
+ shellout!(%(docker images --format="{{.Repository}}:{{.Tag}}" #{stage_cache})).stdout.lines.map(&:strip)
10
+ end
11
+
12
+ def dapp_images_ids
13
+ shellout!(%(docker images #{stage_cache} -q --no-trunc)).stdout.lines.map(&:strip)
14
+ end
15
+
16
+ def dapp_containers_flush
17
+ remove_containers_by_query(%(docker ps -a -f "label=dapp" -f "name=#{container_name_prefix}" -q), force: true)
18
+ end
19
+
20
+ def dapp_dangling_images_flush
21
+ remove_images_by_query(%(docker images -f "dangling=true" -f "label=dapp=#{stage_dapp_label}" -q), force: true)
22
+ end
23
+
24
+ def remove_images_by_query(images_query, force: false)
25
+ with_subquery(images_query) { |ids| remove_images(ids, force: force) }
26
+ end
27
+
28
+ def remove_images(ids, force: false)
29
+ remove_base('docker rmi%{force_option} %{ids}', ids.uniq, force: force)
30
+ end
31
+
32
+ def remove_containers_by_query(containers_query, force: false)
33
+ with_subquery(containers_query) { |ids| remove_containers(ids, force: force) }
34
+ end
35
+
36
+ def remove_containers(ids, force: false)
37
+ remove_base('docker rm%{force_option} %{ids}', ids.uniq, force: force)
38
+ end
39
+
40
+ def remove_base(query_format, ids, force: false)
41
+ return if ids.empty?
42
+ force_option = force ? ' -f' : ''
43
+ ids.each_slice(50) { |chunk| run_command(format(query_format, force_option: force_option, ids: chunk.join(' '))) }
44
+ end
45
+
46
+ def with_subquery(query)
47
+ return if (res = shellout!(query).stdout.strip.lines.map(&:strip)).empty?
48
+ yield(res)
49
+ end
50
+
51
+ def image_labels(image_id)
52
+ Image::Stage.image_config_option(image_id: image_id, option: 'labels')
53
+ end
54
+
55
+ def run_command(cmd)
56
+ log(cmd) if log_verbose? || dry_run?
57
+ shellout!(cmd) unless dry_run?
58
+ end
59
+
60
+ def container_name_prefix
61
+ name
62
+ end
63
+
64
+ def validate_repo_name(repo)
65
+ raise(Error::Command, code: :repo_name_incorrect, data: { name: repo }) unless ::Dapp::Dimg::DockerRegistry.repo_name?(repo)
66
+ end
67
+
68
+ def proper_cache_version?
69
+ !!cli_options[:proper_cache_version]
70
+ end
71
+
72
+ def log_proper_cache(&blk)
73
+ log_step_with_indent(:'proper cache', &blk)
74
+ end
75
+
76
+ def one_dimg!
77
+ return if build_configs.one?
78
+ raise Error::Command, code: :command_unexpected_dimgs_number, data: { dimgs_names: build_configs.map(&:_name).join(' ') }
79
+ end
80
+
81
+ def push_format(dimg_name)
82
+ if dimg_name.nil?
83
+ spush_format
84
+ else
85
+ '%{repo}:%{dimg_name}-%{tag}'
86
+ end
87
+ end
88
+
89
+ def spush_format
90
+ '%{repo}:%{tag}'
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end # Dimg
96
+ end # Dapp
@@ -0,0 +1,19 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module List
6
+ def list
7
+ build_configs.each do |config|
8
+ if config._name.nil?
9
+ log_warning('Dappfile has unnamed dimg!') if log_verbose?
10
+ else
11
+ puts config._name
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end # Dimg
19
+ end # Dapp
@@ -0,0 +1,75 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Mrproper
6
+ # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
7
+ def mrproper
8
+ log_step_with_indent(:mrproper) do
9
+ raise Error::Command, code: :mrproper_required_option unless proper_all? || proper_dev_mode_cache? || proper_cache_version?
10
+
11
+ dapp_dangling_images_flush
12
+
13
+ if proper_all?
14
+ flush_by_label('dapp')
15
+ elsif proper_dev_mode_cache?
16
+ flush_by_label('dapp-dev-mode')
17
+ elsif proper_cache_version?
18
+ log_proper_cache do
19
+ proper_cache_images = proper_cache_all_images
20
+ remove_images(dapp_images_by_label('dapp').select { |id| !proper_cache_images.include?(id) }.map(&:strip))
21
+ end
22
+ end
23
+ end
24
+ end
25
+ # rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
26
+
27
+ protected
28
+
29
+ def flush_by_label(label)
30
+ log_step_with_indent(:containers) { dapp_containers_flush_by_label(label) }
31
+ log_step_with_indent(:images) { dapp_images_flush_by_label(label) }
32
+ end
33
+
34
+ def proper_all?
35
+ !!cli_options[:proper_all]
36
+ end
37
+
38
+ def proper_dev_mode_cache?
39
+ !!cli_options[:proper_dev_mode_cache]
40
+ end
41
+
42
+ def dapp_containers_flush_by_label(label)
43
+ remove_containers_by_query(%(docker ps -a -f "label=#{label}" -q), force: true)
44
+ end
45
+
46
+ def dapp_dangling_images_flush_by_label(label)
47
+ remove_images_by_query(%(docker images -f "dangling=true" -f "label=#{label}" -q), force: true)
48
+ end
49
+
50
+ def dapp_images_flush_by_label(label)
51
+ dapp_dangling_images_flush_by_label(label)
52
+ remove_images(dapp_images_by_label(label), force: true)
53
+ end
54
+
55
+ def dapp_images_by_label(label)
56
+ @dapp_images ||= begin
57
+ shellout!(%(docker images -f "dangling=false" --format="{{.Repository}}:{{.Tag}}" -f "label=#{label}"))
58
+ .stdout
59
+ .lines
60
+ .map(&:strip)
61
+ end
62
+ end
63
+
64
+ def proper_cache_all_images
65
+ shellout!([
66
+ 'docker images',
67
+ '--format="{{.Repository}}:{{.Tag}}"',
68
+ %(-f "label=dapp-cache-version=#{::Dapp::BUILD_CACHE_VERSION}" -f "dangling=false")
69
+ ].join(' ')).stdout.lines.map(&:strip)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end # Dimg
75
+ end # Dapp
@@ -0,0 +1,27 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Push
6
+ def push(repo)
7
+ validate_repo_name(repo)
8
+ log_step_with_indent(:stages) { stages_push(repo) } if with_stages?
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!(repo, format: push_format(config._name))
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ protected
19
+
20
+ def with_stages?
21
+ !!cli_options[:with_stages]
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end # Dimg
27
+ end # Dapp
@@ -0,0 +1,15 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Run
6
+ def run(docker_options, command)
7
+ one_dimg!
8
+ setup_ssh_agent
9
+ Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true, should_be_built: true).run(docker_options, command)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end # Dimg
15
+ end # Dapp
@@ -0,0 +1,17 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Spush
6
+ def spush(repo)
7
+ validate_repo_name(repo)
8
+ one_dimg!
9
+ Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true, should_be_built: true).tap do |dimg|
10
+ dimg.export!(repo, format: spush_format)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end # Dimg
17
+ end # Dapp
@@ -0,0 +1,14 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module StageImage
6
+ def stage_image
7
+ one_dimg!
8
+ puts Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true).stage_image_name(cli_options[:stage])
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end # Dimg
14
+ end # Dapp
@@ -0,0 +1,137 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Dapp
4
+ module Command
5
+ module Stages
6
+ module CleanupLocal
7
+ def stages_cleanup_local(repo)
8
+ lock_repo(repo, readonly: true) do
9
+ raise Error::Command, code: :stages_cleanup_required_option unless stages_cleanup_option?
10
+
11
+ dapp_containers_flush
12
+
13
+ proper_cache if proper_cache_version?
14
+ stages_cleanup_by_repo(repo) if proper_repo_cache?
15
+ proper_git_commit if proper_git_commit?
16
+ end
17
+ end
18
+
19
+ protected
20
+
21
+ def proper_cache
22
+ log_proper_cache do
23
+ lock("#{name}.images") do
24
+ log_step_with_indent(name) do
25
+ remove_images(dapp_images_names.select { |image_name| !actual_cache_images.include?(image_name) })
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ def stages_cleanup_by_repo(repo)
32
+ registry = registry(repo)
33
+ repo_dimgs = repo_dimgs_images(registry)
34
+
35
+ lock("#{name}.images") do
36
+ log_step_with_indent(name) do
37
+ dapp_dangling_images_flush
38
+ dimgs, stages = dapp_images_hash.partition { |_, image_id| repo_dimgs.values.include?(image_id) }
39
+ dimgs = dimgs.to_h
40
+ stages = stages.to_h
41
+ dimgs.each { |_, aiid| except_image_with_parents(aiid, stages) }
42
+ remove_images(stages.keys)
43
+ end
44
+ end
45
+ end
46
+
47
+ def repo_dimgs_images(registry)
48
+ repo_dimgs_and_cache(registry).first
49
+ end
50
+
51
+ def actual_cache_images
52
+ shellout!([
53
+ 'docker images',
54
+ '--format="{{.Repository}}:{{.Tag}}"',
55
+ %(-f "label=dapp-cache-version=#{::Dapp::BUILD_CACHE_VERSION}"),
56
+ stage_cache
57
+ ].join(' ')).stdout.lines.map(&:strip)
58
+ end
59
+
60
+ def dapp_images_hash
61
+ shellout!(%(docker images --format "{{.Repository}}:{{.Tag}};{{.ID}}" --no-trunc #{stage_cache})).stdout.lines.map do |line|
62
+ line.strip.split(';')
63
+ end.to_h
64
+ end
65
+
66
+ def except_image_with_parents(image_id, stages)
67
+ if image_exist?(image_id)
68
+ image_dapp_artifacts_label(image_id).each { |aiid| except_image_with_parents(aiid, stages) }
69
+ iid = image_id
70
+ loop do
71
+ stages.delete_if { |_, siid| siid == iid }
72
+ break if (iid = image_parent(iid)).empty?
73
+ end
74
+ else
75
+ stages.delete_if { |_, siid| siid == image_id }
76
+ end
77
+ end
78
+
79
+ def image_exist?(image_id)
80
+ shellout!(%(docker inspect #{image_id}))
81
+ true
82
+ rescue Error::Shellout
83
+ false
84
+ end
85
+
86
+ def image_dapp_artifacts_label(image_id)
87
+ select_dapp_artifacts_ids(::Dapp::Dimg::Image::Docker.image_config_option(image_id: image_id, option: 'labels'))
88
+ end
89
+
90
+ def image_parent(image_id)
91
+ shellout!(%(docker inspect -f {{.Parent}} #{image_id})).stdout.strip
92
+ end
93
+
94
+ def proper_git_commit
95
+ log_proper_git_commit do
96
+ unproper_images_names = []
97
+ dapp_images_detailed.each do |_, attrs|
98
+ attrs['Config']['Labels'].each do |repo_name, commit|
99
+ next if (repo = dapp_git_repositories[repo_name]).nil?
100
+ unproper_images_names.concat(image_hierarchy_by_id(attrs['Id'])) unless repo.commit_exists?(commit)
101
+ end
102
+ end
103
+ remove_images(unproper_images_names.uniq)
104
+ end
105
+ end
106
+
107
+ def dapp_images_detailed
108
+ @dapp_images_detailed ||= {}.tap do |images|
109
+ dapp_images_names.each do |image_name|
110
+ shellout!(%(docker inspect --format='{{json .}}' #{image_name})).stdout.strip.tap do |output|
111
+ images[image_name] = output == 'null' ? {} : JSON.parse(output)
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+ def image_hierarchy_by_id(image_id)
118
+ hierarchy = []
119
+ iids = [image_id]
120
+
121
+ loop do
122
+ hierarchy.concat(dapp_images_detailed.map { |name, attrs| name if iids.include?(attrs['Id']) }.compact)
123
+ break if begin
124
+ iids.map! do |iid|
125
+ dapp_images_detailed.map { |_, attrs| attrs['Id'] if attrs['Parent'] == iid }.compact
126
+ end.flatten!.empty?
127
+ end
128
+ end
129
+
130
+ hierarchy
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end # Dimg
137
+ end # Dapp