dapp 0.10.2 → 0.36.24

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 (287) hide show
  1. checksums.yaml +5 -5
  2. data/bin/dapp +77 -15
  3. data/config/en/common.yml +20 -11
  4. data/config/en/net_status.yml +108 -27
  5. data/lib/dapp/cli/cli.rb +1 -0
  6. data/lib/dapp/cli/command/base.rb +111 -0
  7. data/lib/dapp/cli/command/sample/base.rb +28 -0
  8. data/lib/dapp/cli/command/sample/create.rb +24 -0
  9. data/lib/dapp/cli/command/sample/list.rb +25 -0
  10. data/lib/dapp/cli/command/sample.rb +20 -0
  11. data/lib/dapp/cli/command/slug.rb +26 -0
  12. data/lib/dapp/cli/command/update.rb +65 -0
  13. data/lib/dapp/cli/options/ssh.rb +18 -0
  14. data/lib/dapp/cli/options/tag.rb +51 -0
  15. data/lib/dapp/cli.rb +11 -3
  16. data/lib/dapp/config/config.rb +21 -0
  17. data/lib/dapp/config/directive/base.rb +100 -3
  18. data/lib/dapp/core_ext/hash.rb +14 -0
  19. data/lib/dapp/core_ext/pathname.rb +6 -4
  20. data/lib/dapp/dapp/chef.rb +1 -9
  21. data/lib/dapp/dapp/command/common.rb +24 -0
  22. data/lib/dapp/dapp/command/sample/common.rb +54 -0
  23. data/lib/dapp/dapp/command/sample/create.rb +57 -0
  24. data/lib/dapp/dapp/command/sample/list.rb +13 -0
  25. data/lib/dapp/dapp/command/slug.rb +11 -0
  26. data/lib/dapp/dapp/dapp_config.rb +85 -0
  27. data/lib/dapp/dapp/dappfile.rb +108 -27
  28. data/lib/dapp/dapp/deps/base.rb +9 -32
  29. data/lib/dapp/dapp/deps/common.rb +26 -0
  30. data/lib/dapp/dapp/deps/gitartifact.rb +2 -20
  31. data/lib/dapp/dapp/deps/toolchain.rb +11 -0
  32. data/lib/dapp/dapp/git_artifact.rb +6 -4
  33. data/lib/dapp/dapp/lock.rb +6 -5
  34. data/lib/dapp/dapp/logging/base.rb +32 -20
  35. data/lib/dapp/dapp/logging/i18n.rb +5 -1
  36. data/lib/dapp/dapp/logging/process.rb +6 -6
  37. data/lib/dapp/dapp/option_tags.rb +98 -0
  38. data/lib/dapp/dapp/ruby2go.rb +130 -0
  39. data/lib/dapp/dapp/sentry.rb +97 -0
  40. data/lib/dapp/dapp/shellout/base.rb +26 -18
  41. data/lib/dapp/dapp/shellout/streaming.rb +2 -2
  42. data/lib/dapp/dapp/slug.rb +12 -0
  43. data/lib/dapp/dapp/ssh_agent.rb +25 -7
  44. data/lib/dapp/dapp.rb +192 -41
  45. data/lib/dapp/deployment.rb +1 -0
  46. data/lib/dapp/dimg/artifact.rb +12 -4
  47. data/lib/dapp/dimg/build/stage/artifact_base.rb +26 -30
  48. data/lib/dapp/dimg/build/stage/artifact_default.rb +50 -28
  49. data/lib/dapp/dimg/build/stage/base.rb +187 -52
  50. data/lib/dapp/dimg/build/stage/before_install.rb +4 -15
  51. data/lib/dapp/dimg/build/stage/before_install_artifact.rb +4 -0
  52. data/lib/dapp/dimg/build/stage/before_setup.rb +1 -20
  53. data/lib/dapp/dimg/build/stage/build_artifact.rb +1 -20
  54. data/lib/dapp/dimg/build/stage/docker_instructions.rb +5 -4
  55. data/lib/dapp/dimg/build/stage/from.rb +62 -9
  56. data/lib/dapp/dimg/build/stage/ga_archive.rb +14 -1
  57. data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +1 -5
  58. data/lib/dapp/dimg/build/stage/ga_base.rb +5 -35
  59. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +15 -34
  60. data/lib/dapp/dimg/build/stage/ga_related_base.rb +21 -0
  61. data/lib/dapp/dimg/build/stage/import_artifact.rb +22 -11
  62. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch.rb +6 -2
  63. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb +6 -2
  64. data/lib/dapp/dimg/build/stage/install/install.rb +1 -19
  65. data/lib/dapp/dimg/build/stage/instructions.rb +27 -0
  66. data/lib/dapp/dimg/build/stage/mod/group.rb +19 -7
  67. data/lib/dapp/dimg/build/stage/mod/logging.rb +15 -19
  68. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb +24 -1
  69. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch.rb +6 -2
  70. data/lib/dapp/dimg/build/stage/setup/setup.rb +1 -19
  71. data/lib/dapp/dimg/builder/ansible.rb +5 -0
  72. data/lib/dapp/dimg/builder/chef/cookbook.rb +8 -8
  73. data/lib/dapp/dimg/builder/chef.rb +29 -16
  74. data/lib/dapp/dimg/builder/none.rb +1 -34
  75. data/lib/dapp/dimg/builder/ruby2go.rb +57 -0
  76. data/lib/dapp/dimg/builder/shell.rb +1 -20
  77. data/lib/dapp/dimg/cli/cli.rb +2 -1
  78. data/lib/dapp/dimg/cli/command/base.rb +24 -0
  79. data/lib/dapp/dimg/cli/command/dimg/bp.rb +60 -0
  80. data/lib/dapp/dimg/cli/command/dimg/build.rb +43 -0
  81. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/export.rb +9 -4
  82. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/import.rb +4 -4
  83. data/lib/dapp/dimg/cli/{build_context.rb → command/dimg/build_context.rb} +5 -5
  84. data/lib/dapp/dimg/cli/{cleanup.rb → command/dimg/cleanup.rb} +4 -6
  85. data/lib/dapp/dimg/cli/command/dimg/cleanup_repo.rb +47 -0
  86. data/lib/dapp/dimg/cli/command/dimg/flush_local.rb +24 -0
  87. data/lib/dapp/dimg/cli/command/dimg/flush_repo.rb +36 -0
  88. data/lib/dapp/dimg/cli/{list.rb → command/dimg/list.rb} +6 -3
  89. data/lib/dapp/dimg/cli/{mrproper.rb → command/dimg/mrproper.rb} +4 -4
  90. data/lib/dapp/dimg/cli/command/dimg/push.rb +39 -0
  91. data/lib/dapp/dimg/cli/{run.rb → command/dimg/run.rb} +30 -15
  92. data/lib/dapp/dimg/cli/{spush.rb → command/dimg/spush.rb} +4 -4
  93. data/lib/dapp/dimg/cli/{stage_image.rb → command/dimg/stage_image.rb} +12 -3
  94. data/lib/dapp/dimg/cli/command/dimg/stages/base.rb +13 -0
  95. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_local.rb +13 -9
  96. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_repo.rb +6 -8
  97. data/lib/dapp/dimg/cli/command/dimg/stages/flush_local.rb +21 -0
  98. data/lib/dapp/dimg/cli/command/dimg/stages/flush_repo.rb +28 -0
  99. data/lib/dapp/dimg/cli/command/dimg/stages/pull.rb +34 -0
  100. data/lib/dapp/dimg/cli/command/dimg/stages/push.rb +30 -0
  101. data/lib/dapp/dimg/cli/command/dimg/stages.rb +22 -0
  102. data/lib/dapp/dimg/cli/command/dimg/tag.rb +24 -0
  103. data/lib/dapp/dimg/cli/command/dimg.rb +31 -0
  104. data/lib/dapp/dimg/cli/options/introspection.rb +45 -0
  105. data/lib/dapp/dimg/config/config.rb +24 -0
  106. data/lib/dapp/dimg/config/directive/artifact.rb +13 -15
  107. data/lib/dapp/dimg/config/directive/artifact_base.rb +13 -8
  108. data/lib/dapp/dimg/config/directive/artifact_dimg.rb +12 -0
  109. data/lib/dapp/dimg/config/directive/artifact_group.rb +60 -0
  110. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +203 -0
  111. data/lib/dapp/dimg/config/directive/dimg/validation.rb +217 -0
  112. data/lib/dapp/dimg/config/directive/dimg.rb +36 -0
  113. data/lib/dapp/dimg/config/directive/dimg_group.rb +73 -0
  114. data/lib/dapp/dimg/config/directive/dimg_group_base.rb +46 -0
  115. data/lib/dapp/dimg/config/directive/docker/artifact.rb +5 -0
  116. data/lib/dapp/dimg/config/directive/docker/base.rb +2 -3
  117. data/lib/dapp/dimg/config/directive/docker/dimg.rb +4 -4
  118. data/lib/dapp/dimg/config/directive/git_artifact_local.rb +24 -5
  119. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +23 -12
  120. data/lib/dapp/dimg/config/directive/mount.rb +11 -3
  121. data/lib/dapp/dimg/config/directive/shell/dimg.rb +2 -2
  122. data/lib/dapp/dimg/dapp/command/bp.rb +3 -5
  123. data/lib/dapp/dimg/dapp/command/build.rb +4 -6
  124. data/lib/dapp/dimg/dapp/command/build_context/common.rb +2 -2
  125. data/lib/dapp/dimg/dapp/command/build_context/export.rb +14 -14
  126. data/lib/dapp/dimg/dapp/command/build_context/import.rb +28 -23
  127. data/lib/dapp/dimg/dapp/command/cleanup.rb +4 -11
  128. data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +143 -0
  129. data/lib/dapp/dimg/dapp/command/common.rb +148 -38
  130. data/lib/dapp/dimg/dapp/command/flush_local.rb +25 -0
  131. data/lib/dapp/dimg/dapp/command/flush_repo.rb +25 -0
  132. data/lib/dapp/dimg/dapp/command/list.rb +1 -1
  133. data/lib/dapp/dimg/dapp/command/mrproper.rb +16 -63
  134. data/lib/dapp/dimg/dapp/command/push.rb +11 -16
  135. data/lib/dapp/dimg/dapp/command/ruby2go_cleanup.rb +48 -0
  136. data/lib/dapp/dimg/dapp/command/run.rb +4 -4
  137. data/lib/dapp/dimg/dapp/command/spush.rb +4 -5
  138. data/lib/dapp/dimg/dapp/command/stage_image.rb +2 -2
  139. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +13 -115
  140. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +23 -102
  141. data/lib/dapp/dimg/dapp/command/stages/common.rb +57 -39
  142. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +13 -7
  143. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +14 -8
  144. data/lib/dapp/dimg/dapp/command/stages/pull.rb +4 -13
  145. data/lib/dapp/dimg/dapp/command/stages/push.rb +4 -9
  146. data/lib/dapp/dimg/dapp/command/tag.rb +4 -6
  147. data/lib/dapp/dimg/dapp/config_artifact_group.rb +20 -0
  148. data/lib/dapp/dimg/dapp/dapp.rb +40 -0
  149. data/lib/dapp/dimg/dapp/dappfile.rb +43 -0
  150. data/lib/dapp/dimg/dapp/dimg.rb +41 -0
  151. data/lib/dapp/dimg/dimg/git_artifact.rb +25 -11
  152. data/lib/dapp/dimg/dimg/path.rb +7 -9
  153. data/lib/dapp/dimg/dimg/stages.rb +27 -15
  154. data/lib/dapp/dimg/dimg.rb +172 -69
  155. data/lib/dapp/dimg/docker_registry/base.rb +31 -74
  156. data/lib/dapp/dimg/docker_registry/dimg.rb +55 -0
  157. data/lib/dapp/dimg/docker_registry.rb +5 -23
  158. data/lib/dapp/dimg/error/build.rb +1 -1
  159. data/lib/dapp/dimg/error/chef.rb +1 -5
  160. data/lib/dapp/dimg/error/{command.rb → default.rb} +1 -1
  161. data/lib/dapp/dimg/error/dimg.rb +1 -1
  162. data/lib/dapp/dimg/error/lock.rb +1 -1
  163. data/lib/dapp/dimg/error/registry.rb +1 -1
  164. data/lib/dapp/dimg/error/rugged.rb +1 -1
  165. data/lib/dapp/dimg/error/tar_writer.rb +1 -1
  166. data/lib/dapp/dimg/git_artifact.rb +195 -179
  167. data/lib/dapp/dimg/git_repo/base.rb +49 -45
  168. data/lib/dapp/dimg/git_repo/local.rb +45 -0
  169. data/lib/dapp/dimg/git_repo/own.rb +3 -31
  170. data/lib/dapp/dimg/git_repo/remote.rb +65 -26
  171. data/lib/dapp/dimg/image/argument.rb +15 -50
  172. data/lib/dapp/dimg/image/dimg.rb +15 -0
  173. data/lib/dapp/dimg/image/scratch.rb +35 -9
  174. data/lib/dapp/dimg/image/stage.rb +223 -44
  175. data/lib/dapp/dimg/lock/file.rb +4 -4
  176. data/lib/dapp/downloader.rb +117 -0
  177. data/lib/dapp/error/base.rb +1 -5
  178. data/lib/dapp/error/command.rb +5 -0
  179. data/lib/dapp/error/config.rb +5 -0
  180. data/lib/dapp/error/dapp.rb +1 -1
  181. data/lib/dapp/error/dappfile.rb +1 -1
  182. data/lib/dapp/error/default.rb +11 -0
  183. data/lib/dapp/error/mod/user.rb +11 -0
  184. data/lib/dapp/error/shellout.rb +1 -1
  185. data/lib/dapp/exception/base.rb +1 -1
  186. data/lib/dapp/helper/case_conversion.rb +17 -0
  187. data/lib/dapp/helper/cli.rb +18 -7
  188. data/lib/dapp/helper/net_status.rb +5 -1
  189. data/lib/dapp/helper/sha256.rb +1 -1
  190. data/lib/dapp/helper/tar.rb +31 -0
  191. data/lib/dapp/helper/trivia.rb +40 -1
  192. data/lib/dapp/helper/url.rb +23 -0
  193. data/lib/dapp/helper/yaml.rb +24 -0
  194. data/lib/dapp/kube/cli/cli.rb +1 -0
  195. data/lib/dapp/kube/cli/command/base.rb +14 -0
  196. data/lib/dapp/kube/cli/command/kube/chart_create.rb +19 -0
  197. data/lib/dapp/kube/cli/command/kube/deploy.rb +80 -0
  198. data/lib/dapp/kube/cli/command/kube/dismiss.rb +31 -0
  199. data/lib/dapp/kube/cli/command/kube/lint.rb +53 -0
  200. data/lib/dapp/kube/cli/command/kube/minikube_setup.rb +19 -0
  201. data/lib/dapp/kube/cli/command/kube/render.rb +63 -0
  202. data/lib/dapp/kube/cli/command/kube/secret_edit.rb +30 -0
  203. data/lib/dapp/kube/cli/command/kube/secret_extract.rb +39 -0
  204. data/lib/dapp/kube/cli/command/kube/secret_generate.rb +34 -0
  205. data/lib/dapp/kube/cli/command/kube/secret_key_generate.rb +16 -0
  206. data/lib/dapp/kube/cli/command/kube/secret_regenerate.rb +29 -0
  207. data/lib/dapp/kube/cli/command/kube/value_get.rb +47 -0
  208. data/lib/dapp/kube/cli/command/kube.rb +28 -0
  209. data/lib/dapp/kube/dapp/command/chart_create.rb +103 -0
  210. data/lib/dapp/kube/dapp/command/common.rb +379 -0
  211. data/lib/dapp/kube/dapp/command/deploy.rb +351 -0
  212. data/lib/dapp/kube/dapp/command/dismiss.rb +50 -0
  213. data/lib/dapp/kube/dapp/command/lint.rb +69 -0
  214. data/lib/dapp/kube/dapp/command/minikube_setup.rb +402 -0
  215. data/lib/dapp/kube/dapp/command/render.rb +54 -0
  216. data/lib/dapp/kube/dapp/command/ruby2go.rb +17 -0
  217. data/lib/dapp/kube/dapp/command/secret_edit.rb +21 -0
  218. data/lib/dapp/kube/dapp/command/secret_extract.rb +17 -0
  219. data/lib/dapp/kube/dapp/command/secret_generate.rb +21 -0
  220. data/lib/dapp/kube/dapp/command/secret_key_generate.rb +13 -0
  221. data/lib/dapp/kube/dapp/command/secret_regenerate.rb +13 -0
  222. data/lib/dapp/kube/dapp/command/value_get.rb +32 -0
  223. data/lib/dapp/kube/dapp/dapp.rb +26 -0
  224. data/lib/dapp/kube/error/default.rb +7 -0
  225. data/lib/dapp/kube/helm/release.rb +189 -0
  226. data/lib/dapp/kube/helm/values.rb +148 -0
  227. data/lib/dapp/kube/helm.rb +5 -0
  228. data/lib/dapp/kube/kubernetes/client/error.rb +43 -0
  229. data/lib/dapp/kube/kubernetes/client/resource/base.rb +33 -0
  230. data/lib/dapp/kube/kubernetes/client/resource/deployment.rb +11 -0
  231. data/lib/dapp/kube/kubernetes/client/resource/event.rb +8 -0
  232. data/lib/dapp/kube/kubernetes/client/resource/job.rb +27 -0
  233. data/lib/dapp/kube/kubernetes/client/resource/pod.rb +62 -0
  234. data/lib/dapp/kube/kubernetes/client/resource/replicaset.rb +8 -0
  235. data/lib/dapp/kube/kubernetes/client.rb +314 -0
  236. data/lib/dapp/kube/kubernetes/config.rb +132 -0
  237. data/lib/dapp/kube/kubernetes/error.rb +15 -0
  238. data/lib/dapp/kube/kubernetes/manager/base.rb +15 -0
  239. data/lib/dapp/kube/kubernetes/manager/container.rb +103 -0
  240. data/lib/dapp/kube/kubernetes/manager/deployment.rb +212 -0
  241. data/lib/dapp/kube/kubernetes/manager/job.rb +65 -0
  242. data/lib/dapp/kube/kubernetes/manager/pod.rb +69 -0
  243. data/lib/dapp/kube/kubernetes.rb +6 -0
  244. data/lib/dapp/kube/secret.rb +93 -0
  245. data/lib/dapp/kube.rb +1 -0
  246. data/lib/dapp/version.rb +2 -2
  247. data/lib/dapp.rb +155 -61
  248. metadata +208 -61
  249. data/lib/dapp/cli/base.rb +0 -63
  250. data/lib/dapp/config/base.rb +0 -54
  251. data/lib/dapp/config/error/config.rb +0 -7
  252. data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +0 -27
  253. data/lib/dapp/dimg/build/stage/ga_dependencies_base.rb +0 -20
  254. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +0 -22
  255. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +0 -22
  256. data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +0 -23
  257. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +0 -32
  258. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +0 -22
  259. data/lib/dapp/dimg/cli/base.rb +0 -16
  260. data/lib/dapp/dimg/cli/bp.rb +0 -37
  261. data/lib/dapp/dimg/cli/build.rb +0 -64
  262. data/lib/dapp/dimg/cli/dimg.rb +0 -30
  263. data/lib/dapp/dimg/cli/push.rb +0 -61
  264. data/lib/dapp/dimg/cli/stages/flush_local.rb +0 -23
  265. data/lib/dapp/dimg/cli/stages/flush_repo.rb +0 -24
  266. data/lib/dapp/dimg/cli/stages/pull.rb +0 -28
  267. data/lib/dapp/dimg/cli/stages/push.rb +0 -24
  268. data/lib/dapp/dimg/cli/stages.rb +0 -22
  269. data/lib/dapp/dimg/cli/tag.rb +0 -24
  270. data/lib/dapp/dimg/config/artifact_dimg.rb +0 -17
  271. data/lib/dapp/dimg/config/artifact_group.rb +0 -43
  272. data/lib/dapp/dimg/config/base.rb +0 -7
  273. data/lib/dapp/dimg/config/dimg/instance_methods.rb +0 -179
  274. data/lib/dapp/dimg/config/dimg/validation.rb +0 -126
  275. data/lib/dapp/dimg/config/dimg.rb +0 -24
  276. data/lib/dapp/dimg/config/dimg_group.rb +0 -61
  277. data/lib/dapp/dimg/config/dimg_group_base.rb +0 -54
  278. data/lib/dapp/dimg/config/dimg_group_main.rb +0 -22
  279. data/lib/dapp/dimg/dapp/command.rb +0 -21
  280. data/lib/dapp/dimg/dimg/tags.rb +0 -65
  281. data/lib/dapp/dimg/docker_registry/base/authorization.rb +0 -63
  282. data/lib/dapp/dimg/docker_registry/base/request.rb +0 -34
  283. data/lib/dapp/dimg/docker_registry/default.rb +0 -18
  284. data/lib/dapp/dimg/error/base.rb +0 -7
  285. data/lib/dapp/dimg/error/config.rb +0 -7
  286. data/lib/dapp/dimg/exception/introspect_image.rb +0 -7
  287. data/lib/dapp/dimg/image/docker.rb +0 -134
@@ -1,94 +1,204 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Common
6
+ def dimgstage_push_tag_format
7
+ 'dimgstage-%{signature}'
8
+ end
9
+
6
10
  protected
7
11
 
8
- def dapp_images_names
9
- shellout!(%(docker images --format="{{.Repository}}:{{.Tag}}" #{stage_cache})).stdout.lines.map(&:strip)
12
+ def dapp_project_dimgstages
13
+ dapp_project_images.select { |image| image[:dimgstage] }
14
+ end
15
+
16
+ def dapp_project_dimgs
17
+ dapp_project_images.select { |image| image[:dimg] }
18
+ end
19
+
20
+ def dapp_project_image_by_id(image_id)
21
+ dapp_project_images.find { |image| image["Id"] == image_id }
22
+ end
23
+
24
+ def dapp_project_images
25
+ @dapp_project_images ||= [].tap do |images|
26
+ images.concat prepare_docker_images(extra_filters: [{ reference: stage_cache }], extra_image_fields: { dimgstage: true })
27
+ images.concat prepare_docker_images(extra_filters: [{ label: "dapp-dimg=true" }], extra_image_fields: { dimg: true })
28
+ end
29
+ end
30
+
31
+ def prepare_docker_images(extra_filters: [], extra_image_fields: {})
32
+ filters = []
33
+ filters << { dangling: "false" }
34
+ filters << { label: "dapp=#{name}" }
35
+ filters.concat(extra_filters)
36
+
37
+ ruby2go_image_images(filters, ignore_tagless: true).map { |image| image.merge(**extra_image_fields) }
38
+ end
39
+
40
+ def ruby2go_image_images(filters, ignore_tagless:)
41
+ Image::Stage.ruby2go_command(self, command: :images, options: { filters: filters }).tap do |images|
42
+ if ignore_tagless
43
+ break images.select do |image|
44
+ image["RepoTags"].reject! { |tag| tag.split(":").last == '<none>' }
45
+ !image["RepoTags"].empty?
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ def ruby2go_image_containers(filters)
52
+ Image::Stage.ruby2go_command(self, command: :containers, options: { filters: filters })
53
+ end
54
+
55
+ def ruby2go_image_rm(ids, force: false)
56
+ Image::Stage.ruby2go_command(self, command: :rm, options: { ids: ids, force: force })
57
+ end
58
+
59
+ def ruby2go_image_rmi(ids, force: false)
60
+ Image::Stage.ruby2go_command(self, command: :rmi, options: { ids: ids, force: force })
10
61
  end
11
62
 
12
- def dapp_images_ids
13
- shellout!(%(docker images #{stage_cache} -q --no-trunc)).stdout.lines.map(&:strip)
63
+ def remove_project_images(project_images, force: false)
64
+ update_project_images_cache(project_images)
65
+ remove_images(project_images_to_delete(project_images), force: force)
14
66
  end
15
67
 
16
- def dapp_containers_flush
17
- remove_containers_by_query(%(docker ps -a -f "label=dapp" -f "name=#{container_name_prefix}" -q), force: true)
68
+ def update_project_images_cache(project_images)
69
+ array_hash_delete_if_by_id(dapp_project_images, project_images)
18
70
  end
19
71
 
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)
72
+ def array_hash_delete_if_by_id(project_images, *images)
73
+ project_images.delete_if { |image| images.flatten.any? { |i| image["Id"] == i["Id"] } }
22
74
  end
23
75
 
24
- def remove_images_by_query(images_query, force: false)
25
- with_subquery(images_query) { |ids| remove_images(ids, force: force) }
76
+ def project_images_to_delete(project_images)
77
+ project_images.map { |i| i["RepoTags"] }.flatten.uniq
26
78
  end
27
79
 
28
- def remove_images(ids, force: false)
29
- remove_base('docker rmi%{force_option} %{ids}', ids.uniq, force: force)
80
+ def dapp_containers_flush_by_label(label)
81
+ log_proper_containers do
82
+ containers = ruby2go_image_containers([{ name: "dapp.build.", label: label }])
83
+ remove_containers(containers.map { |c| c["Id"] })
84
+ end
30
85
  end
31
86
 
32
- def remove_containers_by_query(containers_query, force: false)
33
- with_subquery(containers_query) { |ids| remove_containers(ids, force: force) }
87
+ def dapp_dangling_images_flush_by_label(label)
88
+ log_proper_flush_dangling_images do
89
+ images = ruby2go_image_images([{ dangling: "true", label: label }], ignore_tagless: false)
90
+ remove_images(images.map { |i| i["Id"] })
91
+ end
34
92
  end
35
93
 
36
- def remove_containers(ids, force: false)
37
- remove_base('docker rm%{force_option} %{ids}', ids.uniq, force: force)
94
+ def dapp_tagless_images_flush
95
+ remove_images begin
96
+ ruby2go_image_images([{ dangling: "false", label: "dapp" }], ignore_tagless: false)
97
+ .map { |image| image["RepoTags"].select { |tag| tag.split(":").last == "<none>" } }
98
+ .flatten
99
+ end
38
100
  end
39
101
 
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(' '))) }
102
+ def remove_images(images_ids_or_names, force: false)
103
+ proc = proc { |refs| ruby2go_image_rmi(refs, force: force) }
104
+ images_ids_or_names = ignore_used_images(images_ids_or_names) unless force
105
+ remove_base(images_ids_or_names, proc: proc)
44
106
  end
45
107
 
46
- def with_subquery(query)
47
- return if (res = shellout!(query).stdout.strip.lines.map(&:strip)).empty?
48
- yield(res)
108
+ def ignore_used_images(images_ids_or_names)
109
+ not_used_images = proc do |*image_id_or_name, log: true|
110
+ images = image_id_or_name.flatten
111
+ filters = images.map { |ref| { ancestor: ref } }
112
+
113
+ containers = ruby2go_image_containers(filters).select { |c| images.include?(c["Image"]) || images.include?(c["ImageID"]) } # ancestor filter matches containers based on its image or a descendant of it
114
+ if containers.empty?
115
+ true
116
+ else
117
+ log_info("Skip `#{images.join('`, `')}` (used by containers: #{ containers.map { |c| c["Id"] }.join(' ')})") if log
118
+ false
119
+ end
120
+ end
121
+
122
+ if not_used_images.call(images_ids_or_names, log: false)
123
+ images_ids_or_names
124
+ else
125
+ images_ids_or_names.select(&not_used_images)
126
+ end
49
127
  end
50
128
 
51
- def image_labels(image_id)
52
- Image::Stage.image_config_option(image_id: image_id, option: 'labels')
129
+ def remove_containers(ids)
130
+ proc = proc { |refs| ruby2go_image_rm(refs, force: true) }
131
+ remove_base(ids, proc: proc)
53
132
  end
54
133
 
55
- def run_command(cmd)
56
- log(cmd) if log_verbose? || dry_run?
57
- shellout!(cmd) unless dry_run?
134
+ def remove_base(ids, proc:)
135
+ return if ids.empty?
136
+ ids.uniq!
137
+ log(ids.join("\n")) if dry_run?
138
+ proc.call(ids) unless dry_run?
139
+ end
140
+
141
+ def dimg_import_export_base(should_be_built: true)
142
+ repo = option_repo
143
+ validate_repo_name!(repo)
144
+ build_configs.each do |config|
145
+ log_dimg_name_with_indent(config) do
146
+ yield dimg(config: config, should_be_built: should_be_built)
147
+ end
148
+ end
58
149
  end
59
150
 
60
- def container_name_prefix
61
- name
151
+ def validate_repo_name!(repo)
152
+ raise ::Dapp::Error::Command, code: :repo_name_incorrect, data: { name: repo } unless ::Dapp::Dimg::DockerRegistry.repo_name?(repo)
62
153
  end
63
154
 
64
- def validate_repo_name(repo)
65
- raise(Error::Command, code: :repo_name_incorrect, data: { name: repo }) unless ::Dapp::Dimg::DockerRegistry.repo_name?(repo)
155
+ def validate_image_name!(image)
156
+ raise ::Dapp::Error::Command, code: :image_name_incorrect, data: { name: image } unless ::Dapp::Dimg::Image::Stage.image_name?(image)
157
+ end
158
+
159
+ def validate_tag_name!(tag)
160
+ raise ::Dapp::Error::Command, code: :tag_name_incorrect, data: { name: tag } unless ::Dapp::Dimg::Image::Stage.tag?(tag)
66
161
  end
67
162
 
68
163
  def proper_cache_version?
69
- !!cli_options[:proper_cache_version]
164
+ !!options[:proper_cache_version]
70
165
  end
71
166
 
72
167
  def log_proper_cache(&blk)
73
168
  log_step_with_indent(:'proper cache', &blk)
74
169
  end
75
170
 
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(' ') }
171
+ def log_proper_repo_cache(&blk)
172
+ log_step_with_indent(:'proper repo cache', &blk)
173
+ end
174
+
175
+ def log_proper_containers(&blk)
176
+ log_step_with_indent(:'proper containers', &blk)
177
+ end
178
+
179
+ def log_proper_flush_dangling_images(&blk)
180
+ log_step_with_indent(:'proper dangling', &blk)
79
181
  end
80
182
 
81
183
  def push_format(dimg_name)
82
184
  if dimg_name.nil?
83
185
  spush_format
84
186
  else
85
- '%{repo}:%{dimg_name}-%{tag}'
187
+ '%{repo}/%{dimg_name}:%{tag}'
86
188
  end
87
189
  end
88
190
 
89
191
  def spush_format
90
192
  '%{repo}:%{tag}'
91
193
  end
194
+
195
+ def dimgstage_push_format
196
+ "%{repo}:#{dimgstage_push_tag_format}"
197
+ end
198
+
199
+ def with_stages?
200
+ !!options[:with_stages]
201
+ end
92
202
  end
93
203
  end
94
204
  end
@@ -0,0 +1,25 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Dapp
4
+ module Command
5
+ module FlushLocal
6
+ def flush_local
7
+ ruby2go_cleanup_command(:flush, ruby2go_cleanup_flush_local_options_dump)
8
+ end
9
+
10
+ def ruby2go_cleanup_flush_local_options_dump
11
+ ruby2go_cleanup_common_project_options.merge(
12
+ mode: {
13
+ with_dimgs: true,
14
+ with_stages: with_stages?,
15
+ only_repo: false,
16
+ },
17
+ ).tap do |data|
18
+ break JSON.dump(data)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end # Dimg
25
+ end # Dapp
@@ -0,0 +1,25 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Dapp
4
+ module Command
5
+ module FlushRepo
6
+ def flush_repo
7
+ ruby2go_cleanup_command(:flush, ruby2go_cleanup_flush_repo_options_dump)
8
+ end
9
+
10
+ def ruby2go_cleanup_flush_repo_options_dump
11
+ ruby2go_cleanup_common_repo_options.merge(
12
+ mode: {
13
+ with_dimgs: true,
14
+ with_stages: with_stages?,
15
+ only_repo: true,
16
+ }
17
+ ).tap do |json|
18
+ break JSON.dump(json)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end # Dimg
25
+ end # Dapp
@@ -1,6 +1,6 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module List
6
6
  def list
@@ -1,73 +1,26 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Mrproper
6
- # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
7
6
  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)
7
+ ruby2go_cleanup_command(:reset, ruby2go_cleanup_reset_options_dump)
8
+ end
9
+
10
+ def ruby2go_cleanup_reset_options_dump
11
+ ruby2go_cleanup_cache_version_options.merge(
12
+ mode: {
13
+ all: !!options[:proper_all],
14
+ dev_mode_cache: !!options[:proper_dev_mode_cache],
15
+ cache_version: proper_cache_version?
16
+ },
17
+ common_options: {
18
+ dry_run: dry_run?
19
+ },
20
+ ).tap do |json|
21
+ break JSON.dump(json)
61
22
  end
62
23
  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
24
  end
72
25
  end
73
26
  end
@@ -1,24 +1,19 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
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
6
+ def push
7
+ #require 'ruby-prof'
8
+ #RubyProf.start
9
+ log_step_with_indent(:stages) { stages_push } if with_stages?
10
+ dimg_import_export_base do |dimg|
11
+ dimg.export!(option_repo, format: push_format(dimg.name))
15
12
  end
16
- end
17
-
18
- protected
19
-
20
- def with_stages?
21
- !!cli_options[:with_stages]
13
+ # FIXME: rework images cache, then profile
14
+ #result = RubyProf.stop
15
+ #printer = RubyProf::MultiPrinter.new(result)
16
+ #printer.print(path: '/tmp/testdapp.push.profile', profile: 'profile')
22
17
  end
23
18
  end
24
19
  end
@@ -0,0 +1,48 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Dapp
4
+ module Command
5
+ module Ruby2GoCleanup
6
+ def ruby2go_cleanup_command(command, command_options, **options)
7
+ options = {
8
+ command: command,
9
+ command_options: command_options,
10
+ options: { host_docker_config_dir: self.class.host_docker_config_dir }.merge(options)
11
+ }
12
+
13
+ ruby2go_cleanup(options).tap do |res|
14
+ raise Error::Build, code: :ruby2go_cleanup_command_failed_unexpected_error, data: { command: command, message: res["error"] } unless res["error"].nil?
15
+ end
16
+ end
17
+
18
+ def ruby2go_cleanup_common_project_options
19
+ {
20
+ common_project_options: {
21
+ project_name: name,
22
+ common_options: {
23
+ dry_run: dry_run?,
24
+ }
25
+ },
26
+ }
27
+ end
28
+
29
+ def ruby2go_cleanup_cache_version_options
30
+ {
31
+ cache_version: ::Dapp::BUILD_CACHE_VERSION.to_s
32
+ }
33
+ end
34
+
35
+ def ruby2go_cleanup_common_repo_options
36
+ {
37
+ common_repo_options: {
38
+ repository: option_repo,
39
+ dimgs_names: nameless_dimg? ? [] : dimgs_names,
40
+ dry_run: dry_run?
41
+ }
42
+ }
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end # Dimg
48
+ end # Dapp
@@ -1,12 +1,12 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Run
6
- def run(docker_options, command)
6
+ def run(stage_name, docker_options, command)
7
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)
8
+ dimg(config: build_configs.first, should_be_built: stage_name.nil?, ignore_signature_auto_calculation: true)
9
+ .run_stage(stage_name, docker_options, command)
10
10
  end
11
11
  end
12
12
  end
@@ -1,13 +1,12 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Spush
6
- def spush(repo)
7
- validate_repo_name(repo)
6
+ def spush
8
7
  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)
8
+ dimg_import_export_base do |dimg|
9
+ dimg.export!(option_repo, format: spush_format)
11
10
  end
12
11
  end
13
12
  end
@@ -1,11 +1,11 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module StageImage
6
6
  def stage_image
7
7
  one_dimg!
8
- puts Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true).stage_image_name(cli_options[:stage])
8
+ puts dimg(config: build_configs.first).stage_image_name(options[:stage])
9
9
  end
10
10
  end
11
11
  end