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
@@ -0,0 +1,41 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Dapp
4
+ module Dimg
5
+ def dimg(config:, **kwargs)
6
+ dimg_after_define_hook(config: config, **kwargs) do
7
+ (@dimg ||= {})[config._name] ||= ::Dapp::Dimg::Dimg.new(config: config, dapp: self, **kwargs)
8
+ end
9
+ end
10
+
11
+ def artifact_dimg(config:, **kwargs)
12
+ dimg_after_define_hook(config: config, **kwargs) do
13
+ (@artifacts_dimgs ||= {})[config._name] ||= ::Dapp::Dimg::Artifact.new(config: config, dapp: self, **kwargs)
14
+ end
15
+ end
16
+
17
+ def dimg_after_define_hook(**kwargs)
18
+ should_be_built = kwargs[:should_be_built] || false
19
+ yield.tap do |dimg|
20
+ if should_be_built && dimg.should_be_built != should_be_built
21
+ dimg.enable_should_be_built
22
+ dimg.should_be_built!
23
+ end
24
+ end
25
+ end
26
+
27
+ def dimg_layer(config:, **kwargs)
28
+ (@dimg_layers ||= {})[config._name] ||= ::Dapp::Dimg::Dimg.new(config: config, dapp: self, **kwargs)
29
+ end
30
+
31
+ def artifact_dimg_layer(config:, **kwargs)
32
+ (@artifact_dimg_layers ||= {})[config._name] ||= ::Dapp::Dimg::Artifact.new(config: config, dapp: self, **kwargs)
33
+ end
34
+
35
+ def _terminate_dimg_on_terminate(dimg)
36
+ @_call_before_terminate << proc{dimg.terminate}
37
+ end
38
+ end # Dimg
39
+ end # Dapp
40
+ end # Dimg
41
+ end # Dapp
@@ -2,24 +2,38 @@ module Dapp
2
2
  module Dimg
3
3
  class Dimg
4
4
  module GitArtifact
5
- def git_artifacts
6
- [*local_git_artifacts, *remote_git_artifacts].compact
5
+ def git_artifacts(omit_empty: true)
6
+ [*local_git_artifacts(omit_empty: omit_empty), *remote_git_artifacts(omit_empty: omit_empty)].compact
7
7
  end
8
8
 
9
- def local_git_artifacts
10
- @local_git_artifact_list ||= Array(config._git_artifact._local).map do |ga_config|
11
- repo = GitRepo::Own.new(self)
12
- ::Dapp::Dimg::GitArtifact.new(repo, **ga_config._artifact_options)
9
+ def local_git_artifacts(omit_empty: true)
10
+ @local_git_artifact_list ||= [].tap do |artifacts|
11
+ break artifacts if (local_git_artifacts = Array(config._git_artifact._local)).empty?
12
+ repo = GitRepo::Own.new(dapp)
13
+ local_git_artifacts.map do |ga_config|
14
+ artifacts.concat(generate_git_artifacts(repo, omit_empty: omit_empty, **ga_config._artifact_options))
15
+ end unless repo.empty?
13
16
  end
14
17
  end
15
18
 
16
- def remote_git_artifacts
17
- @remote_git_artifact_list ||= Array(config._git_artifact._remote).map do |ga_config|
18
- repo = GitRepo::Remote.new(self, ga_config._name, url: ga_config._url)
19
- repo.fetch!(ga_config._branch)
20
- ::Dapp::Dimg::GitArtifact.new(repo, **ga_config._artifact_options)
19
+ def remote_git_artifacts(omit_empty: true)
20
+ @remote_git_artifact_list ||= [].tap do |artifacts|
21
+ Array(config._git_artifact._remote).each do |ga_config|
22
+ repo = GitRepo::Remote.get_or_create(dapp, ga_config._name, url: ga_config._url)
23
+ artifacts.concat(generate_git_artifacts(repo, omit_empty: omit_empty, **ga_config._artifact_options)) unless repo.empty?
24
+ end
21
25
  end
22
26
  end
27
+
28
+ def generate_git_artifacts(repo, omit_empty: true, **git_artifact_options)
29
+ [].tap do |artifacts|
30
+ artifacts << (artifact = ::Dapp::Dimg::GitArtifact.new(repo, self, ignore_signature_auto_calculation: ignore_signature_auto_calculation, **git_artifact_options))
31
+ artifacts
32
+ end.select do |artifact|
33
+ !omit_empty || !artifact.is_empty
34
+ end
35
+ end
36
+
23
37
  end # GitArtifact
24
38
  end # Mod
25
39
  end # Dimg
@@ -3,16 +3,20 @@ module Dapp
3
3
  class Dimg
4
4
  module Path
5
5
  def home_path(*path)
6
- make_path(dapp.path, *path).expand_path
6
+ dapp.path(*path).expand_path
7
+ end
8
+
9
+ def tmp_dir_exists?
10
+ @tmp_path != nil
7
11
  end
8
12
 
9
13
  def tmp_path(*path)
10
- @tmp_path ||= Dir.mktmpdir('dapp-', dapp.cli_options[:tmp_dir_prefix] || '/tmp')
14
+ @tmp_path ||= Dir.mktmpdir('dapp-', dapp.tmp_base_dir)
11
15
  make_path(@tmp_path, *path).expand_path.tap { |p| p.parent.mkpath }
12
16
  end
13
17
 
14
18
  def build_path(*path)
15
- make_path(dapp.build_path, *path).expand_path.tap { |p| p.parent.mkpath }
19
+ dapp.build_path(*path).expand_path.tap { |p| p.parent.mkpath }
16
20
  end
17
21
 
18
22
  def container_dapp_path(*path)
@@ -25,12 +29,6 @@ module Dapp
25
29
 
26
30
  alias build_dir build_path
27
31
  alias tmp_dir tmp_path
28
-
29
- private
30
-
31
- def make_path(base, *path)
32
- path.compact.map(&:to_s).inject(Pathname.new(base), &:+)
33
- end
34
32
  end # Path
35
33
  end
36
34
  end # Dimg
@@ -3,7 +3,7 @@ module Dapp
3
3
  class Dimg
4
4
  module Stages
5
5
  def signature
6
- last_stage.send(:signature)
6
+ last_stage.signature
7
7
  end
8
8
 
9
9
  def stage_by_name(name)
@@ -18,31 +18,39 @@ module Dapp
18
18
  dapp.stage_dapp_label
19
19
  end
20
20
 
21
- def tagged_images
22
- all_images.select(&:tagged?)
23
- end
24
- alias export_images tagged_images
25
-
26
- def all_images
27
- @all_images ||= all_stages.map(&:image).uniq!(&:name)
21
+ def all_tagged_images
22
+ tagged_images.concat(artifacts.map(&:all_tagged_images).flatten).uniq(&:name)
28
23
  end
29
24
 
30
- def all_stages
31
- stages + artifacts.map(&:all_stages).flatten
25
+ def last_stage
26
+ @last_stage || begin
27
+ (self.last_stage = last_stage_class.new(self)).tap do |stage|
28
+ dapp.log_secondary_process("#{name || 'nameless'}: calculating stages signatures") do
29
+ stage.signature
30
+ end unless ignore_signature_auto_calculation
31
+ end
32
+ end
32
33
  end
33
34
 
34
35
  protected
35
36
 
36
- def last_stage
37
- @last_stage ||= if scratch?
38
- Build::Stage::ImportArtifact.new(self)
37
+ attr_writer :last_stage
38
+
39
+ def last_stage_class
40
+ if scratch?
41
+ Build::Stage::ImportArtifact
39
42
  else
40
- Build::Stage::DockerInstructions.new(self)
43
+ Build::Stage::DockerInstructions
41
44
  end
42
45
  end
43
46
 
47
+ def tagged_images
48
+ images.select(&:tagged?)
49
+ end
50
+ alias export_images tagged_images
51
+
44
52
  def import_images
45
- all_images.select { |image| !image.tagged? }
53
+ images.select { |image| !image.tagged? }
46
54
  end
47
55
 
48
56
  def artifacts_stages
@@ -58,6 +66,10 @@ module Dapp
58
66
  end
59
67
  end
60
68
  end
69
+
70
+ def images
71
+ stages.map(&:image).uniq(&:name)
72
+ end
61
73
  end # Stages
62
74
  end # Mod
63
75
  end # Dimg
@@ -3,91 +3,166 @@ module Dapp
3
3
  class Dimg
4
4
  include GitArtifact
5
5
  include Path
6
- include Tags
7
6
  include Stages
8
7
 
9
8
  include Helper::Sha256
9
+ include Helper::Trivia
10
10
 
11
11
  attr_reader :config
12
- attr_reader :ignore_git_fetch
12
+ attr_reader :ignore_signature_auto_calculation
13
13
  attr_reader :should_be_built
14
14
  attr_reader :dapp
15
15
 
16
- def initialize(config:, dapp:, should_be_built: false, ignore_git_fetch: false)
16
+ def get_ruby2go_state_hash
17
+ {
18
+ "Dapp" => dapp.get_ruby2go_state_hash,
19
+ "TmpPath" => tmp_path.to_s,
20
+ }
21
+ end
22
+
23
+ def initialize(config:, dapp:, should_be_built: false, ignore_signature_auto_calculation: false)
17
24
  @config = config
18
25
  @dapp = dapp
19
26
 
20
- @ignore_git_fetch = ignore_git_fetch
21
- @should_be_built = should_be_built
27
+ @ignore_signature_auto_calculation = ignore_signature_auto_calculation
28
+
29
+ @dapp._terminate_dimg_on_terminate(self)
30
+
31
+ enable_should_be_built if should_be_built
32
+ should_be_built!
33
+ end
34
+
35
+ def enable_should_be_built
36
+ @should_be_built = true
37
+ end
22
38
 
39
+ def should_be_built!
23
40
  raise Error::Dimg, code: :dimg_not_built if should_be_built?
24
41
  end
25
42
 
43
+ def name
44
+ config._name
45
+ end
46
+
47
+ def terminate
48
+ cleanup_tmp
49
+ end
50
+
26
51
  def build!
27
- with_introspection do
28
- dapp.lock("#{dapp.name}.images", readonly: true) do
29
- last_stage.build_lock! do
30
- begin
31
- builder.before_build_check
32
- last_stage.build!
33
- ensure
34
- after_stages_build!
35
- end
52
+ dapp.lock("#{dapp.name}.images", readonly: true) do
53
+ last_stage.build_lock! do
54
+ begin
55
+ builder.before_build_check
56
+ last_stage.build!
57
+ ensure
58
+ after_stages_build!
36
59
  end
37
60
  end
38
61
  end
39
- ensure
40
- cleanup_tmp
41
62
  end
42
63
 
43
64
  def after_stages_build!
44
- return unless last_stage.image.built? || dev_mode?
65
+ return unless last_stage.image.built? || dev_mode? || force_save_cache?
45
66
  last_stage.save_in_cache!
46
67
  artifacts.each { |artifact| artifact.last_stage.save_in_cache! }
47
68
  end
48
69
 
49
- def tag!(tag)
70
+ def tag!(repo, format:)
71
+ dimg_export_base!(repo, export_format: format)
72
+ end
73
+
74
+ def export!(repo, format:)
75
+ dimg_export_base!(repo, export_format: format, push: true)
76
+ end
77
+
78
+ def export_stages!(repo, format:)
50
79
  dapp.lock("#{dapp.name}.images", readonly: true) do
51
- dimg_name = config._name
52
- if dapp.dry_run?
53
- dapp.log_state(dimg_name, state: dapp.t(code: 'state.tag'), styles: { status: :success })
54
- else
55
- dapp.log_process(dimg_name, process: dapp.t(code: 'status.process.tagging')) do
56
- last_stage.image.tag!(tag)
80
+ export_images.each do |stage_image|
81
+ signature = stage_image.name.split(':').last
82
+ image_name = format(format, repo: repo, signature: signature)
83
+
84
+ if dimgstage_should_not_be_pushed?(format(dapp.dimgstage_push_tag_format, signature: signature))
85
+ dapp.log_state(image_name, state: dapp.t(code: 'state.exist'))
86
+ next
87
+ end
88
+
89
+ export_base!(image_name, push: true) do
90
+ stage_image.export!(image_name)
57
91
  end
58
92
  end
93
+ artifacts.each { |artifact| artifact.export_stages!(repo, format: format) }
59
94
  end
60
95
  end
61
96
 
62
- def export!(repo, format:)
97
+ def dimg_export_base!(repo, export_format:, push: false)
63
98
  dapp.lock("#{dapp.name}.images", readonly: true) do
64
- tags.each do |tag|
65
- image_name = format(format, repo: repo, dimg_name: config._name, tag: tag)
66
- export_base!(last_stage.image, image_name)
99
+ dapp.tags_by_scheme.each do |tag_scheme_name, tags|
100
+ dapp.log_step_with_indent(tag_scheme_name) do
101
+ tags.each do |tag|
102
+ image_name = format(export_format, repo: repo, dimg_name: name, tag: tag)
103
+
104
+ if push && tag_should_not_be_pushed?(tag.to_s)
105
+ dapp.log_state(image_name, state: dapp.t(code: 'state.exist'))
106
+ next
107
+ end
108
+
109
+ export_base!(image_name, push: push) do
110
+ export_image = build_export_image!(image_name, scheme_name: tag_scheme_name)
111
+ if push
112
+ export_image.export!
113
+ else
114
+ export_image.tag!
115
+ end
116
+ end
117
+ end
118
+ end unless tags.empty?
67
119
  end
68
120
  end
69
121
  end
70
122
 
71
- def export_stages!(repo, format:)
72
- dapp.lock("#{dapp.name}.images", readonly: true) do
73
- export_images.each do |image|
74
- image_name = format(format, repo: repo, signature: image.name.split(':').last)
75
- export_base!(image, image_name)
123
+ def dimgstage_should_not_be_pushed?(signature)
124
+ registry_dimgstages_tags.include?(signature)
125
+ end
126
+
127
+ def tag_should_not_be_pushed?(tag)
128
+ registry_tags.include?(tag) && begin
129
+ registry_tag_parent = registry.image_parent_id(tag, name)
130
+ registry_tag_parent == last_stage.image.built_id
131
+ end
132
+ end
133
+
134
+ def registry_tags
135
+ @registry_tags ||= begin
136
+ if name.nil?
137
+ registry.nameless_dimg_tags
138
+ else
139
+ registry.dimg_tags(name)
76
140
  end
77
141
  end
78
142
  end
79
143
 
80
- def export_base!(image, image_name)
144
+ def registry_dimgstages_tags
145
+ @registry_dimgstages_tags ||= registry.dimgstages_tags
146
+ end
147
+
148
+ def registry
149
+ @registry ||= dapp.dimg_registry
150
+ end
151
+
152
+ def build_export_image!(image_name, scheme_name:)
153
+ Image::Dimg.image_by_name(name: image_name, from: last_stage.image, dapp: dapp).tap do |export_image|
154
+ export_image.add_service_change_label(:'dapp-tag-scheme' => scheme_name)
155
+ export_image.add_service_change_label(:'dapp-dimg' => true)
156
+ export_image.build!
157
+ end
158
+ end
159
+
160
+ def export_base!(image_name, push: true)
81
161
  if dapp.dry_run?
82
- dapp.log_state(image_name, state: dapp.t(code: 'state.push'), styles: { status: :success })
162
+ dapp.log_state(image_name, state: dapp.t(code: push ? 'state.push' : 'state.export'), styles: { status: :success })
83
163
  else
84
164
  dapp.lock("image.#{hashsum image_name}") do
85
- ::Dapp::Dimg::Image::Stage.cache_reset(image_name)
86
- dapp.log_process(image_name, process: dapp.t(code: 'status.process.pushing')) do
87
- dapp.with_log_indent do
88
- image.export!(image_name)
89
- end
90
- end
165
+ dapp.log_process(image_name, process: dapp.t(code: push ? 'status.process.pushing' : 'status.process.exporting')) { yield }
91
166
  end
92
167
  end
93
168
  end
@@ -95,14 +170,23 @@ module Dapp
95
170
  def import_stages!(repo, format:)
96
171
  dapp.lock("#{dapp.name}.images", readonly: true) do
97
172
  import_images.each do |image|
173
+ signature = image.name.split(':').last
174
+ image_name = format(format, repo: repo, signature:signature )
175
+
176
+ unless dimgstage_should_not_be_pushed?(format(dapp.dimgstage_push_tag_format, signature: signature))
177
+ dapp.log_state(image_name, state: dapp.t(code: 'state.not_exist'))
178
+ next
179
+ end
180
+
98
181
  begin
99
- image_name = format(format, repo: repo, signature: image.name.split(':').last)
100
182
  import_base!(image, image_name)
101
- rescue ::Dapp::Error::Shellout
183
+ rescue ::Dapp::Error::Shellout => e
184
+ dapp.log_info ::Dapp::Helper::NetStatus.message(e)
102
185
  next
103
186
  end
104
- break unless dapp.pull_all_stages?
187
+ break unless !!dapp.options[:pull_all_stages]
105
188
  end
189
+ artifacts.each { |artifact| artifact.import_stages!(repo, format: format) }
106
190
  end
107
191
  end
108
192
 
@@ -111,9 +195,10 @@ module Dapp
111
195
  dapp.log_state(image_name, state: dapp.t(code: 'state.pull'), styles: { status: :success })
112
196
  else
113
197
  dapp.lock("image.#{hashsum image_name}") do
114
- dapp.log_process(image_name, process: dapp.t(code: 'status.process.pulling'),
115
- status: { failed: dapp.t(code: 'status.failed.not_pulled') },
116
- style: { failed: :secondary }) do
198
+ dapp.log_process(image_name,
199
+ process: dapp.t(code: 'status.process.pulling'),
200
+ status: { failed: dapp.t(code: 'status.failed.not_pulled') },
201
+ style: { failed: :secondary }) do
117
202
  image.import!(image_name)
118
203
  end
119
204
  end
@@ -121,16 +206,23 @@ module Dapp
121
206
  end
122
207
 
123
208
  def run(docker_options, command)
124
- cmd = "docker run #{[docker_options, last_stage.image.built_id, command].flatten.compact.join(' ')}"
209
+ run_stage(nil, docker_options, command)
210
+ end
211
+
212
+ def run_stage(stage_name, docker_options, command)
213
+ stage_image = (stage_name.nil? ? last_stage : stage_by_name(stage_name)).image
214
+ raise Error::Dimg, code: :dimg_stage_not_built, data: { stage_name: stage_name } unless stage_image.built?
215
+
216
+ args = [docker_options, stage_image.built_id, command].flatten.compact
125
217
  if dapp.dry_run?
126
- dapp.log(cmd)
218
+ dapp.log("docker run #{args.join(' ')}")
127
219
  else
128
- system(cmd) || raise(Error::Dimg, code: :dimg_not_run)
220
+ Image::Stage.ruby2go_command(dapp, command: :container_run, options: { args: args })
129
221
  end
130
222
  end
131
223
 
132
224
  def stage_image_name(stage_name)
133
- stages.find { |stage| stage.send(:name) == stage_name }.image.name
225
+ stages.find { |stage| stage.name == stage_name }.image.name
134
226
  end
135
227
 
136
228
  def builder
@@ -146,29 +238,48 @@ module Dapp
146
238
  end
147
239
 
148
240
  def scratch?
149
- config._docker._from.nil?
241
+ config._docker._from.nil? && config._from_dimg.nil? && config._from_dimg_artifact.nil?
150
242
  end
151
243
 
152
244
  def dev_mode?
153
- config._dev_mode || dapp.dev_mode?
245
+ dapp.dev_mode?
246
+ end
247
+
248
+ def force_save_cache?
249
+ if ENV.key? "DAPP_FORCE_SAVE_CACHE"
250
+ %w(yes 1 true).include? ENV["DAPP_FORCE_SAVE_CACHE"].to_s
251
+ else
252
+ !!dapp.options[:force_save_cache]
253
+ end
154
254
  end
155
255
 
156
256
  def build_cache_version
157
257
  [::Dapp::BUILD_CACHE_VERSION, dev_mode? ? 1 : 0]
158
258
  end
159
259
 
160
- def introspect_image!(image:, options:)
161
- cmd = "docker run -ti --rm --entrypoint #{dapp.bash_bin} #{options} #{image}"
162
- system(cmd)
260
+ def cleanup_tmp
261
+ return unless tmp_dir_exists?
262
+
263
+ # В tmp-директории могли остаться файлы, владельцами которых мы не являемся.
264
+ # Такие файлы могут попасть туда при экспорте файлов артефакта.
265
+ # Чтобы от них избавиться — запускаем docker-контейнер под root-пользователем
266
+ # и удаляем примонтированную tmp-директорию.
267
+ args = [
268
+ "--rm",
269
+ "--volume=#{dapp.tmp_base_dir}:#{dapp.tmp_base_dir}",
270
+ "--label=dapp=#{dapp.name}",
271
+ "alpine:3.6",
272
+ "rm", "-rf", tmp_path
273
+ ]
274
+ Image::Stage.ruby2go_command(dapp, command: :container_run, options: { args: args })
163
275
  end
164
276
 
165
- def cleanup_tmp
166
- FileUtils.rm_rf(tmp_path)
167
- artifacts.each(&:cleanup_tmp)
277
+ def stage_should_be_introspected_before_build?(name)
278
+ dapp.options[:introspect_before] == name
168
279
  end
169
280
 
170
- def stage_should_be_introspected?(name)
171
- dapp.cli_options[:introspect_stage] == name
281
+ def stage_should_be_introspected_after_build?(name)
282
+ dapp.options[:introspect_stage] == name
172
283
  end
173
284
 
174
285
  protected
@@ -179,14 +290,6 @@ module Dapp
179
290
  !last_stage.image.tagged?
180
291
  end
181
292
  end
182
-
183
- def with_introspection
184
- yield
185
- rescue Exception::IntrospectImage => e
186
- data = e.net_status[:data]
187
- introspect_image!(image: data[:built_id], options: data[:options])
188
- raise data[:error]
189
- end
190
293
  end # Dimg
191
294
  end # Dimg
192
295
  end # Dapp