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,46 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ module DimgGroupBase
6
+ def dimg(name = nil, &blk)
7
+ Dimg.new(name, dapp: dapp).tap do |dimg|
8
+ before_dimg_eval(dimg)
9
+ dimg.instance_eval(&blk) if block_given?
10
+ @_dimg << dimg
11
+ end
12
+ end
13
+
14
+ def dimg_group(&blk)
15
+ DimgGroup.new(dapp: dapp).tap do |dimg_group|
16
+ before_dimg_group_eval(dimg_group)
17
+ dimg_group.instance_eval(&blk) if block_given?
18
+ @_dimg_group << dimg_group
19
+ end
20
+ end
21
+
22
+ def _dimg
23
+ (@_dimg + _dimg_group.map(&:_dimg)).flatten
24
+ end
25
+
26
+ def _dimg_group
27
+ @_dimg_group||[]
28
+ end
29
+
30
+ protected
31
+
32
+ def before_dimg_eval(dimg)
33
+ end
34
+
35
+ def before_dimg_group_eval(dimg_group)
36
+ end
37
+
38
+ def dimg_group_init_variables!
39
+ @_dimg = []
40
+ @_dimg_group = []
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -4,6 +4,11 @@ module Dapp
4
4
  module Directive
5
5
  module Docker
6
6
  class Artifact < Base
7
+ def method_missing(m, *args)
8
+ raise ::Dapp::Error::Config, code: :docker_artifact_unsupported_directive if Dimg.instance_methods.include?(m)
9
+ super
10
+ end
11
+
7
12
  def _change_options
8
13
  {}
9
14
  end
@@ -9,9 +9,8 @@ module Dapp
9
9
  def from(image, cache_version: nil)
10
10
  sub_directive_eval do
11
11
  image = image.to_s
12
- raise(Error::Config, code: :docker_from_incorrect, data: { name: image }) unless ::Dapp::Dimg::Image::Docker.image_name?(image)
13
- raise(Error::Config, code: :docker_from_without_tag, data: { name: image }) unless image.include?(':')
14
- @_from = image
12
+ raise(::Dapp::Error::Config, code: :docker_from_incorrect, data: { name: image }) unless ::Dapp::Dimg::Image::Stage.image_name?(image)
13
+ @_from = image.include?(':') ? image : [image, 'latest'].join(':')
15
14
  @_from_cache_version = cache_version
16
15
  end
17
16
  end
@@ -18,11 +18,11 @@ module Dapp
18
18
  end
19
19
 
20
20
  def volume(*args)
21
- sub_directive_eval { @_volume.concat(args) }
21
+ sub_directive_eval { @_volume.concat(args.flatten) }
22
22
  end
23
23
 
24
24
  def expose(*args)
25
- sub_directive_eval { @_expose.concat(args) }
25
+ sub_directive_eval { @_expose.concat(args.flatten) }
26
26
  end
27
27
 
28
28
  def env(**options)
@@ -34,11 +34,11 @@ module Dapp
34
34
  end
35
35
 
36
36
  def cmd(*args)
37
- sub_directive_eval { @_cmd.concat(args) }
37
+ sub_directive_eval { @_cmd.concat(args.flatten) }
38
38
  end
39
39
 
40
40
  def onbuild(*args)
41
- sub_directive_eval { @_onbuild.concat(args) }
41
+ sub_directive_eval { @_onbuild.concat(args.flatten) }
42
42
  end
43
43
 
44
44
  def workdir(path)
@@ -3,20 +3,39 @@ module Dapp
3
3
  module Config
4
4
  module Directive
5
5
  class GitArtifactLocal < ArtifactBase
6
+ attr_reader :_as
7
+
8
+ def as(value)
9
+ @_as = value
10
+ end
11
+
12
+ def export(absolute_dir_path = '/', &blk)
13
+ super
14
+ end
6
15
  alias add export
7
16
  undef_method :export
8
17
 
18
+ def _export
19
+ super do |export|
20
+ export._as = @_as
21
+
22
+ yield(export) if block_given?
23
+ end
24
+ end
25
+
9
26
  class Export < ArtifactBase::Export
27
+ attr_accessor :_as
28
+
10
29
  def stage_dependencies(&blk)
11
30
  @stage_dependencies ||= StageDependencies.new(&blk)
12
31
  end
13
32
 
14
33
  def validate!
15
- raise Error::Config, code: :add_to_required if _to.nil?
34
+ raise ::Dapp::Error::Config, code: :add_to_required if _to.nil?
16
35
  end
17
36
 
18
37
  def _artifact_options
19
- super.merge(stages_dependencies: stage_dependencies.to_h)
38
+ super.merge(stages_dependencies: stage_dependencies.to_h, as: _as)
20
39
  end
21
40
 
22
41
  class StageDependencies < Directive::Base
@@ -25,10 +44,10 @@ module Dapp
25
44
  STAGES.each do |stage|
26
45
  define_method(stage) do |*glob|
27
46
  sub_directive_eval do
28
- if (globs = glob.map { |g| path_format(g) }).any? { |g| Pathname(g).absolute? }
29
- raise Error::Config, code: :stages_dependencies_paths_relative_path_required, data: { stage: stage }
47
+ if (globs = glob.flatten.map { |g| path_format(g) }).any? { |g| Pathname(g).absolute? }
48
+ raise ::Dapp::Error::Config, code: :stages_dependencies_paths_relative_path_required, data: { stage: stage }
30
49
  end
31
- instance_variable_set(:"@#{stage}", globs)
50
+ instance_variable_set(:"@#{stage}", public_send("_#{stage}") + globs)
32
51
  end
33
52
  end
34
53
 
@@ -3,24 +3,27 @@ module Dapp
3
3
  module Config
4
4
  module Directive
5
5
  class GitArtifactRemote < GitArtifactLocal
6
- attr_reader :_url, :_name, :_branch, :_commit
6
+ include ::Dapp::Helper::Url
7
7
 
8
- def initialize(url, **kwargs, &blk)
9
- raise Error::Config, code: :git_artifact_remote_unsupported_protocol,
10
- data: { url: url } unless %w(http https).include? URI(url.to_s).scheme
8
+ attr_reader :_url, :_name, :_branch, :_tag, :_commit
11
9
 
10
+ def initialize(url, **kwargs, &blk)
12
11
  @_url = url
13
- @_name = url.gsub(%r{.*?([^\/ ]+)\.git}, '\\1')
12
+ @_name = git_url_to_name(url)
14
13
 
15
14
  super(**kwargs, &blk)
16
15
  end
17
16
 
18
17
  def branch(value)
19
- sub_directive_eval { @_branch = value }
18
+ sub_directive_eval { @_branch = value.to_s }
19
+ end
20
+
21
+ def tag(value)
22
+ sub_directive_eval { @_tag = value.to_s }
20
23
  end
21
24
 
22
25
  def commit(value)
23
- sub_directive_eval { @_commit = value }
26
+ sub_directive_eval { @_commit = value.to_s }
24
27
  end
25
28
 
26
29
  def _export
@@ -28,28 +31,36 @@ module Dapp
28
31
  export._url = @_url
29
32
  export._name = @_name
30
33
  export._branch ||= @_branch
34
+ export._tag ||= @_tag
31
35
  export._commit ||= @_commit
36
+
37
+ yield(export) if block_given?
32
38
  end
33
39
  end
34
40
 
35
41
  class Export < GitArtifactLocal::Export
36
- attr_accessor :_url, :_name, :_branch, :_commit
42
+ attr_accessor :_url, :_name, :_branch, :_tag, :_commit
37
43
 
38
44
  def _artifact_options
39
- super.merge(name: _name, branch: _branch, commit: _commit)
45
+ super.merge(name: _name, branch: _branch, tag: _tag, commit: _commit)
40
46
  end
41
47
 
42
48
  def branch(value)
43
- sub_directive_eval { @_branch = value }
49
+ sub_directive_eval { @_branch = value.to_s }
50
+ end
51
+
52
+ def tag(value)
53
+ sub_directive_eval { @_tag = value.to_s }
44
54
  end
45
55
 
46
56
  def commit(value)
47
- sub_directive_eval { @_commit = value }
57
+ sub_directive_eval { @_commit = value.to_s }
48
58
  end
49
59
 
50
60
  def validate!
51
61
  super
52
- raise Error::Config, code: :git_artifact_remote_branch_with_commit if !_branch.nil? && !_commit.nil?
62
+ refs = [_branch, _tag, _commit].compact
63
+ raise ::Dapp::Error::Config, code: :git_artifact_remote_with_refs if refs.length > 1
53
64
  end
54
65
  end
55
66
  end
@@ -4,10 +4,11 @@ module Dapp
4
4
  module Directive
5
5
  class Mount < Base
6
6
  attr_reader :_to
7
+ attr_reader :_from
7
8
  attr_reader :_type
8
9
 
9
10
  def initialize(to, **kwargs, &blk)
10
- raise Error::Config, code: :mount_to_absolute_path_required unless Pathname((to = to.to_s)).absolute?
11
+ raise ::Dapp::Error::Config, code: :mount_to_absolute_path_required unless Pathname((to = to.to_s)).absolute?
11
12
  @_to = path_format(to)
12
13
 
13
14
  super(**kwargs, &blk)
@@ -16,13 +17,20 @@ module Dapp
16
17
  def from(type)
17
18
  sub_directive_eval do
18
19
  type = type.to_sym
19
- raise Error::Config, code: :mount_from_type_required unless [:tmp_dir, :build_dir].include? type
20
+ raise ::Dapp::Error::Config, code: :mount_from_type_required unless [:tmp_dir, :build_dir].include? type
20
21
  @_type = type
21
22
  end
22
23
  end
23
24
 
25
+ def from_path(path)
26
+ sub_directive_eval do
27
+ @_from = path_format(path)
28
+ @_type = :custom_dir
29
+ end
30
+ end
31
+
24
32
  def validate!
25
- raise Error::Config, code: :mount_from_required if _type.nil?
33
+ raise ::Dapp::Error::Config, code: :mount_from_or_from_path_required if _type.nil?
26
34
  end
27
35
  end
28
36
  end
@@ -25,7 +25,7 @@ module Dapp
25
25
 
26
26
  define_method "_#{stage}_version" do
27
27
  return [] if (variable = instance_variable_get("@_#{stage}")).nil?
28
- variable._version || _version
28
+ variable._version
29
29
  end
30
30
  end
31
31
  [:before_install, :before_setup, :install, :setup].each(&method(:stage_command_generator))
@@ -48,7 +48,7 @@ module Dapp
48
48
  end
49
49
 
50
50
  def run(*args)
51
- sub_directive_eval { @_run.concat(args) }
51
+ sub_directive_eval { @_run.concat(args.flatten) }
52
52
  end
53
53
 
54
54
  def version(value)
@@ -1,13 +1,11 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Bp
6
- def bp(repo)
6
+ def bp
7
7
  bp_step(:build)
8
- bp_step(:push, repo)
9
- bp_step(:stages_cleanup_by_repo, repo)
10
- bp_step(:cleanup)
8
+ bp_step(:push)
11
9
  end
12
10
 
13
11
  def bp_step(step, *args)
@@ -1,18 +1,16 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Build
6
6
  def build
7
- setup_ssh_agent
8
-
9
7
  build_configs.each do |config|
10
8
  log_dimg_name_with_indent(config) do
11
- Dimg.new(config: config, dapp: self).build!
9
+ dimg(config: config).build!
12
10
  end
13
11
  end
14
- rescue ::Dapp::Error::Shellout, Error::Base
15
- build_context_export unless cli_options[:build_context_directory].nil?
12
+ rescue ::Dapp::Error::Shellout, Error::Default
13
+ build_context_export unless options[:build_context_directory].nil?
16
14
  raise
17
15
  end
18
16
  end
@@ -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 BuildContext
6
6
  module Common
@@ -17,7 +17,7 @@ module Dapp
17
17
  end
18
18
 
19
19
  def build_context_directory
20
- File.expand_path(cli_options[:build_context_directory].to_s)
20
+ File.expand_path(options[:build_context_directory].to_s)
21
21
  end
22
22
  end
23
23
  end
@@ -1,40 +1,40 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module BuildContext
6
6
  module Export
7
7
  def build_context_export
8
8
  log_process(:'export context') do
9
- with_log_indent do
10
- export_build_context_image_tar
11
- export_build_context_build_tar
12
- end
9
+ export_build_context_image_tar
10
+ export_build_context_build_tar
13
11
  end
14
12
  end
15
13
 
16
14
  def export_build_context_image_tar
17
15
  lock("#{name}.images", readonly: true) do
18
16
  context_images_names = build_configs.map do |config|
19
- Dimg.new(config: config, dapp: self).tagged_images.map(&:name)
17
+ dimg(config: config).all_tagged_images.map(&:name)
20
18
  end.flatten
21
19
 
22
20
  log_secondary_process(:images, short: true) do
23
- Image::Docker.save!(context_images_names, build_context_images_tar)
21
+ Image::Stage.save!(self, context_images_names, build_context_images_tar, verbose: true, quiet: log_quiet?) unless dry_run?
24
22
  end unless context_images_names.empty?
25
23
  end
26
24
  end
27
25
 
28
26
  def export_build_context_build_tar
29
27
  log_secondary_process(:build_dir, short: true) do
30
- File.open(build_context_build_tar, File::RDWR | File::CREAT) do |f|
31
- Gem::Package::TarWriter.new(f) do |tar|
28
+ if !!options[:use_system_tar]
29
+ shellout!("tar -C #{build_path} -cf #{build_context_build_tar} .")
30
+ else
31
+ tar_write(build_context_build_tar) do |tar|
32
32
  Dir.glob(File.join(build_path, '**/*'), File::FNM_DOTMATCH).each do |path|
33
33
  archive_file_path = path
34
- .reverse
35
- .chomp(build_path.to_s.reverse)
36
- .chomp('/')
37
- .reverse
34
+ .reverse
35
+ .chomp(build_path.to_s.reverse)
36
+ .chomp('/')
37
+ .reverse
38
38
  if File.directory?(path)
39
39
  tar.mkdir archive_file_path, File.stat(path).mode
40
40
  else
@@ -44,7 +44,7 @@ module Dapp
44
44
  end
45
45
  end
46
46
  end
47
- end
47
+ end unless dry_run?
48
48
  end
49
49
  end
50
50
  end
@@ -1,27 +1,25 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module BuildContext
6
6
  module Import
7
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?
8
+ raise ::Dapp::Error::Command, code: :context_directory_not_found,
9
+ data: { path: build_context_path } unless build_context_path.exist?
10
10
 
11
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
12
+ import_build_context_build_tar
13
+ import_build_context_image_tar
16
14
  end
17
15
  end
18
16
 
19
17
  def import_build_context_image_tar
20
18
  if build_context_images_tar.exist?
21
- log_secondary_process(:images, short: true) do
19
+ log_secondary_process(:images) do
22
20
  lock("#{name}.images") do
23
- Image::Docker.load!(build_context_images_tar)
24
- end
21
+ Image::Stage.load!(self, build_context_images_tar, verbose: true, quiet: log_quiet?)
22
+ end unless dry_run?
25
23
  end
26
24
  else
27
25
  log_warning(desc: { code: :context_archive_not_found, data: { path: build_context_images_tar } })
@@ -31,19 +29,26 @@ module Dapp
31
29
  def import_build_context_build_tar
32
30
  if build_context_build_tar.exist?
33
31
  log_secondary_process(:build_dir, short: true) do
34
- store_current_build_dir
32
+ unless dry_run?
33
+ store_current_build_dir
35
34
 
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)
35
+ if !!options[:use_system_tar]
36
+ FileUtils.mkpath build_path
37
+ shellout!("tar -xf #{build_context_build_tar} -C #{build_path}")
38
+ else
39
+ tar_read(build_context_build_tar) do |tar|
40
+ tar.each_entry do |entry|
41
+ header = entry.header
42
+ path = File.join(build_path, entry.full_name)
40
43
 
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)
44
+ if entry.directory?
45
+ FileUtils.mkpath path, :mode => entry.header.mode
46
+ else
47
+ FileUtils.mkpath File.dirname(path)
48
+ File.write(path, entry.read)
49
+ File.chmod(header.mode, path)
50
+ end
51
+ end
47
52
  end
48
53
  end
49
54
  end
@@ -55,8 +60,8 @@ module Dapp
55
60
 
56
61
  def store_current_build_dir
57
62
  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")
63
+ raise ::Dapp::Error::Command, code: :stored_build_dir_already_exist,
64
+ data: { path: "#{build_path}.old" } if File.exist?("#{build_path}.old")
60
65
  FileUtils.mv(build_path, "#{build_path}.old")
61
66
  end
62
67
 
@@ -1,19 +1,12 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Cleanup
6
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
7
+ log_step_with_indent(:cleanup) do
8
+ dapp_containers_flush_by_label('dapp')
9
+ dapp_dangling_images_flush_by_label('dapp')
17
10
  end
18
11
  end
19
12
  end
@@ -0,0 +1,143 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Dapp
4
+ module Command
5
+ module CleanupRepo
6
+ def cleanup_repo
7
+ git_repo_option = git_own_repo_exist? ? JSON.dump(git_own_repo.get_ruby2go_state_hash) : nil
8
+ ruby2go_cleanup_command(:gc, ruby2go_cleanup_gc_options_dump, local_repo: git_repo_option)
9
+ end
10
+
11
+ def ruby2go_cleanup_gc_options_dump
12
+ ruby2go_cleanup_common_repo_options.merge(
13
+ mode: {
14
+ with_stages: with_stages?
15
+ },
16
+ deployed_docker_images: deployed_docker_images
17
+ ).tap do |data|
18
+ break JSON.dump(data)
19
+ end
20
+ end
21
+
22
+ def deployed_docker_images
23
+ @deployed_docker_images ||= search_deployed_docker_images
24
+ end
25
+
26
+ def search_deployed_docker_images
27
+ return [] if without_kube?
28
+
29
+ config = ::Dapp::Kube::Kubernetes::Config.new_auto_if_available
30
+ return [] if config.nil?
31
+
32
+ config.context_names.
33
+ map {|context_name|
34
+ client = ::Dapp::Kube::Kubernetes::Client.new(
35
+ config,
36
+ context_name,
37
+ "default",
38
+ timeout: options[:kubernetes_timeout],
39
+ )
40
+ search_deployed_docker_images_from_kube(client)
41
+ }.flatten.sort.uniq
42
+ end
43
+
44
+ def search_deployed_docker_images_from_kube(client)
45
+ namespaces = []
46
+ # check connectivity for 2 seconds
47
+ begin
48
+ namespaces = client.namespace_list(excon_parameters: {:connect_timeout => 30})
49
+ rescue Excon::Error::Timeout
50
+ raise ::Dapp::Error::Default, code: :kube_connect_timeout
51
+ end
52
+
53
+ # get images from containers from pods from all namespaces.
54
+ namespaces['items'].map do |item|
55
+ item['metadata']['name']
56
+ end.map do |ns|
57
+ [].tap do |arr|
58
+ client.with_namespace(ns) do
59
+ arr << pod_images(client)
60
+ arr << deployment_images(client)
61
+ arr << replicaset_images(client)
62
+ arr << statefulset_images(client)
63
+ arr << daemonset_images(client)
64
+ arr << job_images(client)
65
+ arr << cronjob_images(client)
66
+ arr << replicationcontroller_images(client)
67
+ end
68
+ end
69
+ end.flatten.select do |img|
70
+ img.start_with? option_repo
71
+ end.sort.uniq
72
+ end
73
+
74
+ # pod items[] spec containers[] image
75
+ def pod_images(client)
76
+ client.pod_list['items'].map do |item|
77
+ images_from_pod_spec(item)
78
+ end
79
+ end
80
+
81
+ # cronjob items[] spec jobTemplate spec template spec containers[] image
82
+ def cronjob_images(client)
83
+ client.cronjob_list['items'].map do |item|
84
+ images_from_pod_spec(item['spec']['jobTemplate']['spec']['template'])
85
+ end
86
+ end
87
+
88
+ # daemonsets items[] spec template spec containers[] image
89
+ def daemonset_images(client)
90
+ client.daemonset_list['items'].map do |item|
91
+ images_from_pod_spec(item['spec']['template'])
92
+ end
93
+ end
94
+
95
+ # deployment items[] spec template spec containers[] image
96
+ def deployment_images(client)
97
+ client.deployment_list['items'].map do |item|
98
+ images_from_pod_spec(item['spec']['template'])
99
+ end
100
+ end
101
+
102
+ # job items[] spec template spec containers[] image
103
+ def job_images(client)
104
+ client.job_list['items'].map do |item|
105
+ images_from_pod_spec(item['spec']['template'])
106
+ end
107
+ end
108
+
109
+ # replicasets items[] spec template spec containers[] image
110
+ def replicaset_images(client)
111
+ client.replicaset_list['items'].map do |item|
112
+ images_from_pod_spec(item['spec']['template'])
113
+ end
114
+ end
115
+
116
+ # replicasets items[] spec template spec containers[] image
117
+ def statefulset_images(client)
118
+ client.statefulset_list['items'].map do |item|
119
+ images_from_pod_spec(item['spec']['template'])
120
+ end
121
+ end
122
+
123
+ # replicationcontroller items[] spec template spec containers[] image
124
+ def replicationcontroller_images(client)
125
+ client.replicationcontroller_list['items'].map do |item|
126
+ images_from_pod_spec(item['spec']['template'])
127
+ end
128
+ end
129
+
130
+ def images_from_pod_spec(pod_spec)
131
+ containers = Array(pod_spec['spec']['containers'])
132
+ initContainers = Array(pod_spec['spec']['initContainers'])
133
+ (containers + initContainers).map { |cont| cont['image'] }
134
+ end
135
+
136
+ def without_kube?
137
+ !!options[:without_kube]
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end # Dimg
143
+ end # Dapp