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
@@ -2,38 +2,69 @@ module Dapp
2
2
  module Dimg
3
3
  module GitRepo
4
4
  class Remote < Base
5
- def initialize(dimg, name, url:)
6
- super(dimg, name)
5
+ CACHE_VERSION = 4
6
+
7
+ attr_reader :url
8
+
9
+ class << self
10
+ def get_or_create(dapp, name, url:)
11
+ repositories[url] ||= new(dapp, name, url: url).tap(&:clone_and_fetch)
12
+ end
13
+
14
+ def repositories
15
+ @repositories ||= {}
16
+ end
17
+ end
18
+
19
+ def initialize(dapp, name, url:)
20
+ super(dapp, name)
7
21
 
8
22
  @url = url
23
+ end
9
24
 
10
- dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.git_artifact_clone', data: { name: name }), short: true) do
11
- begin
12
- Rugged::Repository.clone_at(url, path, bare: true)
13
- rescue Rugged::NetworkError, Rugged::SslError => e
14
- raise Error::Rugged, code: :rugged_remote_error, data: { message: e.message, url: url }
15
- end
16
- end unless File.directory?(path)
25
+ def url
26
+ @url ||= remote_origin_url
17
27
  end
18
28
 
19
- def path
20
- dimg.build_path("#{name}.git").to_s
29
+ def ruby2go_method(method, args_hash={})
30
+ res = dapp.ruby2go_git_repo(args_hash.merge("RemoteGitRepo" => JSON.dump(get_ruby2go_state_hash), "method" => method))
31
+
32
+ raise res["error"] if res["error"]
33
+
34
+ self.set_ruby2go_state_hash(JSON.load(res["data"]["RemoteGitRepo"]))
35
+
36
+ res["data"]["result"]
37
+ end
38
+
39
+ def get_ruby2go_state_hash
40
+ super.tap {|res|
41
+ res["Url"] = @url.to_s
42
+ res["ClonePath"] = dapp.build_path("remote_git_repo", CACHE_VERSION.to_s, dapp.consistent_uniq_slugify(name), url_protocol(url)).to_s # FIXME
43
+ res["IsDryRun"] = dapp.dry_run?
44
+ }
21
45
  end
22
46
 
23
- def fetch!(branch = nil)
24
- branch ||= self.branch
25
- dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.git_artifact_fetch', data: { name: name }), short: true) do
26
- git.fetch('origin', [branch])
27
- raise Error::Rugged, code: :branch_not_exist_in_remote_git_repository, data: { branch: branch, url: url } unless branch_exist?(branch)
28
- end unless dimg.ignore_git_fetch || dimg.dapp.dry_run?
47
+ def set_ruby2go_state_hash(state)
48
+ super(state)
49
+ @url = state["Url"]
29
50
  end
30
51
 
31
- def branch_exist?(name)
32
- git.branches.exist?(branch_format(name))
52
+ def _rugged_credentials # TODO remove
53
+ @_rugged_credentials ||= begin
54
+ if url_protocol(url) == :ssh
55
+ host_with_user = url.split(':', 2).first
56
+ username = host_with_user.split('@', 2).reverse.last
57
+ Rugged::Credentials::SshKeyFromAgent.new(username: username)
58
+ end
59
+ end
33
60
  end
34
61
 
35
- def latest_commit(name)
36
- git.ref("refs/remotes/#{branch_format(name)}").target_id
62
+ def path
63
+ Pathname(dapp.build_path("remote_git_repo", CACHE_VERSION.to_s, dapp.consistent_uniq_slugify(name), url_protocol(url)).to_s)
64
+ end
65
+
66
+ def clone_and_fetch
67
+ return ruby2go_method("CloneAndFetch")
37
68
  end
38
69
 
39
70
  def lookup_commit(commit)
@@ -44,15 +75,23 @@ module Dapp
44
75
 
45
76
  protected
46
77
 
47
- attr_reader :url
48
-
49
- def git
50
- super(bare: true)
78
+ def git # TODO remove
79
+ super(bare: true, credentials: _rugged_credentials)
51
80
  end
52
81
 
53
82
  private
54
83
 
55
- def branch_format(name)
84
+ def url_protocol(url) # TODO remove
85
+ if (scheme = URI.parse(url).scheme).nil?
86
+ :noname
87
+ else
88
+ scheme.to_sym
89
+ end
90
+ rescue URI::InvalidURIError
91
+ :ssh
92
+ end
93
+
94
+ def branch_format(name) # TODO remove
56
95
  "origin/#{name.reverse.chomp('origin/'.reverse).reverse}"
57
96
  end
58
97
  end
@@ -11,11 +11,11 @@ module Dapp
11
11
  end
12
12
 
13
13
  def add_change_env(**options)
14
- add_change_option(:env, options)
14
+ (change_options[:env] ||= {}).merge!(options)
15
15
  end
16
16
 
17
17
  def add_change_label(**options)
18
- add_change_option(:label, options)
18
+ (change_options[:label] ||= {}).merge!(options)
19
19
  end
20
20
 
21
21
  def add_change_cmd(value)
@@ -31,19 +31,19 @@ module Dapp
31
31
  end
32
32
 
33
33
  def add_change_workdir(value)
34
- add_change_option(:workdir, value)
34
+ change_options[:workdir] = value
35
35
  end
36
36
 
37
37
  def add_change_user(value)
38
- add_change_option(:user, value)
38
+ change_options[:user] = value
39
39
  end
40
40
 
41
41
  def add_service_change_label(**options)
42
- add_service_change_option(:label, options)
42
+ (service_change_options[:label] ||= {}).merge!(options)
43
43
  end
44
44
 
45
- def add_env(var, value)
46
- add_option(:env, "#{var}=#{value}")
45
+ def add_env(**options)
46
+ (self.options[:env] ||= {}).merge!(options)
47
47
  end
48
48
 
49
49
  def add_volume(value)
@@ -65,8 +65,12 @@ module Dapp
65
65
  def prepare_instructions(options)
66
66
  options.map do |key, vals|
67
67
  case key
68
- when :cmd, :entrypoint then [vals]
69
- when :env, :label then vals.map(&method(:options_to_args)).flatten
68
+ when :workdir, :user
69
+ [vals]
70
+ when :cmd, :entrypoint
71
+ vals = [''] if vals == [] && ::Dapp::Dapp.host_docker_minor_version >= Gem::Version.new('17.10')
72
+ [vals]
73
+ when :env, :label then options_to_args(vals)
70
74
  else vals
71
75
  end.map { |val| %(#{key.to_s.upcase} #{val}) }
72
76
  end.flatten
@@ -75,7 +79,8 @@ module Dapp
75
79
  protected
76
80
 
77
81
  attr_reader :bash_commands, :service_bash_commands
78
- attr_reader :change_options, :service_change_options
82
+ attr_reader :change_options
83
+ attr_reader :service_change_options
79
84
  attr_reader :options
80
85
 
81
86
  def add_option(key, value)
@@ -94,49 +99,9 @@ module Dapp
94
99
  hash[key] = (hash[key].nil? ? [value] : (hash[key] << value)).flatten
95
100
  end
96
101
 
97
- def from_change_options
98
- return {} if from.nil?
99
- [:entrypoint, :cmd].each_with_object({}) do |option, options|
100
- options[option] = self.class.image_config_option(image_id: from.built_id, option: option)
101
- end
102
- end
103
-
104
102
  def options_to_args(options)
105
103
  options.map { |key, value| "#{key}=#{value}" }
106
104
  end
107
-
108
- def prepared_options
109
- all_options.map { |key, vals| Array(vals).map { |val| "--#{key}=#{val}" } }.flatten.join(' ')
110
- end
111
-
112
- def all_options
113
- service_options.merge(options)
114
- end
115
-
116
- def all_bash_commands
117
- Array(bash_commands) + Array(service_bash_commands)
118
- end
119
-
120
- def service_options
121
- { entrypoint: dapp.bash_bin, name: container_name }
122
- end
123
-
124
- def prepared_change
125
- prepare_instructions(all_change_options).map { |instruction| %(-c '#{instruction}') }.join(' ')
126
- end
127
-
128
- def all_change_options
129
- from_change_options.merge(change_options.merge(service_change_options) { |_, v1, v2| [v1, v2].flatten })
130
- end
131
-
132
- def prepared_bash_command
133
- dapp.shellout_pack prepared_commands.join(' && ')
134
- end
135
-
136
- def prepared_commands
137
- return [dapp.true_bin] if all_bash_commands.empty?
138
- all_bash_commands
139
- end
140
105
  end
141
106
  end # Image
142
107
  end # Dimg
@@ -0,0 +1,15 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Image
4
+ class Dimg < Stage
5
+ def export!(export_name = name)
6
+ super(export_name)
7
+ end
8
+
9
+ def tag!(tag_name = name)
10
+ super(tag_name)
11
+ end
12
+ end
13
+ end # Image
14
+ end # Dimg
15
+ end # Dapp
@@ -2,6 +2,8 @@ module Dapp
2
2
  module Dimg
3
3
  module Image
4
4
  class Scratch < Stage
5
+ include Helper::Tar
6
+
5
7
  def initialize(**_kwargs)
6
8
  super
7
9
  @from_archives = []
@@ -12,20 +14,44 @@ module Dapp
12
14
  end
13
15
 
14
16
  def build!(**_kwargs)
15
- raise
16
-
17
- # FIXME: system-shellout rejected
18
- # build_from_command = if from_archives.empty?
19
- # "#{dapp.tar_bin} c --files-from /dev/null"
20
- # else
21
- # "#{dapp.cat_bin} #{from_archives.join(' ')}"
22
- # end
23
- # @built_id = dapp.system_shellout!("#{build_from_command} | docker import #{prepared_change} - ").stdout.strip
17
+ @built_id = dapp.shellout!("docker import #{prepared_change} #{archive}").stdout.strip
18
+ ensure
19
+ FileUtils.rm_rf(tmp_path)
24
20
  end
25
21
 
26
22
  protected
27
23
 
28
24
  attr_accessor :from_archives
25
+
26
+ def archive
27
+ tmp_path('archive.tar').tap do |archive_path|
28
+ tar_write(archive_path) do |common_tar|
29
+ from_archives.each do |from_archive|
30
+ tar_gz_read(from_archive) do |tar|
31
+ tar.each_entry do |entry|
32
+ mode = entry.header.mode
33
+ path = entry.full_name
34
+
35
+ if entry.directory?
36
+ common_tar.mkdir path, mode
37
+ elsif entry.symlink?
38
+ common_tar.add_symlink path, entry.header.linkname, mode
39
+ else
40
+ common_tar.add_file path, mode do |tf|
41
+ tf.write entry.read
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ def tmp_path(*path)
52
+ @tmp_path ||= Dir.mktmpdir('dapp-scratch-', dapp.tmp_base_dir)
53
+ dapp.make_path(@tmp_path, *path).expand_path.tap { |p| p.parent.mkpath }
54
+ end
29
55
  end # Stage
30
56
  end # Image
31
57
  end # Dimg
@@ -1,11 +1,60 @@
1
1
  module Dapp
2
2
  module Dimg
3
3
  module Image
4
- class Stage < Docker
4
+ class Stage
5
5
  include Argument
6
6
 
7
+ attr_reader :from
8
+ attr_reader :name
9
+ attr_reader :dapp
10
+
11
+ class << self
12
+ def image_by_name(name:, **kwargs)
13
+ images[name] ||= new(name: name, **kwargs)
14
+ end
15
+
16
+ def image_reset(name)
17
+ images.delete(name)
18
+ end
19
+
20
+ def images
21
+ @images ||= {}
22
+ end
23
+
24
+ def image_name_format
25
+ "#{DockerRegistry.repo_name_format}(:(?<tag>#{tag_format}))?"
26
+ end
27
+
28
+ def tag_format
29
+ '(?![-.])[a-zA-Z0-9_.-]{1,127}'
30
+ end
31
+
32
+ def image_name?(name)
33
+ !(/^#{image_name_format}$/ =~ name).nil?
34
+ end
35
+
36
+ def tag?(name)
37
+ !(/^#{tag_format}$/ =~ name).nil?
38
+ end
39
+
40
+ def save!(dapp, image_or_images, file_path, verbose: false, quiet: false)
41
+ ruby2go_command(dapp, command: :save, options: { images: Array(image_or_images), file_path: file_path })
42
+ end
43
+
44
+ def load!(dapp, file_path, verbose: false, quiet: false)
45
+ ruby2go_command(dapp, command: :load, options: { file_path: file_path })
46
+ end
47
+
48
+ def ruby2go_command(dapp, command:, **options)
49
+ (options[:options] ||= {}).merge!(host_docker_config_dir: dapp.class.host_docker_config_dir)
50
+ dapp.ruby2go_image({ command: command }.merge(options)).tap do |res|
51
+ raise Error::Build, code: :ruby2go_image_command_failed_unexpected_error, data: { command: command, message: res["error"] } unless res["error"].nil?
52
+ break res['data']
53
+ end
54
+ end
55
+ end
56
+
7
57
  def initialize(name:, dapp:, built_id: nil, from: nil)
8
- @container_name = "#{name[/[[^:].]*/]}.#{SecureRandom.hex(4)}"
9
58
  @built_id = built_id
10
59
 
11
60
  @bash_commands = []
@@ -14,80 +63,210 @@ module Dapp
14
63
  @change_options = {}
15
64
  @service_change_options = {}
16
65
 
17
- super(name: name, dapp: dapp, from: from)
66
+ @from = from
67
+ @name = name
68
+ @dapp = dapp
69
+ end
70
+
71
+ def tagged?
72
+ not image_inspect.empty?
73
+ end
74
+
75
+ def built?
76
+ !built_id.nil?
18
77
  end
19
78
 
20
79
  def built_id
21
80
  @built_id ||= id
22
81
  end
23
82
 
83
+ def id
84
+ image_inspect["Id"]
85
+ end
86
+
87
+ def labels
88
+ built_image_inspect!.fetch('Config', {}).fetch('Labels', {}) || {}
89
+ end
90
+
91
+ def created_at
92
+ built_image_inspect!["Created"]
93
+ end
94
+
95
+ def size
96
+ Float(built_image_inspect!["Size"])
97
+ end
98
+
99
+ def built_image_inspect!
100
+ built_image_inspect
101
+ end
102
+
103
+ def built_image_inspect
104
+ @built_image_inspect || image_inspect
105
+ end
106
+
107
+ def reset_image_inspect
108
+ @image_inspect = nil
109
+ end
110
+
111
+ def image_inspect
112
+ ruby2go_command(:inspect, short_image_option: true) if @image_inspect.nil?
113
+ @image_inspect
114
+ end
115
+
116
+ def pull!
117
+ dapp.log_secondary_process(dapp.t(code: 'process.image_pull', data: { name: name })) do
118
+ ruby2go_command(:pull)
119
+ end
120
+ end
121
+
122
+ def push!
123
+ dapp.log_secondary_process(dapp.t(code: 'process.image_push', data: { name: name })) do
124
+ ruby2go_command(:push)
125
+ end
126
+ end
127
+
24
128
  def build!
25
- run!
26
- @built_id = commit!
27
- ensure
28
- dapp.shellout("docker rm #{container_name}")
129
+ res = self.dapp.ruby2go_image(**ruby2go_image_build_options)
130
+ if res["error"].nil?
131
+ set_ruby2go_state_hash(JSON.load(res['data']['image']))
132
+ elsif res["error"].start_with? "container run failed"
133
+ raise Error::Build, code: :ruby2go_image_command_failed, data: { command: "build" }
134
+ else
135
+ raise Error::Build, code: :ruby2go_image_command_failed_unexpected_error, data: { command: "build", message: res["error"] }
136
+ end
29
137
  end
30
138
 
31
- def built?
32
- !built_id.nil?
139
+ def ruby2go_image_build_options
140
+ {
141
+ image: ruby2go_image_option,
142
+ command: :build,
143
+ options: {
144
+ introspection: {
145
+ before: dapp.introspect_before_error?,
146
+ after: dapp.introspect_error?
147
+ },
148
+ host_docker_config_dir: dapp.class.host_docker_config_dir,
149
+ }
150
+ }
151
+ end
152
+
153
+ def introspect!
154
+ ruby2go_command(:introspect)
33
155
  end
34
156
 
35
157
  def export!(name)
36
- tag!(name).tap do |image|
37
- image.push!
38
- image.untag!
39
- end
158
+ ruby2go_command(:export, options: { name: name })
40
159
  end
41
160
 
42
161
  def tag!(name)
43
- clone!(name).tap do |image|
44
- self.class.tag!(id: image.built_id, tag: image.name)
45
- end
162
+ ruby2go_command(:tag, options: { name: name })
46
163
  end
47
164
 
48
165
  def import!(name)
49
- clone!(name).tap do |image|
50
- image.pull!
51
- @built_id = image.built_id
52
- save_in_cache!
53
- image.untag!
54
- end
166
+ ruby2go_command(:import, options: { name: name })
55
167
  end
56
168
 
57
169
  def save_in_cache!
58
- dapp.log_warning(desc: { code: :another_image_already_tagged }) if !(existed_id = id).nil? && built_id != existed_id
59
- self.class.tag!(id: built_id, tag: name)
170
+ ruby2go_command(:save_in_cache)
60
171
  end
61
172
 
62
- def labels
63
- raise Error::Build, code: :image_not_exist, data: { name: name } if built_id.nil?
64
- self.class.image_config_option(image_id: built_id, option: 'labels')
173
+ def untag!
174
+ ruby2go_command(:untag)
175
+ end
176
+
177
+ def ruby2go_command(command, short_image_option: false, options: {})
178
+ command_options = ruby2go_command_options(command, short_image_option: short_image_option).in_depth_merge(options: options)
179
+ self.class.ruby2go_command(dapp, **command_options).tap do |data|
180
+ set_ruby2go_state_hash(JSON.load(data['image']))
181
+ end
65
182
  end
66
183
 
67
- protected
184
+ def ruby2go_command_options(command, short_image_option: false)
185
+ image = begin
186
+ if short_image_option
187
+ ruby2go_short_image_option
188
+ else
189
+ ruby2go_image_option
190
+ end
191
+ end
68
192
 
69
- attr_reader :container_name
193
+ {
194
+ image: image,
195
+ command: command,
196
+ }
197
+ end
70
198
 
71
- def run!
72
- raise Error::Build, code: :built_id_not_defined if from.built_id.nil?
73
- dapp.shellout!("docker run #{prepared_options} #{from.built_id} -ec '#{prepared_bash_command}'", log_verbose: true)
74
- rescue ::Dapp::Error::Shellout => error
75
- dapp.log_warning(desc: { code: :launched_command, data: { command: prepared_commands.join(' && ') }, context: :container })
199
+ def ruby2go_image_option
200
+ JSON.dump(get_ruby2go_state_hash)
201
+ end
76
202
 
77
- raise unless dapp.introspect_error? || dapp.introspect_before_error?
78
- built_id = dapp.introspect_error? ? commit! : from.built_id
79
- raise Exception::IntrospectImage, data: { built_id: built_id,
80
- options: prepared_options,
81
- rmi: dapp.introspect_error?,
82
- error: error }
203
+ def ruby2go_short_image_option
204
+ JSON.dump(get_ruby2go_short_state_hash)
83
205
  end
84
206
 
85
- def commit!
86
- dapp.shellout!("docker commit #{prepared_change} #{container_name}").stdout.strip
207
+ def get_ruby2go_state_hash
208
+ [
209
+ :name,
210
+ :from,
211
+ :built_id,
212
+ :built_image_inspect,
213
+ :image_inspect,
214
+ :bash_commands,
215
+ :service_bash_commands,
216
+ :options,
217
+ :change_options,
218
+ :service_change_options,
219
+ ].map do |name|
220
+ if name == :from
221
+ [name, from.get_ruby2go_state_hash] unless from.nil?
222
+ elsif name == :built_image_inspect && built_image_inspect.empty?
223
+ elsif name == :image_inspect && image_inspect.empty?
224
+ else
225
+ [name, send(name)]
226
+ end
227
+ end
228
+ .compact
229
+ .to_h
87
230
  end
88
231
 
89
- def clone!(name)
90
- self.class.new(name: name, dapp: dapp, built_id: built_id)
232
+ def get_ruby2go_short_state_hash
233
+ [
234
+ :name,
235
+ :bash_commands,
236
+ :service_bash_commands,
237
+ :options,
238
+ :change_options,
239
+ :service_change_options,
240
+ ].map do |name|
241
+ [name, send(name)]
242
+ end
243
+ .compact
244
+ .to_h
245
+ end
246
+
247
+ def set_ruby2go_state_hash(state_hash)
248
+ state_hash.each do |name, value|
249
+ variable = "@#{name}".to_sym
250
+
251
+ case name
252
+ when "from"
253
+ from.set_ruby2go_state_hash(value) unless from.nil? || value.nil?
254
+ when "built_id"
255
+ if value.to_s.empty?
256
+ @built_id = nil
257
+ else
258
+ @built_id = value
259
+ end
260
+ when "image_inspect"
261
+ instance_variable_set(variable, (value || {}))
262
+ when "options", "change_options", "service_change_options"
263
+ instance_variable_set(variable, (value || {}).reject { |_, v| v.nil? || v.empty? }.symbolize_keys)
264
+ when "bash_commands", "service_bash_commands"
265
+ instance_variable_set(variable, value || [])
266
+ else
267
+ instance_variable_set(variable, value)
268
+ end
269
+ end
91
270
  end
92
271
  end # Stage
93
272
  end # Image
@@ -10,18 +10,18 @@ module Dapp
10
10
  end
11
11
  end # << self
12
12
 
13
- attr_reader :lock_path
13
+ attr_reader :locks_path
14
14
 
15
- def initialize(lock_path, name)
15
+ def initialize(locks_path, name)
16
16
  super(name)
17
17
 
18
- @lock_path = Pathname.new(lock_path).tap(&:mkpath)
18
+ @locks_path = Pathname.new(locks_path).tap(&:mkpath)
19
19
  end
20
20
 
21
21
  protected
22
22
 
23
23
  def lock_file_path
24
- lock_path.join(MurmurHash3::V32.str_hexdigest(name))
24
+ locks_path.join(MurmurHash3::V32.str_hexdigest(name))
25
25
  end
26
26
 
27
27
  def _do_lock(timeout, on_wait, readonly)