dapp 0.10.2 → 0.36.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. checksums.yaml +5 -5
  2. data/bin/dapp +77 -15
  3. data/config/en/common.yml +20 -11
  4. data/config/en/net_status.yml +108 -27
  5. data/lib/dapp/cli/cli.rb +1 -0
  6. data/lib/dapp/cli/command/base.rb +111 -0
  7. data/lib/dapp/cli/command/sample/base.rb +28 -0
  8. data/lib/dapp/cli/command/sample/create.rb +24 -0
  9. data/lib/dapp/cli/command/sample/list.rb +25 -0
  10. data/lib/dapp/cli/command/sample.rb +20 -0
  11. data/lib/dapp/cli/command/slug.rb +26 -0
  12. data/lib/dapp/cli/command/update.rb +65 -0
  13. data/lib/dapp/cli/options/ssh.rb +18 -0
  14. data/lib/dapp/cli/options/tag.rb +51 -0
  15. data/lib/dapp/cli.rb +11 -3
  16. data/lib/dapp/config/config.rb +21 -0
  17. data/lib/dapp/config/directive/base.rb +100 -3
  18. data/lib/dapp/core_ext/hash.rb +14 -0
  19. data/lib/dapp/core_ext/pathname.rb +6 -4
  20. data/lib/dapp/dapp/chef.rb +1 -9
  21. data/lib/dapp/dapp/command/common.rb +24 -0
  22. data/lib/dapp/dapp/command/sample/common.rb +54 -0
  23. data/lib/dapp/dapp/command/sample/create.rb +57 -0
  24. data/lib/dapp/dapp/command/sample/list.rb +13 -0
  25. data/lib/dapp/dapp/command/slug.rb +11 -0
  26. data/lib/dapp/dapp/dapp_config.rb +85 -0
  27. data/lib/dapp/dapp/dappfile.rb +108 -27
  28. data/lib/dapp/dapp/deps/base.rb +9 -32
  29. data/lib/dapp/dapp/deps/common.rb +26 -0
  30. data/lib/dapp/dapp/deps/gitartifact.rb +2 -20
  31. data/lib/dapp/dapp/deps/toolchain.rb +11 -0
  32. data/lib/dapp/dapp/git_artifact.rb +6 -4
  33. data/lib/dapp/dapp/lock.rb +6 -5
  34. data/lib/dapp/dapp/logging/base.rb +32 -20
  35. data/lib/dapp/dapp/logging/i18n.rb +5 -1
  36. data/lib/dapp/dapp/logging/process.rb +6 -6
  37. data/lib/dapp/dapp/option_tags.rb +98 -0
  38. data/lib/dapp/dapp/ruby2go.rb +130 -0
  39. data/lib/dapp/dapp/sentry.rb +97 -0
  40. data/lib/dapp/dapp/shellout/base.rb +26 -18
  41. data/lib/dapp/dapp/shellout/streaming.rb +2 -2
  42. data/lib/dapp/dapp/slug.rb +12 -0
  43. data/lib/dapp/dapp/ssh_agent.rb +25 -7
  44. data/lib/dapp/dapp.rb +192 -41
  45. data/lib/dapp/deployment.rb +1 -0
  46. data/lib/dapp/dimg/artifact.rb +12 -4
  47. data/lib/dapp/dimg/build/stage/artifact_base.rb +26 -30
  48. data/lib/dapp/dimg/build/stage/artifact_default.rb +50 -28
  49. data/lib/dapp/dimg/build/stage/base.rb +187 -52
  50. data/lib/dapp/dimg/build/stage/before_install.rb +4 -15
  51. data/lib/dapp/dimg/build/stage/before_install_artifact.rb +4 -0
  52. data/lib/dapp/dimg/build/stage/before_setup.rb +1 -20
  53. data/lib/dapp/dimg/build/stage/build_artifact.rb +1 -20
  54. data/lib/dapp/dimg/build/stage/docker_instructions.rb +5 -4
  55. data/lib/dapp/dimg/build/stage/from.rb +62 -9
  56. data/lib/dapp/dimg/build/stage/ga_archive.rb +14 -1
  57. data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +1 -5
  58. data/lib/dapp/dimg/build/stage/ga_base.rb +5 -35
  59. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +15 -34
  60. data/lib/dapp/dimg/build/stage/ga_related_base.rb +21 -0
  61. data/lib/dapp/dimg/build/stage/import_artifact.rb +22 -11
  62. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch.rb +6 -2
  63. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb +6 -2
  64. data/lib/dapp/dimg/build/stage/install/install.rb +1 -19
  65. data/lib/dapp/dimg/build/stage/instructions.rb +27 -0
  66. data/lib/dapp/dimg/build/stage/mod/group.rb +19 -7
  67. data/lib/dapp/dimg/build/stage/mod/logging.rb +15 -19
  68. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb +24 -1
  69. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch.rb +6 -2
  70. data/lib/dapp/dimg/build/stage/setup/setup.rb +1 -19
  71. data/lib/dapp/dimg/builder/ansible.rb +5 -0
  72. data/lib/dapp/dimg/builder/chef/cookbook.rb +8 -8
  73. data/lib/dapp/dimg/builder/chef.rb +29 -16
  74. data/lib/dapp/dimg/builder/none.rb +1 -34
  75. data/lib/dapp/dimg/builder/ruby2go.rb +57 -0
  76. data/lib/dapp/dimg/builder/shell.rb +1 -20
  77. data/lib/dapp/dimg/cli/cli.rb +2 -1
  78. data/lib/dapp/dimg/cli/command/base.rb +24 -0
  79. data/lib/dapp/dimg/cli/command/dimg/bp.rb +60 -0
  80. data/lib/dapp/dimg/cli/command/dimg/build.rb +43 -0
  81. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/export.rb +9 -4
  82. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/import.rb +4 -4
  83. data/lib/dapp/dimg/cli/{build_context.rb → command/dimg/build_context.rb} +5 -5
  84. data/lib/dapp/dimg/cli/{cleanup.rb → command/dimg/cleanup.rb} +4 -6
  85. data/lib/dapp/dimg/cli/command/dimg/cleanup_repo.rb +47 -0
  86. data/lib/dapp/dimg/cli/command/dimg/flush_local.rb +24 -0
  87. data/lib/dapp/dimg/cli/command/dimg/flush_repo.rb +36 -0
  88. data/lib/dapp/dimg/cli/{list.rb → command/dimg/list.rb} +6 -3
  89. data/lib/dapp/dimg/cli/{mrproper.rb → command/dimg/mrproper.rb} +4 -4
  90. data/lib/dapp/dimg/cli/command/dimg/push.rb +39 -0
  91. data/lib/dapp/dimg/cli/{run.rb → command/dimg/run.rb} +30 -15
  92. data/lib/dapp/dimg/cli/{spush.rb → command/dimg/spush.rb} +4 -4
  93. data/lib/dapp/dimg/cli/{stage_image.rb → command/dimg/stage_image.rb} +12 -3
  94. data/lib/dapp/dimg/cli/command/dimg/stages/base.rb +13 -0
  95. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_local.rb +13 -9
  96. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_repo.rb +6 -8
  97. data/lib/dapp/dimg/cli/command/dimg/stages/flush_local.rb +21 -0
  98. data/lib/dapp/dimg/cli/command/dimg/stages/flush_repo.rb +28 -0
  99. data/lib/dapp/dimg/cli/command/dimg/stages/pull.rb +34 -0
  100. data/lib/dapp/dimg/cli/command/dimg/stages/push.rb +30 -0
  101. data/lib/dapp/dimg/cli/command/dimg/stages.rb +22 -0
  102. data/lib/dapp/dimg/cli/command/dimg/tag.rb +24 -0
  103. data/lib/dapp/dimg/cli/command/dimg.rb +31 -0
  104. data/lib/dapp/dimg/cli/options/introspection.rb +45 -0
  105. data/lib/dapp/dimg/config/config.rb +24 -0
  106. data/lib/dapp/dimg/config/directive/artifact.rb +13 -15
  107. data/lib/dapp/dimg/config/directive/artifact_base.rb +13 -8
  108. data/lib/dapp/dimg/config/directive/artifact_dimg.rb +12 -0
  109. data/lib/dapp/dimg/config/directive/artifact_group.rb +60 -0
  110. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +203 -0
  111. data/lib/dapp/dimg/config/directive/dimg/validation.rb +217 -0
  112. data/lib/dapp/dimg/config/directive/dimg.rb +36 -0
  113. data/lib/dapp/dimg/config/directive/dimg_group.rb +73 -0
  114. data/lib/dapp/dimg/config/directive/dimg_group_base.rb +46 -0
  115. data/lib/dapp/dimg/config/directive/docker/artifact.rb +5 -0
  116. data/lib/dapp/dimg/config/directive/docker/base.rb +2 -3
  117. data/lib/dapp/dimg/config/directive/docker/dimg.rb +4 -4
  118. data/lib/dapp/dimg/config/directive/git_artifact_local.rb +24 -5
  119. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +23 -12
  120. data/lib/dapp/dimg/config/directive/mount.rb +11 -3
  121. data/lib/dapp/dimg/config/directive/shell/dimg.rb +2 -2
  122. data/lib/dapp/dimg/dapp/command/bp.rb +3 -5
  123. data/lib/dapp/dimg/dapp/command/build.rb +4 -6
  124. data/lib/dapp/dimg/dapp/command/build_context/common.rb +2 -2
  125. data/lib/dapp/dimg/dapp/command/build_context/export.rb +14 -14
  126. data/lib/dapp/dimg/dapp/command/build_context/import.rb +28 -23
  127. data/lib/dapp/dimg/dapp/command/cleanup.rb +4 -11
  128. data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +143 -0
  129. data/lib/dapp/dimg/dapp/command/common.rb +148 -38
  130. data/lib/dapp/dimg/dapp/command/flush_local.rb +25 -0
  131. data/lib/dapp/dimg/dapp/command/flush_repo.rb +25 -0
  132. data/lib/dapp/dimg/dapp/command/list.rb +1 -1
  133. data/lib/dapp/dimg/dapp/command/mrproper.rb +16 -63
  134. data/lib/dapp/dimg/dapp/command/push.rb +11 -16
  135. data/lib/dapp/dimg/dapp/command/ruby2go_cleanup.rb +48 -0
  136. data/lib/dapp/dimg/dapp/command/run.rb +4 -4
  137. data/lib/dapp/dimg/dapp/command/spush.rb +4 -5
  138. data/lib/dapp/dimg/dapp/command/stage_image.rb +2 -2
  139. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +13 -115
  140. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +23 -102
  141. data/lib/dapp/dimg/dapp/command/stages/common.rb +57 -39
  142. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +13 -7
  143. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +14 -8
  144. data/lib/dapp/dimg/dapp/command/stages/pull.rb +4 -13
  145. data/lib/dapp/dimg/dapp/command/stages/push.rb +4 -9
  146. data/lib/dapp/dimg/dapp/command/tag.rb +4 -6
  147. data/lib/dapp/dimg/dapp/config_artifact_group.rb +20 -0
  148. data/lib/dapp/dimg/dapp/dapp.rb +40 -0
  149. data/lib/dapp/dimg/dapp/dappfile.rb +43 -0
  150. data/lib/dapp/dimg/dapp/dimg.rb +41 -0
  151. data/lib/dapp/dimg/dimg/git_artifact.rb +25 -11
  152. data/lib/dapp/dimg/dimg/path.rb +7 -9
  153. data/lib/dapp/dimg/dimg/stages.rb +27 -15
  154. data/lib/dapp/dimg/dimg.rb +172 -69
  155. data/lib/dapp/dimg/docker_registry/base.rb +31 -74
  156. data/lib/dapp/dimg/docker_registry/dimg.rb +55 -0
  157. data/lib/dapp/dimg/docker_registry.rb +5 -23
  158. data/lib/dapp/dimg/error/build.rb +1 -1
  159. data/lib/dapp/dimg/error/chef.rb +1 -5
  160. data/lib/dapp/dimg/error/{command.rb → default.rb} +1 -1
  161. data/lib/dapp/dimg/error/dimg.rb +1 -1
  162. data/lib/dapp/dimg/error/lock.rb +1 -1
  163. data/lib/dapp/dimg/error/registry.rb +1 -1
  164. data/lib/dapp/dimg/error/rugged.rb +1 -1
  165. data/lib/dapp/dimg/error/tar_writer.rb +1 -1
  166. data/lib/dapp/dimg/git_artifact.rb +195 -179
  167. data/lib/dapp/dimg/git_repo/base.rb +49 -45
  168. data/lib/dapp/dimg/git_repo/local.rb +45 -0
  169. data/lib/dapp/dimg/git_repo/own.rb +3 -31
  170. data/lib/dapp/dimg/git_repo/remote.rb +65 -26
  171. data/lib/dapp/dimg/image/argument.rb +15 -50
  172. data/lib/dapp/dimg/image/dimg.rb +15 -0
  173. data/lib/dapp/dimg/image/scratch.rb +35 -9
  174. data/lib/dapp/dimg/image/stage.rb +223 -44
  175. data/lib/dapp/dimg/lock/file.rb +4 -4
  176. data/lib/dapp/downloader.rb +117 -0
  177. data/lib/dapp/error/base.rb +1 -5
  178. data/lib/dapp/error/command.rb +5 -0
  179. data/lib/dapp/error/config.rb +5 -0
  180. data/lib/dapp/error/dapp.rb +1 -1
  181. data/lib/dapp/error/dappfile.rb +1 -1
  182. data/lib/dapp/error/default.rb +11 -0
  183. data/lib/dapp/error/mod/user.rb +11 -0
  184. data/lib/dapp/error/shellout.rb +1 -1
  185. data/lib/dapp/exception/base.rb +1 -1
  186. data/lib/dapp/helper/case_conversion.rb +17 -0
  187. data/lib/dapp/helper/cli.rb +18 -7
  188. data/lib/dapp/helper/net_status.rb +5 -1
  189. data/lib/dapp/helper/sha256.rb +1 -1
  190. data/lib/dapp/helper/tar.rb +31 -0
  191. data/lib/dapp/helper/trivia.rb +40 -1
  192. data/lib/dapp/helper/url.rb +23 -0
  193. data/lib/dapp/helper/yaml.rb +24 -0
  194. data/lib/dapp/kube/cli/cli.rb +1 -0
  195. data/lib/dapp/kube/cli/command/base.rb +14 -0
  196. data/lib/dapp/kube/cli/command/kube/chart_create.rb +19 -0
  197. data/lib/dapp/kube/cli/command/kube/deploy.rb +80 -0
  198. data/lib/dapp/kube/cli/command/kube/dismiss.rb +31 -0
  199. data/lib/dapp/kube/cli/command/kube/lint.rb +53 -0
  200. data/lib/dapp/kube/cli/command/kube/minikube_setup.rb +19 -0
  201. data/lib/dapp/kube/cli/command/kube/render.rb +63 -0
  202. data/lib/dapp/kube/cli/command/kube/secret_edit.rb +30 -0
  203. data/lib/dapp/kube/cli/command/kube/secret_extract.rb +39 -0
  204. data/lib/dapp/kube/cli/command/kube/secret_generate.rb +34 -0
  205. data/lib/dapp/kube/cli/command/kube/secret_key_generate.rb +16 -0
  206. data/lib/dapp/kube/cli/command/kube/secret_regenerate.rb +29 -0
  207. data/lib/dapp/kube/cli/command/kube/value_get.rb +47 -0
  208. data/lib/dapp/kube/cli/command/kube.rb +28 -0
  209. data/lib/dapp/kube/dapp/command/chart_create.rb +103 -0
  210. data/lib/dapp/kube/dapp/command/common.rb +379 -0
  211. data/lib/dapp/kube/dapp/command/deploy.rb +351 -0
  212. data/lib/dapp/kube/dapp/command/dismiss.rb +50 -0
  213. data/lib/dapp/kube/dapp/command/lint.rb +69 -0
  214. data/lib/dapp/kube/dapp/command/minikube_setup.rb +402 -0
  215. data/lib/dapp/kube/dapp/command/render.rb +54 -0
  216. data/lib/dapp/kube/dapp/command/ruby2go.rb +17 -0
  217. data/lib/dapp/kube/dapp/command/secret_edit.rb +21 -0
  218. data/lib/dapp/kube/dapp/command/secret_extract.rb +17 -0
  219. data/lib/dapp/kube/dapp/command/secret_generate.rb +21 -0
  220. data/lib/dapp/kube/dapp/command/secret_key_generate.rb +13 -0
  221. data/lib/dapp/kube/dapp/command/secret_regenerate.rb +13 -0
  222. data/lib/dapp/kube/dapp/command/value_get.rb +32 -0
  223. data/lib/dapp/kube/dapp/dapp.rb +26 -0
  224. data/lib/dapp/kube/error/default.rb +7 -0
  225. data/lib/dapp/kube/helm/release.rb +189 -0
  226. data/lib/dapp/kube/helm/values.rb +148 -0
  227. data/lib/dapp/kube/helm.rb +5 -0
  228. data/lib/dapp/kube/kubernetes/client/error.rb +43 -0
  229. data/lib/dapp/kube/kubernetes/client/resource/base.rb +33 -0
  230. data/lib/dapp/kube/kubernetes/client/resource/deployment.rb +11 -0
  231. data/lib/dapp/kube/kubernetes/client/resource/event.rb +8 -0
  232. data/lib/dapp/kube/kubernetes/client/resource/job.rb +27 -0
  233. data/lib/dapp/kube/kubernetes/client/resource/pod.rb +62 -0
  234. data/lib/dapp/kube/kubernetes/client/resource/replicaset.rb +8 -0
  235. data/lib/dapp/kube/kubernetes/client.rb +314 -0
  236. data/lib/dapp/kube/kubernetes/config.rb +132 -0
  237. data/lib/dapp/kube/kubernetes/error.rb +15 -0
  238. data/lib/dapp/kube/kubernetes/manager/base.rb +15 -0
  239. data/lib/dapp/kube/kubernetes/manager/container.rb +103 -0
  240. data/lib/dapp/kube/kubernetes/manager/deployment.rb +212 -0
  241. data/lib/dapp/kube/kubernetes/manager/job.rb +65 -0
  242. data/lib/dapp/kube/kubernetes/manager/pod.rb +69 -0
  243. data/lib/dapp/kube/kubernetes.rb +6 -0
  244. data/lib/dapp/kube/secret.rb +93 -0
  245. data/lib/dapp/kube.rb +1 -0
  246. data/lib/dapp/version.rb +2 -2
  247. data/lib/dapp.rb +155 -61
  248. metadata +208 -61
  249. data/lib/dapp/cli/base.rb +0 -63
  250. data/lib/dapp/config/base.rb +0 -54
  251. data/lib/dapp/config/error/config.rb +0 -7
  252. data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +0 -27
  253. data/lib/dapp/dimg/build/stage/ga_dependencies_base.rb +0 -20
  254. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +0 -22
  255. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +0 -22
  256. data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +0 -23
  257. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +0 -32
  258. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +0 -22
  259. data/lib/dapp/dimg/cli/base.rb +0 -16
  260. data/lib/dapp/dimg/cli/bp.rb +0 -37
  261. data/lib/dapp/dimg/cli/build.rb +0 -64
  262. data/lib/dapp/dimg/cli/dimg.rb +0 -30
  263. data/lib/dapp/dimg/cli/push.rb +0 -61
  264. data/lib/dapp/dimg/cli/stages/flush_local.rb +0 -23
  265. data/lib/dapp/dimg/cli/stages/flush_repo.rb +0 -24
  266. data/lib/dapp/dimg/cli/stages/pull.rb +0 -28
  267. data/lib/dapp/dimg/cli/stages/push.rb +0 -24
  268. data/lib/dapp/dimg/cli/stages.rb +0 -22
  269. data/lib/dapp/dimg/cli/tag.rb +0 -24
  270. data/lib/dapp/dimg/config/artifact_dimg.rb +0 -17
  271. data/lib/dapp/dimg/config/artifact_group.rb +0 -43
  272. data/lib/dapp/dimg/config/base.rb +0 -7
  273. data/lib/dapp/dimg/config/dimg/instance_methods.rb +0 -179
  274. data/lib/dapp/dimg/config/dimg/validation.rb +0 -126
  275. data/lib/dapp/dimg/config/dimg.rb +0 -24
  276. data/lib/dapp/dimg/config/dimg_group.rb +0 -61
  277. data/lib/dapp/dimg/config/dimg_group_base.rb +0 -54
  278. data/lib/dapp/dimg/config/dimg_group_main.rb +0 -22
  279. data/lib/dapp/dimg/dapp/command.rb +0 -21
  280. data/lib/dapp/dimg/dimg/tags.rb +0 -65
  281. data/lib/dapp/dimg/docker_registry/base/authorization.rb +0 -63
  282. data/lib/dapp/dimg/docker_registry/base/request.rb +0 -34
  283. data/lib/dapp/dimg/docker_registry/default.rb +0 -18
  284. data/lib/dapp/dimg/error/base.rb +0 -7
  285. data/lib/dapp/dimg/error/config.rb +0 -7
  286. data/lib/dapp/dimg/exception/introspect_image.rb +0 -7
  287. data/lib/dapp/dimg/image/docker.rb +0 -134
@@ -1,126 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module Config
4
- class Dimg < Base
5
- module Validation
6
- def validate!
7
- directives_validate!
8
- validate_scratch!
9
- validate_artifacts!
10
- validate_artifacts_artifacts!
11
- end
12
-
13
- protected
14
-
15
- def validate_scratch!
16
- if _docker._from.nil?
17
- validate_scratch_directives!
18
- validate_scratch_artifacts!
19
- else
20
- raise Error::Config, code: :stage_artifact_not_associated unless _import_artifact.empty?
21
- end
22
- end
23
-
24
- def directives_validate!
25
- passed_directives.each do |v|
26
- next if (value = instance_variable_get(v)).nil?
27
- Array(value).each do |elm|
28
- elm.validate! if elm.respond_to?(:validate!)
29
- end
30
- end
31
- end
32
-
33
- def validate_scratch_directives!
34
- directives = [[:_shell, :shell], [:_chef, :chef], [:_git_artifact, :git],
35
- [:_tmp_dir_mount, :mount], [:_build_dir_mount, :mount]]
36
- directives.each do |name, user_name|
37
- raise Error::Config,
38
- code: :scratch_unsupported_directive,
39
- data: { directive: user_name } unless public_send(name).empty?
40
- end
41
-
42
- docker_directives = [:_expose, :_env, :_cmd, :_onbuild, :_workdir, :_user, :_entrypoint]
43
- docker_directives.each do |directive|
44
- value = _docker.public_send(directive)
45
- raise Error::Config,
46
- code: :scratch_unsupported_directive,
47
- data: { directive: "docker.#{directive}" } unless value.nil? || value.empty?
48
- end
49
- end
50
-
51
- def validate_scratch_artifacts!
52
- raise Error::Config, code: :scratch_artifact_associated unless _associated_artifacts.empty?
53
- raise Error::Config, code: :scratch_artifact_required if _import_artifact.empty?
54
- _import_artifact.each do |artifact|
55
- raise Error::Config, code: :scratch_artifact_docker_from if artifact._config._docker._from.nil?
56
- end
57
- end
58
-
59
- def validate_artifacts_artifacts!
60
- _artifact.each { |artifact_dimg| artifact_dimg._config.validate! }
61
- end
62
-
63
- def validate_artifacts!
64
- artifacts = validate_artifact_format(validated_artifacts)
65
- loop do
66
- break if artifacts.empty?
67
- verifiable_artifact = artifacts.shift
68
- artifacts.select { |a| a[:to] == verifiable_artifact[:to] }.each do |artifact|
69
- next if verifiable_artifact[:index] == artifact[:index]
70
- validate_artifact!(verifiable_artifact, artifact)
71
- validate_artifact!(artifact, verifiable_artifact)
72
- end
73
- end
74
- end
75
-
76
- def validate_artifact_format(artifacts)
77
- artifacts.map do |a|
78
- path_format = proc { |path| File.expand_path(File.join('/', path, '/'))[1..-1] }
79
-
80
- path_format.call(a._to) =~ %r{^([^\/]*)\/?(.*)$}
81
- to = Regexp.last_match(1)
82
- include_paths = a._include_paths.dup
83
- include_paths << Regexp.last_match(2) unless Regexp.last_match(2).empty?
84
- exclude_paths = a._exclude_paths.dup
85
-
86
- {
87
- index: artifacts.index(a),
88
- to: to,
89
- include_paths: include_paths.map(&path_format),
90
- exclude_paths: exclude_paths.map(&path_format)
91
- }
92
- end
93
- end
94
-
95
- def validate_artifact!(verifiable_artifact, artifact)
96
- verifiable_artifact[:include_paths].each do |verifiable_path|
97
- potential_conflicts = artifact[:include_paths].select { |path| path.start_with?(verifiable_path) }
98
- validate_artifact_path!(verifiable_artifact, potential_conflicts)
99
- end.empty? && verifiable_artifact[:exclude_paths].empty? && raise(Error::Config, code: :artifact_conflict)
100
- validate_artifact_path!(verifiable_artifact, artifact[:include_paths]) if verifiable_artifact[:include_paths].empty?
101
- end
102
-
103
- def validate_artifact_path!(verifiable_artifact, potential_conflicts)
104
- potential_conflicts.all? do |path|
105
- loop do
106
- break if verifiable_artifact[:exclude_paths].include?(path) || ((path = File.dirname(path)) == '.')
107
- end
108
- verifiable_artifact[:exclude_paths].include?(path)
109
- end.tap { |res| res || raise(Error::Config, code: :artifact_conflict) }
110
- end
111
-
112
- def _associated_artifacts
113
- _artifact.select do |art|
114
- !(art._before.nil? && art._after.nil?)
115
- end
116
- end
117
-
118
- def validated_artifacts
119
- _artifact + _git_artifact._local + _git_artifact._remote
120
- end
121
- end # Validation
122
- # rubocop:enable Metrics/ModuleLength
123
- end # Dimg
124
- end # Config
125
- end # Dimg
126
- end # Dapp
@@ -1,24 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module Config
4
- class Dimg < Base
5
- include Validation
6
- include InstanceMethods
7
-
8
- attr_reader :_name
9
-
10
- def initialize(name, dapp:)
11
- self._name = name
12
- super(dapp: dapp)
13
- end
14
-
15
- def _name=(name)
16
- return if name.nil?
17
- reg = '^[[[:alnum:]]_.-]*$'
18
- raise Error::Config, code: :dimg_name_incorrect, data: { name: name, reg: reg } unless name =~ /#{reg}/
19
- @_name = name
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,61 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module Config
4
- class DimgGroup < DimgGroupBase
5
- include Dimg::InstanceMethods
6
-
7
- def chef(&blk)
8
- check_dimg_directive_order(:chef)
9
- super
10
- end
11
-
12
- def shell(&blk)
13
- check_dimg_directive_order(:shell)
14
- super
15
- end
16
-
17
- def docker(&blk)
18
- check_dimg_directive_order(:docker)
19
- super
20
- end
21
-
22
- def artifact(&blk)
23
- check_dimg_group_directive_order(:artifact)
24
- super
25
- end
26
-
27
- def git(url = nil, &blk)
28
- check_dimg_directive_order(:git)
29
- super
30
- end
31
-
32
- def mount(to, &blk)
33
- check_dimg_directive_order(:mount)
34
- super
35
- end
36
-
37
- protected
38
-
39
- def before_dimg_eval(dimg)
40
- pass_to_default(dimg)
41
- end
42
-
43
- def before_dimg_group_eval(dimg_group)
44
- pass_to_default(dimg_group)
45
- end
46
-
47
- def check_dimg_directive_order(directive)
48
- dapp.log_config_warning(desc: { code: 'wrong_using_base_directive',
49
- data: { directive: directive },
50
- context: 'warning' }) if _dimg.any? || _dimg_group.any? || _artifact.any?
51
- end
52
-
53
- def check_dimg_group_directive_order(directive)
54
- dapp.log_config_warning(desc: { code: 'wrong_using_directive',
55
- data: { directive: directive },
56
- context: 'warning' }) if _dimg.any? || _dimg_group.any?
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,54 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module Config
4
- class DimgGroupBase < Base
5
- attr_reader :_dimg_group
6
-
7
- def initialize(dapp:)
8
- @_dimg = []
9
- @_dimg_group = []
10
-
11
- super(dapp: dapp)
12
- end
13
-
14
- def dev_mode
15
- @_dev_mode = true
16
- end
17
-
18
- def dimg(name = nil, &blk)
19
- Config::Dimg.new(name, dapp: dapp).tap do |dimg|
20
- before_dimg_eval(dimg)
21
- dimg.instance_eval(&blk) if block_given?
22
- @_dimg << dimg
23
- end
24
- end
25
-
26
- def dimg_group(&blk)
27
- Config::DimgGroup.new(dapp: dapp).tap do |dimg_group|
28
- before_dimg_group_eval(dimg_group)
29
- dimg_group.instance_eval(&blk) if block_given?
30
- @_dimg_group << dimg_group
31
- end
32
- end
33
-
34
- def _dimg
35
- (@_dimg + @_dimg_group.map(&:_dimg)).flatten
36
- end
37
-
38
- protected
39
-
40
- def before_dimg_eval(dimg)
41
- pass_to_default(dimg)
42
- end
43
-
44
- def before_dimg_group_eval(dimg_group)
45
- pass_to_default(dimg_group)
46
- end
47
-
48
- def pass_to_default(obj)
49
- obj.instance_variable_set(:@_dev_mode, @_dev_mode)
50
- end
51
- end
52
- end
53
- end
54
- end
@@ -1,22 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module Config
4
- class DimgGroupMain < DimgGroupBase
5
- def dimg(name = nil, &blk)
6
- with_dimg_validation { super(name, &blk) }
7
- end
8
-
9
- def dimg_group(&blk)
10
- with_dimg_validation { super(&blk) }
11
- end
12
-
13
- protected
14
-
15
- def with_dimg_validation
16
- yield
17
- raise Error::Config, code: :dimg_name_required if _dimg.any? { |dimg| dimg._name.nil? } && _dimg.size > 1
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,21 +0,0 @@
1
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Common)
2
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Run)
3
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Build)
4
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Bp)
5
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Push)
6
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Spush)
7
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Tag)
8
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::List)
9
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Stages::CleanupLocal)
10
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Stages::CleanupRepo)
11
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Stages::FlushLocal)
12
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Stages::FlushRepo)
13
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Stages::Push)
14
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Stages::Pull)
15
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Stages::Common)
16
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Cleanup)
17
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::Mrproper)
18
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::StageImage)
19
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::BuildContext::Import)
20
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::BuildContext::Export)
21
- ::Dapp::Dapp.send(:include, Dapp::Dimg::Dapp::Command::BuildContext::Common)
@@ -1,65 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- class Dimg
4
- module Tags
5
- protected
6
-
7
- def git_repo
8
- @git_repo ||= GitRepo::Own.new(self)
9
- end
10
-
11
- def tags
12
- tags = simple_tags + branch_tags + commit_tags + build_tags + ci_tags
13
- tags << :latest if tags.empty?
14
- tags
15
- end
16
-
17
- def simple_tags
18
- dapp.cli_options[:tag]
19
- end
20
-
21
- def branch_tags
22
- return [] unless dapp.cli_options[:tag_branch]
23
- raise Error::Dimg, code: :git_branch_without_name if (branch = git_repo.branch) == 'HEAD'
24
- [branch]
25
- end
26
-
27
- def commit_tags
28
- return [] unless dapp.cli_options[:tag_commit]
29
- commit = git_repo.latest_commit
30
- [commit]
31
- end
32
-
33
- def build_tags
34
- return [] unless dapp.cli_options[:tag_build_id]
35
-
36
- if ENV['GITLAB_CI']
37
- build_id = ENV['CI_BUILD_ID']
38
- elsif ENV['TRAVIS']
39
- build_id = ENV['TRAVIS_BUILD_NUMBER']
40
- else
41
- raise Error::Dimg, code: :ci_environment_required
42
- end
43
-
44
- [build_id]
45
- end
46
-
47
- def ci_tags
48
- return [] unless dapp.cli_options[:tag_ci]
49
-
50
- if ENV['GITLAB_CI']
51
- branch = ENV['CI_BUILD_REF_NAME']
52
- tag = ENV['CI_BUILD_TAG']
53
- elsif ENV['TRAVIS']
54
- branch = ENV['TRAVIS_BRANCH']
55
- tag = ENV['TRAVIS_TAG']
56
- else
57
- raise Error::Dimg, code: :ci_environment_required
58
- end
59
-
60
- [branch, tag].compact
61
- end
62
- end # Tags
63
- end # Mod
64
- end # Dimg
65
- end # Dapp
@@ -1,63 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module DockerRegistry
4
- class Base
5
- module Authorization
6
- def authorization_options(url)
7
- @authorization_options ||= begin
8
- case authenticate_header = raw_request(url).headers['Www-Authenticate']
9
- when /Bearer/ then { headers: { Authorization: "Bearer #{authorization_token(authenticate_header)}" } }
10
- when /Basic/ then { headers: { Authorization: "Basic #{authorization_auth}" } }
11
- when nil then {}
12
- else raise Error::Registry, code: :authenticate_type_not_supported, data: { registry: api_url }
13
- end
14
- end
15
- end
16
-
17
- def authorization_token(authenticate_header)
18
- options = parse_authenticate_header(authenticate_header)
19
- realm = options.delete(:realm)
20
- begin
21
- response = raw_request(realm, headers: { Authorization: "Basic #{authorization_auth}" }, query: options, expects: [200])
22
- rescue Error::Registry
23
- raise unless (response = raw_request(realm, query: options)).status == 200
24
- end
25
- JSON.load(response.body)['token']
26
- end
27
-
28
- def parse_authenticate_header(header)
29
- [:realm, :service, :scope].map do |option|
30
- /#{option}="([[^"].]*)/ =~ header
31
- next unless Regexp.last_match(1)
32
- [option, Regexp.last_match(1)]
33
- end.compact.to_h
34
- end
35
-
36
- def authorization_auth
37
- auths = auths_section_from_docker_config
38
- r = repo
39
- loop do
40
- break unless r.include?('/') && !auths.keys.any? { |auth| auth.start_with?(r) }
41
- r = chomp_name(r)
42
- end
43
- credential = (auths[r] || auths.find { |repo, _| repo == r })
44
- user_not_authorized! if credential.nil?
45
- credential['auth']
46
- end
47
-
48
- def auths_section_from_docker_config
49
- file = Pathname(File.join(Dir.home, '.docker', 'config.json'))
50
- user_not_authorized! unless file.exist?
51
- JSON.load(file.read)['auths'].tap { |auths| user_not_authorized! if auths.nil? }
52
- end
53
-
54
- private
55
-
56
- def chomp_name(r)
57
- r.split('/')[0..-2].join('/')
58
- end
59
- end
60
- end # Base
61
- end # DockerRegistry
62
- end # Dimg
63
- end # Dapp
@@ -1,34 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module DockerRegistry
4
- class Base
5
- module Request
6
- def self.included(base)
7
- base.extend(self)
8
- end
9
-
10
- def request(url, **options)
11
- raw_request(url, options.in_depth_merge(authorization_options(url)))
12
- end
13
-
14
- def raw_request(url, **options)
15
- Excon.new(url).request(default_request_options.in_depth_merge(options))
16
- end
17
-
18
- def url_available?(url)
19
- raw_request(url, expects: [200])
20
- true
21
- rescue Excon::Error
22
- false
23
- end
24
-
25
- protected
26
-
27
- def default_request_options
28
- { method: :get, omit_default_port: true }
29
- end
30
- end
31
- end # Base
32
- end # DockerRegistry
33
- end # Dimg
34
- end # Dapp
@@ -1,18 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module DockerRegistry
4
- class Default < Base
5
- DEFAULT_HOSTNAME_URL = 'https://registry.hub.docker.com'.freeze
6
-
7
- def initialize(repo, repo_suffix)
8
- super(repo, DEFAULT_HOSTNAME_URL, repo_suffix)
9
- end
10
-
11
- def repo_suffix=(val)
12
- val = "library/#{val}" if val.split('/').one?
13
- super(val)
14
- end
15
- end
16
- end
17
- end # Dimg
18
- end # Dapp
@@ -1,7 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module Error
4
- class Base < ::Dapp::Error::Base; end
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module Error
4
- class Config < ::Dapp::Config::Error::Config; end
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module Exception
4
- class IntrospectImage < Base; end
5
- end
6
- end
7
- end
@@ -1,134 +0,0 @@
1
- module Dapp
2
- module Dimg
3
- module Image
4
- class Docker
5
- attr_reader :from
6
- attr_reader :name
7
- attr_reader :dapp
8
-
9
- def self.image_by_name(name:, **kwargs)
10
- (@images ||= {})[name] ||= new(name: name, **kwargs)
11
- end
12
-
13
- def initialize(name:, dapp:, from: nil)
14
- @from = from
15
- @name = name
16
- @dapp = dapp
17
- end
18
-
19
- def id
20
- cache[:id]
21
- end
22
-
23
- def untag!
24
- raise Error::Build, code: :image_already_untagged, data: { name: name } unless tagged?
25
- dapp.shellout!("docker rmi #{name}")
26
- cache_reset
27
- end
28
-
29
- def push!
30
- raise Error::Build, code: :image_not_exist, data: { name: name } unless tagged?
31
- dapp.log_secondary_process(dapp.t(code: 'process.image_push', data: { name: name })) do
32
- dapp.shellout!("docker push #{name}", log_verbose: true)
33
- end
34
- end
35
-
36
- def pull!
37
- return if tagged?
38
- dapp.log_secondary_process(dapp.t(code: 'process.image_pull', data: { name: name })) do
39
- dapp.shellout!("docker pull #{name}", log_verbose: true)
40
- end
41
- cache_reset
42
- end
43
-
44
- def tagged?
45
- !!id
46
- end
47
-
48
- def created_at
49
- raise Error::Build, code: :image_not_exist, data: { name: name } unless tagged?
50
- cache[:created_at]
51
- end
52
-
53
- def size
54
- raise Error::Build, code: :image_not_exist, data: { name: name } unless tagged?
55
- cache[:size]
56
- end
57
-
58
- def self.image_config_option(image_id:, option:)
59
- output = ::Dapp::Dapp.shellout!("docker inspect --format='{{json .Config.#{option.to_s.capitalize}}}' #{image_id}").stdout.strip
60
- output == 'null' ? [] : JSON.parse(output)
61
- end
62
-
63
- def cache_reset
64
- self.class.cache_reset(name)
65
- end
66
-
67
- protected
68
-
69
- def cache
70
- self.class.cache[name.to_s] || {}
71
- end
72
-
73
- class << self
74
- def image_name_format
75
- separator = '[_.]|__|[-]*'
76
- tag = "[[:alnum:]][[[:alnum:]]#{separator}]{0,127}"
77
- "#{DockerRegistry.repo_name_format}(:(?<tag>#{tag}))?"
78
- end
79
-
80
- def image_name?(name)
81
- !(/^#{image_name_format}$/ =~ name).nil?
82
- end
83
-
84
- def tag!(id:, tag:)
85
- ::Dapp::Dapp.shellout!("docker tag #{id} #{tag}")
86
- cache_reset
87
- end
88
-
89
- def save!(image_or_images, file_path)
90
- images = Array(image_or_images).join(' ')
91
- ::Dapp::Dapp.shellout!("docker save -o #{file_path} #{images}", log_verbose: true)
92
- end
93
-
94
- def load!(file_path)
95
- ::Dapp::Dapp.shellout!("docker load -i #{file_path}", log_verbose: true)
96
- end
97
-
98
- def cache
99
- @cache ||= (@cache = {}).tap { cache_reset }
100
- end
101
-
102
- def cache_reset(name = '')
103
- cache.delete(name)
104
- ::Dapp::Dapp.shellout!("docker images --format='{{.Repository}}:{{.Tag}};{{.ID}};{{.CreatedAt}};{{.Size}}' --no-trunc #{name}")
105
- .stdout
106
- .lines
107
- .each do |l|
108
- name, id, created_at, size_field = l.split(';').map(&:strip)
109
- name = name.reverse.chomp('docker.io/'.reverse).reverse
110
- size = begin
111
- match = size_field.match(/^(\d+(\.\d+)?)\ ?(b|kb|mb|gb|tb)$/i)
112
- raise Error::Build, code: :unsupported_docker_image_size_format, data: {value: size_field} unless match and match[1] and match[3]
113
-
114
- number = match[1].to_f
115
- unit = match[3].downcase
116
-
117
- coef = case unit
118
- when 'b' then 0
119
- when 'kb' then 1
120
- when 'mb' then 2
121
- when 'gb' then 3
122
- when 'tb' then 4
123
- end
124
-
125
- number * (1000**coef)
126
- end
127
- cache[name] = { id: id, created_at: created_at, size: size }
128
- end
129
- end
130
- end
131
- end # Docker
132
- end # Image
133
- end # Dimg
134
- end # Dapp