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,30 +2,11 @@ module Dapp
2
2
  module Dimg
3
3
  module Build
4
4
  module Stage
5
- class BuildArtifact < Base
6
- include Mod::GitArtifactsDependencies
7
-
5
+ class BuildArtifact < Instructions
8
6
  def initialize(dimg)
9
7
  @prev_stage = GAArtifactPatch.new(dimg, self)
10
8
  @dimg = dimg
11
9
  end
12
-
13
- def empty?
14
- !dimg.builder.build_artifact?
15
- end
16
-
17
- def context
18
- [git_artifacts_dependencies, builder_checksum]
19
- end
20
-
21
- def builder_checksum
22
- dimg.builder.build_artifact_checksum
23
- end
24
-
25
- def prepare_image
26
- super
27
- dimg.builder.build_artifact(image)
28
- end
29
10
  end # BuildArtifact
30
11
  end # Stage
31
12
  end # Build
@@ -9,13 +9,14 @@ module Dapp
9
9
  end
10
10
 
11
11
  def dependencies
12
- [change_options]
12
+ @dependencies ||= [change_options]
13
13
  end
14
14
 
15
15
  def prepare_image
16
- super
17
- change_options.each do |k, v|
18
- image.public_send("add_change_#{k}", v)
16
+ super do
17
+ change_options.each do |k, v|
18
+ image.public_send("add_change_#{k}", v)
19
+ end
19
20
  end
20
21
  end
21
22
  end # DockerInstructions
@@ -4,30 +4,73 @@ module Dapp
4
4
  module Stage
5
5
  class From < Base
6
6
  def dependencies
7
- [from_image_name, dimg.config._docker._from_cache_version, config_mounts_dirs]
7
+ @dependencies ||= [from_image_name, dimg.config._docker._from_cache_version, config_mounts]
8
+ end
9
+
10
+ def save_in_cache!
11
+ super
12
+ from_dimg.last_stage.save_in_cache! unless from_dimg.nil?
8
13
  end
9
14
 
10
15
  protected
11
16
 
12
17
  def prepare_image
13
- from_image.pull!
14
- raise Error::Build, code: :from_image_not_found, data: { name: from_image_name } unless from_image.tagged?
18
+ if !from_dimg.nil?
19
+ process = dimg.dapp.t(code: 'process.from_dimg_building', data: { name: from_dimg.name })
20
+ dimg.dapp.log_secondary_process(process) { from_dimg.build! }
21
+ elsif !from_image.tagged?
22
+ try_host_docker_login
23
+ from_image.pull!
24
+ raise Error::Build, code: :from_image_not_found, data: { name: from_image_name } unless from_image.tagged?
25
+ end
26
+
15
27
  add_cleanup_mounts_dirs_command
16
28
  super
17
29
  end
18
30
 
31
+ def from_dimg
32
+ @from_dimg ||= begin
33
+ if !dimg.config._from_dimg.nil?
34
+ dimg.dapp.dimg_layer(config: dimg.config._from_dimg)
35
+ elsif !dimg.config._from_dimg_artifact.nil?
36
+ dimg.dapp.artifact_dimg_layer(config: dimg.config._from_dimg_artifact)
37
+ end
38
+ end
39
+ end
40
+
41
+ def try_host_docker_login
42
+ return unless registry_from_image_name?
43
+ dimg.dapp.host_docker_login(ENV['CI_REGISTRY'])
44
+ end
45
+
46
+ def registry_from_image_name?
47
+ ENV['CI_REGISTRY'] && from_image_name.start_with?(ENV['CI_REGISTRY'])
48
+ end
49
+
19
50
  def add_cleanup_mounts_dirs_command
20
51
  return if config_mounts_dirs.empty?
21
52
  image.add_service_command ["#{dimg.dapp.rm_bin} -rf %s",
22
- "#{dimg.dapp.mkdir_bin} -p %s"].map { |c| format(c, config_mounts_dirs.join(' ')) }
53
+ "#{dimg.dapp.mkdir_bin} -p %s",
54
+ "#{dimg.dapp.rm_bin} -rf %s"].map { |c| format(c, config_mounts_dirs.join(' ')) }
55
+ end
56
+
57
+ def config_mounts
58
+ {}.tap do |mounts|
59
+ [:tmp_dir, :build_dir].map { |type| mounts[type] = config_mounts_by_type(type) }
60
+ config_custom_dir_mounts.each { |from, to| mounts[from] = to }
61
+ end
23
62
  end
24
63
 
25
64
  def config_mounts_dirs
26
- [:tmp_dir, :build_dir].map { |type| config_mounts_by_type(type) }.flatten.uniq
65
+ config_mounts.values.flatten.uniq
66
+ end
67
+
68
+ def image_add_mounts
69
+ image_add_mounts_labels
27
70
  end
28
71
 
29
- def adding_mounts_by_type(_type)
30
- []
72
+ def image_should_be_untagged_condition
73
+ false
31
74
  end
32
75
 
33
76
  def should_not_be_detailed?
@@ -37,11 +80,21 @@ module Dapp
37
80
  private
38
81
 
39
82
  def from_image_name
40
- dimg.config._docker._from
83
+ if !from_dimg.nil?
84
+ from_dimg.signature
85
+ else
86
+ dimg.config._docker._from
87
+ end
41
88
  end
42
89
 
43
90
  def from_image
44
- @from_image ||= Image::Stage.image_by_name(name: from_image_name, dapp: dimg.dapp)
91
+ @from_image ||= begin
92
+ if !from_dimg.nil?
93
+ from_dimg.last_stage.image
94
+ else
95
+ Image::Stage.image_by_name(name: from_image_name, dapp: dimg.dapp)
96
+ end
97
+ end
45
98
  end
46
99
  end # Prepare
47
100
  end # Stage
@@ -4,12 +4,25 @@ module Dapp
4
4
  module Stage
5
5
  class GAArchive < GABase
6
6
  def initialize(dimg, next_stage)
7
- @prev_stage = GAArchiveDependencies.new(dimg, self)
7
+ @prev_stage = BeforeInstallArtifact.new(dimg, self)
8
8
  super
9
9
  end
10
10
 
11
+ def dependencies
12
+ @dependencies ||= [dimg.git_artifacts.map(&:paramshash).join, reset_commits, dev_mode_dependencies]
13
+ end
14
+
15
+ def dev_mode_dependencies
16
+ return unless dimg.dev_mode?
17
+ dimg.git_artifacts.map(&:latest_commit)
18
+ end
19
+
11
20
  protected
12
21
 
22
+ def reset_commits
23
+ dimg.git_artifacts.map { |git_artifact| git_artifact.repo.find_commit_id_by_message('(\[dapp reset\])|(\[reset dapp\])') }.compact.sort.uniq
24
+ end
25
+
13
26
  def apply_command_method
14
27
  :apply_archive_command
15
28
  end
@@ -8,12 +8,8 @@ module Dapp
8
8
  super
9
9
  end
10
10
 
11
- def empty?
12
- dimg.git_artifacts.empty? || dependencies_empty?
13
- end
14
-
15
11
  def dependencies
16
- dimg.stage_by_name(:build_artifact).context
12
+ @dependencies ||= dimg.stage_by_name(:build_artifact).context
17
13
  end
18
14
  end # GAArtifactPatch
19
15
  end # Stage
@@ -3,51 +3,27 @@ module Dapp
3
3
  module Build
4
4
  module Stage
5
5
  class GABase < Base
6
- def dependencies_stage
7
- prev_stage
8
- end
9
-
10
6
  def prepare_image
11
7
  super do
12
8
  image.add_volumes_from dimg.dapp.gitartifact_container
13
9
  image.add_volume "#{dimg.tmp_path('archives')}:#{dimg.container_tmp_path('archives')}:ro"
14
10
  image.add_volume "#{dimg.tmp_path('patches')}:#{dimg.container_tmp_path('patches')}:ro"
15
11
 
16
- prepare_local_git_artifacts_command
17
- prepare_remote_git_artifacts_command
12
+ dimg.git_artifacts.each do |git_artifact|
13
+ image.add_service_change_label(dimg.dapp.dimgstage_g_a_commit_label(git_artifact.paramshash).to_sym => layer_commit(git_artifact))
14
+ image.add_command git_artifact.send(apply_command_method, self)
15
+ end
18
16
  end
19
17
  end
20
18
 
21
- def prepare_local_git_artifacts_command
22
- prepare_base_git_artifacts_command(dimg.local_git_artifacts)
23
- end
24
-
25
- def prepare_remote_git_artifacts_command
26
- prepare_base_git_artifacts_command(dimg.remote_git_artifacts)
27
- end
28
-
29
- def prepare_base_git_artifacts_command(git_artifacts)
30
- git_artifacts.each { |git_artifact| image.add_command git_artifact.send(apply_command_method, self) }
31
- end
32
-
33
19
  def empty?
34
- dependencies_stage.empty?
20
+ dimg.git_artifacts.empty? || super
35
21
  end
36
22
 
37
23
  def g_a_stage?
38
24
  true
39
25
  end
40
26
 
41
- def layer_commit(git_artifact)
42
- commits[git_artifact] ||= begin
43
- if dependencies_stage && dependencies_stage.image.tagged?
44
- dependencies_stage.image.labels[git_artifact.full_name]
45
- else
46
- git_artifact.latest_commit
47
- end
48
- end
49
- end
50
-
51
27
  protected
52
28
 
53
29
  def should_not_be_detailed?
@@ -61,12 +37,6 @@ module Dapp
61
37
  def apply_command_method
62
38
  :apply_patch_command
63
39
  end
64
-
65
- private
66
-
67
- def commits
68
- @commits ||= {}
69
- end
70
40
  end # GABase
71
41
  end # Stage
72
42
  end # Build
@@ -8,54 +8,35 @@ module Dapp
8
8
  super
9
9
  end
10
10
 
11
- def dependencies_stage
12
- nil
11
+ def renew
12
+ dependencies_discard
13
+ super
13
14
  end
14
15
 
15
16
  def dependencies
16
- [].tap do |dependencies|
17
- dependencies << commit_list
18
- dependencies << dimg.local_git_artifacts.map { |git_artifact| git_artifact.dev_patch_hash(self) } if dimg.dapp.dev_mode?
19
- end
17
+ @dependencies ||= [commit_list, git_artifacts_dev_patch_hashes]
20
18
  end
21
19
 
22
- def prepare_local_git_artifacts_command
23
- return super unless dimg.dapp.dev_mode?
24
- dimg.local_git_artifacts.each { |git_artifact| image.add_command git_artifact.apply_dev_patch_command(self) }
20
+ def empty?
21
+ dimg.git_artifacts.empty? || dependencies_empty?
25
22
  end
26
23
 
27
24
  def layer_commit(git_artifact)
28
- commits[git_artifact] ||= begin
29
- git_artifact.latest_commit
30
- end
31
- end
32
-
33
- def empty?
34
- dependencies_empty? || git_artifacts_without_changes?
25
+ commits[git_artifact] ||= git_artifact.latest_commit
35
26
  end
36
27
 
37
28
  private
38
29
 
39
- def git_artifacts_without_changes?
40
- local_git_artifacts_without_changes? && remote_git_artifacts_without_changes?
41
- end
42
-
43
- def local_git_artifacts_without_changes?
44
- dimg.local_git_artifacts.all? do |git_artifact|
45
- from_commit = prev_g_a_stage.layer_commit(git_artifact)
46
- to_commit = dimg.dev_mode? ? nil : layer_commit(git_artifact)
47
- !git_artifact.any_changes?(from_commit, to_commit)
48
- end
49
- end
50
-
51
- def remote_git_artifacts_without_changes?
52
- dimg.remote_git_artifacts.all? do |git_artifact|
53
- !git_artifact.any_changes?(prev_g_a_stage.layer_commit(git_artifact), layer_commit(git_artifact))
54
- end
30
+ def commit_list
31
+ dimg.git_artifacts
32
+ .select { |ga| ga.repo.commit_exists?(prev_stage.layer_commit(ga)) && !ga.is_patch_empty(self) }
33
+ .map(&method(:layer_commit))
55
34
  end
56
35
 
57
- def commit_list
58
- dimg.git_artifacts.map { |git_artifact| layer_commit(git_artifact) }
36
+ def git_artifacts_dev_patch_hashes
37
+ # FIXME: dev-mode support in GitArtifact
38
+ # dimg.git_artifacts.map(&:dev_patch_hash)
39
+ nil
59
40
  end
60
41
  end # GALatestPatch
61
42
  end # Stage
@@ -0,0 +1,21 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Build
4
+ module Stage
5
+ class GARelatedBase < GABase
6
+ def dependencies
7
+ @dependencies ||= dimg.stage_by_name(related_stage_name).context
8
+ end
9
+
10
+ def empty?
11
+ dimg.stage_by_name(related_stage_name).context.compact.empty? || super
12
+ end
13
+
14
+ def related_stage_name
15
+ raise
16
+ end
17
+ end # GARelatedBase
18
+ end # Stage
19
+ end # Build
20
+ end # Dimg
21
+ end # Dapp
@@ -8,20 +8,21 @@ module Dapp
8
8
  end
9
9
 
10
10
  def signature
11
- @signature ||= hashsum [*dependencies.flatten, change_options]
11
+ hashsum [*dependencies.flatten, change_options]
12
12
  end
13
13
 
14
14
  def image
15
15
  @image ||= Image::Scratch.new(name: image_name, dapp: dimg.dapp)
16
16
  end
17
17
 
18
- def image_add_volumes
18
+ def image_add_mounts
19
19
  end
20
20
 
21
21
  def prepare_image
22
- super
23
- change_options.each do |k, v|
24
- image.public_send("add_change_#{k}", v)
22
+ super do
23
+ change_options.each do |k, v|
24
+ image.public_send("add_change_#{k}", v)
25
+ end
25
26
  end
26
27
  end
27
28
 
@@ -30,9 +31,9 @@ module Dapp
30
31
  def apply_artifact(artifact, image)
31
32
  return if dimg.dapp.dry_run?
32
33
 
33
- artifact_name = artifact[:name]
34
34
  artifact_dimg = artifact[:dimg]
35
35
  cwd = artifact[:options][:cwd]
36
+ to = artifact[:options][:to]
36
37
  include_paths = artifact[:options][:include_paths]
37
38
  owner = artifact[:options][:owner]
38
39
  group = artifact[:options][:group]
@@ -44,19 +45,29 @@ module Dapp
44
45
  credentials += "--group=#{group} " if group
45
46
  credentials += '--numeric-owner'
46
47
 
47
- archive_path = dimg.tmp_path('artifact', artifact_name, 'archive.tar.gz')
48
- container_archive_path = File.join(artifact_dimg.container_tmp_path(artifact_name), 'archive.tar.gz')
48
+ archive_path = dimg.tmp_path('artifact', artifact_dimg.name, 'archive.tar.gz')
49
+ container_archive_path = File.join(artifact_dimg.container_tmp_path(artifact_dimg.name), 'archive.tar.gz')
49
50
 
50
51
  exclude_paths = artifact[:options][:exclude_paths].map { |path| "--exclude=#{path}" }.join(' ')
51
52
  include_paths = include_paths.empty? ? [File.join(cwd, '*')] : include_paths.map { |path| File.join(cwd, path, '*') }
52
53
  include_paths.map! { |path| path[1..-1] } # relative path
53
54
 
54
- command = "#{sudo} #{dimg.dapp.tar_bin} -czf #{container_archive_path} #{exclude_paths} #{include_paths.join(' ')} #{credentials}"
55
- run_artifact_dimg(artifact_dimg, artifact_name, command)
55
+ command = "#{sudo} #{dimg.dapp.tar_bin} #{tar_option_transform(cwd, to)} -czf #{container_archive_path} #{exclude_paths} #{include_paths.join(' ')} #{credentials}"
56
+ run_artifact_dimg(artifact_dimg, command)
56
57
 
57
58
  image.add_archive archive_path
58
59
  end
59
- # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
60
+
61
+ private
62
+
63
+ def tar_option_transform(cwd, to)
64
+ format = proc do |path|
65
+ res = path.chomp('/').reverse.chomp('/').reverse
66
+ res = res.gsub('/', '\/')
67
+ res
68
+ end
69
+ "--transform \"s/^#{format.call(cwd)}/#{format.call(to)}/\""
70
+ end
60
71
  end # ImportArtifact
61
72
  end # Stage
62
73
  end # Build
@@ -3,13 +3,17 @@ module Dapp
3
3
  module Build
4
4
  module Stage
5
5
  module Install
6
- class GAPostInstallPatch < GABase
6
+ class GAPostInstallPatch < GARelatedBase
7
7
  include Mod::Group
8
8
 
9
9
  def initialize(dimg, next_stage)
10
- @prev_stage = GAPostInstallPatchDependencies.new(dimg, self)
10
+ @prev_stage = Install.new(dimg, self)
11
11
  super
12
12
  end
13
+
14
+ def related_stage_name
15
+ :before_setup
16
+ end
13
17
  end # GAPostInstallPatch
14
18
  end
15
19
  end # Stage
@@ -3,13 +3,17 @@ module Dapp
3
3
  module Build
4
4
  module Stage
5
5
  module Install
6
- class GAPreInstallPatch < GABase
6
+ class GAPreInstallPatch < GARelatedBase
7
7
  include Mod::Group
8
8
 
9
9
  def initialize(dimg, next_stage)
10
- @prev_stage = GAPreInstallPatchDependencies.new(dimg, self)
10
+ @prev_stage = GAArchive.new(dimg, self)
11
11
  super
12
12
  end
13
+
14
+ def related_stage_name
15
+ :install
16
+ end
13
17
  end # GAPostInstallPatch
14
18
  end
15
19
  end # Stage
@@ -3,31 +3,13 @@ module Dapp
3
3
  module Build
4
4
  module Stage
5
5
  module Install
6
- class Install < Base
6
+ class Install < Instructions
7
7
  include Mod::Group
8
- include Mod::GitArtifactsDependencies
9
8
 
10
9
  def initialize(dimg, next_stage)
11
10
  @prev_stage = GAPreInstallPatch.new(dimg, self)
12
11
  super
13
12
  end
14
-
15
- def empty?
16
- !dimg.builder.install?
17
- end
18
-
19
- def context
20
- [git_artifacts_dependencies, builder_checksum]
21
- end
22
-
23
- def builder_checksum
24
- dimg.builder.install_checksum
25
- end
26
-
27
- def prepare_image
28
- super
29
- dimg.builder.install(image)
30
- end
31
13
  end # Install
32
14
  end # Install
33
15
  end # Stage
@@ -0,0 +1,27 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Build
4
+ module Stage
5
+ class Instructions < Base
6
+ def empty?
7
+ !dimg.builder.public_send(:"#{name}?")
8
+ end
9
+
10
+ def context
11
+ [git_artifacts_dependencies, builder_checksum]
12
+ end
13
+
14
+ def builder_checksum
15
+ dimg.builder.public_send(:"#{name}_checksum")
16
+ end
17
+
18
+ def prepare_image
19
+ super do
20
+ dimg.builder.public_send(name, image)
21
+ end
22
+ end
23
+ end # Instructions
24
+ end # Stage
25
+ end # Build
26
+ end # Dimg
27
+ end # Dapp
@@ -5,7 +5,6 @@ module Dapp
5
5
  module Mod
6
6
  module Group
7
7
  def log_image_build
8
- return super if should_be_quiet?
9
8
  log_group_name if group_should_be_opened?
10
9
  dimg.dapp.with_log_indent { super }
11
10
  end
@@ -19,18 +18,31 @@ module Dapp
19
18
  end
20
19
 
21
20
  def group_should_be_opened?
22
- !group_opened? && image_should_be_build?
23
- end
24
-
25
- def group_opened?
26
- return false if prev_group_stage.nil?
27
- prev_group_stage.group_opened? || prev_group_stage.image_should_be_build?
21
+ @group_should_be_opened ||= begin
22
+ if empty?
23
+ false
24
+ elsif prev_group_stage.nil?
25
+ true
26
+ else
27
+ prev_group_stages.all? { |s| !s.group_should_be_opened? }
28
+ end
29
+ end
28
30
  end
29
31
 
30
32
  def prev_group_stage
31
33
  prev_stage if prev_stage.respond_to?(:group_name) && prev_stage.group_name == group_name
32
34
  end
33
35
 
36
+ def prev_group_stages
37
+ @prev_group_stages ||= begin
38
+ if prev_group_stage.nil?
39
+ []
40
+ else
41
+ prev_group_stage.prev_group_stages + [prev_group_stage]
42
+ end
43
+ end
44
+ end
45
+
34
46
  def log_name_context
35
47
  [super, group_name].join('.')
36
48
  end
@@ -4,19 +4,19 @@ module Dapp
4
4
  module Stage
5
5
  module Mod
6
6
  module Logging
7
- def log_image_build(&image_build)
8
- if empty? then log_state(:empty)
9
- elsif image.built? then log_state(:using_cache)
10
- elsif should_be_not_present? then log_state(:not_present)
11
- elsif dimg.dapp.dry_run? then log_state(:build, styles: { status: :success })
12
- else log_image_build_process(&image_build)
7
+ def log_image_build
8
+ case
9
+ when dimg.dapp.dry_run? && image_should_be_untagged? then log_state(:rebuild, styles: { status: :success })
10
+ when image.built? then log_state(:using_cache)
11
+ when should_be_not_present? then log_state(:not_present)
12
+ when dimg.dapp.dry_run? then log_state(:build, styles: { status: :success })
13
+ else yield
13
14
  end
14
15
  ensure
15
16
  log_build
16
17
  end
17
18
 
18
19
  def log_build
19
- return unless dimg.dapp.log_verbose? && !should_be_quiet?
20
20
  dimg.dapp.with_log_indent do
21
21
  dimg.dapp.log_info dimg.dapp.t(code: 'image.signature', data: { signature: image_name })
22
22
  log_image_details unless empty?
@@ -69,17 +69,9 @@ module Dapp
69
69
  end
70
70
 
71
71
  def log_state(state_code, styles: {})
72
- return if should_be_quiet?
73
72
  dimg.dapp.log_state(log_name, state: dimg.dapp.t(code: state_code, context: 'state'), styles: styles)
74
73
  end
75
74
 
76
- def log_image_build_process
77
- dimg.dapp.log_process(log_name,
78
- process: dimg.dapp.t(code: 'status.process.building'),
79
- short: should_not_be_detailed?,
80
- quiet: should_be_quiet?) { yield }
81
- end
82
-
83
75
  def ignore_log_commands?
84
76
  false
85
77
  end
@@ -88,12 +80,16 @@ module Dapp
88
80
  image.send(:bash_commands).empty?
89
81
  end
90
82
 
91
- def should_be_introspected?
92
- dimg.stage_should_be_introspected?(name) && !dimg.dapp.dry_run?
83
+ def image_should_be_introspected?
84
+ image_should_be_introspected_after_build? || image_should_be_introspected_before_build?
85
+ end
86
+
87
+ def image_should_be_introspected_before_build?
88
+ dimg.stage_should_be_introspected_before_build?(name) && !dimg.dapp.dry_run?
93
89
  end
94
90
 
95
- def should_be_quiet?
96
- dimg.artifact? && !dimg.dapp.log_verbose?
91
+ def image_should_be_introspected_after_build?
92
+ dimg.stage_should_be_introspected_after_build?(name) && !dimg.dapp.dry_run?
97
93
  end
98
94
  end
99
95
  end # Mod