dapp 0.10.2 → 0.36.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. checksums.yaml +5 -5
  2. data/bin/dapp +77 -15
  3. data/config/en/common.yml +20 -11
  4. data/config/en/net_status.yml +108 -27
  5. data/lib/dapp/cli/cli.rb +1 -0
  6. data/lib/dapp/cli/command/base.rb +111 -0
  7. data/lib/dapp/cli/command/sample/base.rb +28 -0
  8. data/lib/dapp/cli/command/sample/create.rb +24 -0
  9. data/lib/dapp/cli/command/sample/list.rb +25 -0
  10. data/lib/dapp/cli/command/sample.rb +20 -0
  11. data/lib/dapp/cli/command/slug.rb +26 -0
  12. data/lib/dapp/cli/command/update.rb +65 -0
  13. data/lib/dapp/cli/options/ssh.rb +18 -0
  14. data/lib/dapp/cli/options/tag.rb +51 -0
  15. data/lib/dapp/cli.rb +11 -3
  16. data/lib/dapp/config/config.rb +21 -0
  17. data/lib/dapp/config/directive/base.rb +100 -3
  18. data/lib/dapp/core_ext/hash.rb +14 -0
  19. data/lib/dapp/core_ext/pathname.rb +6 -4
  20. data/lib/dapp/dapp/chef.rb +1 -9
  21. data/lib/dapp/dapp/command/common.rb +24 -0
  22. data/lib/dapp/dapp/command/sample/common.rb +54 -0
  23. data/lib/dapp/dapp/command/sample/create.rb +57 -0
  24. data/lib/dapp/dapp/command/sample/list.rb +13 -0
  25. data/lib/dapp/dapp/command/slug.rb +11 -0
  26. data/lib/dapp/dapp/dapp_config.rb +85 -0
  27. data/lib/dapp/dapp/dappfile.rb +108 -27
  28. data/lib/dapp/dapp/deps/base.rb +9 -32
  29. data/lib/dapp/dapp/deps/common.rb +26 -0
  30. data/lib/dapp/dapp/deps/gitartifact.rb +2 -20
  31. data/lib/dapp/dapp/deps/toolchain.rb +11 -0
  32. data/lib/dapp/dapp/git_artifact.rb +6 -4
  33. data/lib/dapp/dapp/lock.rb +6 -5
  34. data/lib/dapp/dapp/logging/base.rb +32 -20
  35. data/lib/dapp/dapp/logging/i18n.rb +5 -1
  36. data/lib/dapp/dapp/logging/process.rb +6 -6
  37. data/lib/dapp/dapp/option_tags.rb +98 -0
  38. data/lib/dapp/dapp/ruby2go.rb +130 -0
  39. data/lib/dapp/dapp/sentry.rb +97 -0
  40. data/lib/dapp/dapp/shellout/base.rb +26 -18
  41. data/lib/dapp/dapp/shellout/streaming.rb +2 -2
  42. data/lib/dapp/dapp/slug.rb +12 -0
  43. data/lib/dapp/dapp/ssh_agent.rb +25 -7
  44. data/lib/dapp/dapp.rb +192 -41
  45. data/lib/dapp/deployment.rb +1 -0
  46. data/lib/dapp/dimg/artifact.rb +12 -4
  47. data/lib/dapp/dimg/build/stage/artifact_base.rb +26 -30
  48. data/lib/dapp/dimg/build/stage/artifact_default.rb +50 -28
  49. data/lib/dapp/dimg/build/stage/base.rb +187 -52
  50. data/lib/dapp/dimg/build/stage/before_install.rb +4 -15
  51. data/lib/dapp/dimg/build/stage/before_install_artifact.rb +4 -0
  52. data/lib/dapp/dimg/build/stage/before_setup.rb +1 -20
  53. data/lib/dapp/dimg/build/stage/build_artifact.rb +1 -20
  54. data/lib/dapp/dimg/build/stage/docker_instructions.rb +5 -4
  55. data/lib/dapp/dimg/build/stage/from.rb +62 -9
  56. data/lib/dapp/dimg/build/stage/ga_archive.rb +14 -1
  57. data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +1 -5
  58. data/lib/dapp/dimg/build/stage/ga_base.rb +5 -35
  59. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +15 -34
  60. data/lib/dapp/dimg/build/stage/ga_related_base.rb +21 -0
  61. data/lib/dapp/dimg/build/stage/import_artifact.rb +22 -11
  62. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch.rb +6 -2
  63. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb +6 -2
  64. data/lib/dapp/dimg/build/stage/install/install.rb +1 -19
  65. data/lib/dapp/dimg/build/stage/instructions.rb +27 -0
  66. data/lib/dapp/dimg/build/stage/mod/group.rb +19 -7
  67. data/lib/dapp/dimg/build/stage/mod/logging.rb +15 -19
  68. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb +24 -1
  69. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch.rb +6 -2
  70. data/lib/dapp/dimg/build/stage/setup/setup.rb +1 -19
  71. data/lib/dapp/dimg/builder/ansible.rb +5 -0
  72. data/lib/dapp/dimg/builder/chef/cookbook.rb +8 -8
  73. data/lib/dapp/dimg/builder/chef.rb +29 -16
  74. data/lib/dapp/dimg/builder/none.rb +1 -34
  75. data/lib/dapp/dimg/builder/ruby2go.rb +57 -0
  76. data/lib/dapp/dimg/builder/shell.rb +1 -20
  77. data/lib/dapp/dimg/cli/cli.rb +2 -1
  78. data/lib/dapp/dimg/cli/command/base.rb +24 -0
  79. data/lib/dapp/dimg/cli/command/dimg/bp.rb +60 -0
  80. data/lib/dapp/dimg/cli/command/dimg/build.rb +43 -0
  81. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/export.rb +9 -4
  82. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/import.rb +4 -4
  83. data/lib/dapp/dimg/cli/{build_context.rb → command/dimg/build_context.rb} +5 -5
  84. data/lib/dapp/dimg/cli/{cleanup.rb → command/dimg/cleanup.rb} +4 -6
  85. data/lib/dapp/dimg/cli/command/dimg/cleanup_repo.rb +47 -0
  86. data/lib/dapp/dimg/cli/command/dimg/flush_local.rb +24 -0
  87. data/lib/dapp/dimg/cli/command/dimg/flush_repo.rb +36 -0
  88. data/lib/dapp/dimg/cli/{list.rb → command/dimg/list.rb} +6 -3
  89. data/lib/dapp/dimg/cli/{mrproper.rb → command/dimg/mrproper.rb} +4 -4
  90. data/lib/dapp/dimg/cli/command/dimg/push.rb +39 -0
  91. data/lib/dapp/dimg/cli/{run.rb → command/dimg/run.rb} +30 -15
  92. data/lib/dapp/dimg/cli/{spush.rb → command/dimg/spush.rb} +4 -4
  93. data/lib/dapp/dimg/cli/{stage_image.rb → command/dimg/stage_image.rb} +12 -3
  94. data/lib/dapp/dimg/cli/command/dimg/stages/base.rb +13 -0
  95. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_local.rb +13 -9
  96. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_repo.rb +6 -8
  97. data/lib/dapp/dimg/cli/command/dimg/stages/flush_local.rb +21 -0
  98. data/lib/dapp/dimg/cli/command/dimg/stages/flush_repo.rb +28 -0
  99. data/lib/dapp/dimg/cli/command/dimg/stages/pull.rb +34 -0
  100. data/lib/dapp/dimg/cli/command/dimg/stages/push.rb +30 -0
  101. data/lib/dapp/dimg/cli/command/dimg/stages.rb +22 -0
  102. data/lib/dapp/dimg/cli/command/dimg/tag.rb +24 -0
  103. data/lib/dapp/dimg/cli/command/dimg.rb +31 -0
  104. data/lib/dapp/dimg/cli/options/introspection.rb +45 -0
  105. data/lib/dapp/dimg/config/config.rb +24 -0
  106. data/lib/dapp/dimg/config/directive/artifact.rb +13 -15
  107. data/lib/dapp/dimg/config/directive/artifact_base.rb +13 -8
  108. data/lib/dapp/dimg/config/directive/artifact_dimg.rb +12 -0
  109. data/lib/dapp/dimg/config/directive/artifact_group.rb +60 -0
  110. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +203 -0
  111. data/lib/dapp/dimg/config/directive/dimg/validation.rb +217 -0
  112. data/lib/dapp/dimg/config/directive/dimg.rb +36 -0
  113. data/lib/dapp/dimg/config/directive/dimg_group.rb +73 -0
  114. data/lib/dapp/dimg/config/directive/dimg_group_base.rb +46 -0
  115. data/lib/dapp/dimg/config/directive/docker/artifact.rb +5 -0
  116. data/lib/dapp/dimg/config/directive/docker/base.rb +2 -3
  117. data/lib/dapp/dimg/config/directive/docker/dimg.rb +4 -4
  118. data/lib/dapp/dimg/config/directive/git_artifact_local.rb +24 -5
  119. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +23 -12
  120. data/lib/dapp/dimg/config/directive/mount.rb +11 -3
  121. data/lib/dapp/dimg/config/directive/shell/dimg.rb +2 -2
  122. data/lib/dapp/dimg/dapp/command/bp.rb +3 -5
  123. data/lib/dapp/dimg/dapp/command/build.rb +4 -6
  124. data/lib/dapp/dimg/dapp/command/build_context/common.rb +2 -2
  125. data/lib/dapp/dimg/dapp/command/build_context/export.rb +14 -14
  126. data/lib/dapp/dimg/dapp/command/build_context/import.rb +28 -23
  127. data/lib/dapp/dimg/dapp/command/cleanup.rb +4 -11
  128. data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +143 -0
  129. data/lib/dapp/dimg/dapp/command/common.rb +148 -38
  130. data/lib/dapp/dimg/dapp/command/flush_local.rb +25 -0
  131. data/lib/dapp/dimg/dapp/command/flush_repo.rb +25 -0
  132. data/lib/dapp/dimg/dapp/command/list.rb +1 -1
  133. data/lib/dapp/dimg/dapp/command/mrproper.rb +16 -63
  134. data/lib/dapp/dimg/dapp/command/push.rb +11 -16
  135. data/lib/dapp/dimg/dapp/command/ruby2go_cleanup.rb +48 -0
  136. data/lib/dapp/dimg/dapp/command/run.rb +4 -4
  137. data/lib/dapp/dimg/dapp/command/spush.rb +4 -5
  138. data/lib/dapp/dimg/dapp/command/stage_image.rb +2 -2
  139. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +13 -115
  140. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +23 -102
  141. data/lib/dapp/dimg/dapp/command/stages/common.rb +57 -39
  142. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +13 -7
  143. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +14 -8
  144. data/lib/dapp/dimg/dapp/command/stages/pull.rb +4 -13
  145. data/lib/dapp/dimg/dapp/command/stages/push.rb +4 -9
  146. data/lib/dapp/dimg/dapp/command/tag.rb +4 -6
  147. data/lib/dapp/dimg/dapp/config_artifact_group.rb +20 -0
  148. data/lib/dapp/dimg/dapp/dapp.rb +40 -0
  149. data/lib/dapp/dimg/dapp/dappfile.rb +43 -0
  150. data/lib/dapp/dimg/dapp/dimg.rb +41 -0
  151. data/lib/dapp/dimg/dimg/git_artifact.rb +25 -11
  152. data/lib/dapp/dimg/dimg/path.rb +7 -9
  153. data/lib/dapp/dimg/dimg/stages.rb +27 -15
  154. data/lib/dapp/dimg/dimg.rb +172 -69
  155. data/lib/dapp/dimg/docker_registry/base.rb +31 -74
  156. data/lib/dapp/dimg/docker_registry/dimg.rb +55 -0
  157. data/lib/dapp/dimg/docker_registry.rb +5 -23
  158. data/lib/dapp/dimg/error/build.rb +1 -1
  159. data/lib/dapp/dimg/error/chef.rb +1 -5
  160. data/lib/dapp/dimg/error/{command.rb → default.rb} +1 -1
  161. data/lib/dapp/dimg/error/dimg.rb +1 -1
  162. data/lib/dapp/dimg/error/lock.rb +1 -1
  163. data/lib/dapp/dimg/error/registry.rb +1 -1
  164. data/lib/dapp/dimg/error/rugged.rb +1 -1
  165. data/lib/dapp/dimg/error/tar_writer.rb +1 -1
  166. data/lib/dapp/dimg/git_artifact.rb +195 -179
  167. data/lib/dapp/dimg/git_repo/base.rb +49 -45
  168. data/lib/dapp/dimg/git_repo/local.rb +45 -0
  169. data/lib/dapp/dimg/git_repo/own.rb +3 -31
  170. data/lib/dapp/dimg/git_repo/remote.rb +65 -26
  171. data/lib/dapp/dimg/image/argument.rb +15 -50
  172. data/lib/dapp/dimg/image/dimg.rb +15 -0
  173. data/lib/dapp/dimg/image/scratch.rb +35 -9
  174. data/lib/dapp/dimg/image/stage.rb +223 -44
  175. data/lib/dapp/dimg/lock/file.rb +4 -4
  176. data/lib/dapp/downloader.rb +117 -0
  177. data/lib/dapp/error/base.rb +1 -5
  178. data/lib/dapp/error/command.rb +5 -0
  179. data/lib/dapp/error/config.rb +5 -0
  180. data/lib/dapp/error/dapp.rb +1 -1
  181. data/lib/dapp/error/dappfile.rb +1 -1
  182. data/lib/dapp/error/default.rb +11 -0
  183. data/lib/dapp/error/mod/user.rb +11 -0
  184. data/lib/dapp/error/shellout.rb +1 -1
  185. data/lib/dapp/exception/base.rb +1 -1
  186. data/lib/dapp/helper/case_conversion.rb +17 -0
  187. data/lib/dapp/helper/cli.rb +18 -7
  188. data/lib/dapp/helper/net_status.rb +5 -1
  189. data/lib/dapp/helper/sha256.rb +1 -1
  190. data/lib/dapp/helper/tar.rb +31 -0
  191. data/lib/dapp/helper/trivia.rb +40 -1
  192. data/lib/dapp/helper/url.rb +23 -0
  193. data/lib/dapp/helper/yaml.rb +24 -0
  194. data/lib/dapp/kube/cli/cli.rb +1 -0
  195. data/lib/dapp/kube/cli/command/base.rb +14 -0
  196. data/lib/dapp/kube/cli/command/kube/chart_create.rb +19 -0
  197. data/lib/dapp/kube/cli/command/kube/deploy.rb +80 -0
  198. data/lib/dapp/kube/cli/command/kube/dismiss.rb +31 -0
  199. data/lib/dapp/kube/cli/command/kube/lint.rb +53 -0
  200. data/lib/dapp/kube/cli/command/kube/minikube_setup.rb +19 -0
  201. data/lib/dapp/kube/cli/command/kube/render.rb +63 -0
  202. data/lib/dapp/kube/cli/command/kube/secret_edit.rb +30 -0
  203. data/lib/dapp/kube/cli/command/kube/secret_extract.rb +39 -0
  204. data/lib/dapp/kube/cli/command/kube/secret_generate.rb +34 -0
  205. data/lib/dapp/kube/cli/command/kube/secret_key_generate.rb +16 -0
  206. data/lib/dapp/kube/cli/command/kube/secret_regenerate.rb +29 -0
  207. data/lib/dapp/kube/cli/command/kube/value_get.rb +47 -0
  208. data/lib/dapp/kube/cli/command/kube.rb +28 -0
  209. data/lib/dapp/kube/dapp/command/chart_create.rb +103 -0
  210. data/lib/dapp/kube/dapp/command/common.rb +379 -0
  211. data/lib/dapp/kube/dapp/command/deploy.rb +351 -0
  212. data/lib/dapp/kube/dapp/command/dismiss.rb +50 -0
  213. data/lib/dapp/kube/dapp/command/lint.rb +69 -0
  214. data/lib/dapp/kube/dapp/command/minikube_setup.rb +402 -0
  215. data/lib/dapp/kube/dapp/command/render.rb +54 -0
  216. data/lib/dapp/kube/dapp/command/ruby2go.rb +17 -0
  217. data/lib/dapp/kube/dapp/command/secret_edit.rb +21 -0
  218. data/lib/dapp/kube/dapp/command/secret_extract.rb +17 -0
  219. data/lib/dapp/kube/dapp/command/secret_generate.rb +21 -0
  220. data/lib/dapp/kube/dapp/command/secret_key_generate.rb +13 -0
  221. data/lib/dapp/kube/dapp/command/secret_regenerate.rb +13 -0
  222. data/lib/dapp/kube/dapp/command/value_get.rb +32 -0
  223. data/lib/dapp/kube/dapp/dapp.rb +26 -0
  224. data/lib/dapp/kube/error/default.rb +7 -0
  225. data/lib/dapp/kube/helm/release.rb +189 -0
  226. data/lib/dapp/kube/helm/values.rb +148 -0
  227. data/lib/dapp/kube/helm.rb +5 -0
  228. data/lib/dapp/kube/kubernetes/client/error.rb +43 -0
  229. data/lib/dapp/kube/kubernetes/client/resource/base.rb +33 -0
  230. data/lib/dapp/kube/kubernetes/client/resource/deployment.rb +11 -0
  231. data/lib/dapp/kube/kubernetes/client/resource/event.rb +8 -0
  232. data/lib/dapp/kube/kubernetes/client/resource/job.rb +27 -0
  233. data/lib/dapp/kube/kubernetes/client/resource/pod.rb +62 -0
  234. data/lib/dapp/kube/kubernetes/client/resource/replicaset.rb +8 -0
  235. data/lib/dapp/kube/kubernetes/client.rb +314 -0
  236. data/lib/dapp/kube/kubernetes/config.rb +132 -0
  237. data/lib/dapp/kube/kubernetes/error.rb +15 -0
  238. data/lib/dapp/kube/kubernetes/manager/base.rb +15 -0
  239. data/lib/dapp/kube/kubernetes/manager/container.rb +103 -0
  240. data/lib/dapp/kube/kubernetes/manager/deployment.rb +212 -0
  241. data/lib/dapp/kube/kubernetes/manager/job.rb +65 -0
  242. data/lib/dapp/kube/kubernetes/manager/pod.rb +69 -0
  243. data/lib/dapp/kube/kubernetes.rb +6 -0
  244. data/lib/dapp/kube/secret.rb +93 -0
  245. data/lib/dapp/kube.rb +1 -0
  246. data/lib/dapp/version.rb +2 -2
  247. data/lib/dapp.rb +155 -61
  248. metadata +208 -61
  249. data/lib/dapp/cli/base.rb +0 -63
  250. data/lib/dapp/config/base.rb +0 -54
  251. data/lib/dapp/config/error/config.rb +0 -7
  252. data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +0 -27
  253. data/lib/dapp/dimg/build/stage/ga_dependencies_base.rb +0 -20
  254. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +0 -22
  255. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +0 -22
  256. data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +0 -23
  257. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +0 -32
  258. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +0 -22
  259. data/lib/dapp/dimg/cli/base.rb +0 -16
  260. data/lib/dapp/dimg/cli/bp.rb +0 -37
  261. data/lib/dapp/dimg/cli/build.rb +0 -64
  262. data/lib/dapp/dimg/cli/dimg.rb +0 -30
  263. data/lib/dapp/dimg/cli/push.rb +0 -61
  264. data/lib/dapp/dimg/cli/stages/flush_local.rb +0 -23
  265. data/lib/dapp/dimg/cli/stages/flush_repo.rb +0 -24
  266. data/lib/dapp/dimg/cli/stages/pull.rb +0 -28
  267. data/lib/dapp/dimg/cli/stages/push.rb +0 -24
  268. data/lib/dapp/dimg/cli/stages.rb +0 -22
  269. data/lib/dapp/dimg/cli/tag.rb +0 -24
  270. data/lib/dapp/dimg/config/artifact_dimg.rb +0 -17
  271. data/lib/dapp/dimg/config/artifact_group.rb +0 -43
  272. data/lib/dapp/dimg/config/base.rb +0 -7
  273. data/lib/dapp/dimg/config/dimg/instance_methods.rb +0 -179
  274. data/lib/dapp/dimg/config/dimg/validation.rb +0 -126
  275. data/lib/dapp/dimg/config/dimg.rb +0 -24
  276. data/lib/dapp/dimg/config/dimg_group.rb +0 -61
  277. data/lib/dapp/dimg/config/dimg_group_base.rb +0 -54
  278. data/lib/dapp/dimg/config/dimg_group_main.rb +0 -22
  279. data/lib/dapp/dimg/dapp/command.rb +0 -21
  280. data/lib/dapp/dimg/dimg/tags.rb +0 -65
  281. data/lib/dapp/dimg/docker_registry/base/authorization.rb +0 -63
  282. data/lib/dapp/dimg/docker_registry/base/request.rb +0 -34
  283. data/lib/dapp/dimg/docker_registry/default.rb +0 -18
  284. data/lib/dapp/dimg/error/base.rb +0 -7
  285. data/lib/dapp/dimg/error/config.rb +0 -7
  286. data/lib/dapp/dimg/exception/introspect_image.rb +0 -7
  287. data/lib/dapp/dimg/image/docker.rb +0 -134
@@ -0,0 +1,65 @@
1
+ module Dapp
2
+ class CLI
3
+ module Command
4
+ class Update < ::Dapp::CLI
5
+ banner <<BANNER.freeze
6
+ Usage:
7
+
8
+ dapp update
9
+
10
+ Options:
11
+ BANNER
12
+
13
+ def run(argv = ARGV)
14
+ self.class.parse_options(self, argv)
15
+
16
+ spec = Gem::Specification.find do |s|
17
+ File.fnmatch?(File.join(s.full_gem_path, '**', '*'), __FILE__, File::FNM_PATHNAME)
18
+ end
19
+ unless (latest_version = latest_beta_version(spec)).nil?
20
+ try_lock do
21
+ Gem.install(spec.name, latest_version)
22
+ end
23
+ end
24
+ rescue Gem::FilePermissionError => e
25
+ raise Errno::EACCES, e.message
26
+ end
27
+
28
+ def latest_beta_version(current_spec)
29
+ minor_version = current_spec.version.approximate_recommendation
30
+ url = "https://rubygems.org/api/v1/versions/#{current_spec.name}.json"
31
+ response = Excon.get(url)
32
+ if response.status == 200
33
+ JSON.parse(response.body)
34
+ .reduce([]) { |versions, spec| versions << Gem::Version.new(spec['number']) }
35
+ .reject { |spec_version| minor_version != spec_version.approximate_recommendation || current_spec.version >= spec_version }
36
+ .first
37
+ else
38
+ warn "Cannot get `#{url}`: got bad http status `#{response.status}`"
39
+ end
40
+ end
41
+
42
+ def try_lock
43
+ old_umask = File.umask(0)
44
+ file = nil
45
+
46
+ begin
47
+ begin
48
+ file = ::File.open('/tmp/dapp-update-running.lock', ::File::RDWR | ::File::CREAT, 0777)
49
+ ensure
50
+ File.umask(old_umask)
51
+ end
52
+
53
+ if file.flock(::File::LOCK_EX | ::File::LOCK_NB)
54
+ yield
55
+ else
56
+ puts 'There are other active dapp update process, exiting without update'
57
+ end
58
+ ensure
59
+ file.close unless file.nil?
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,18 @@
1
+ module Dapp
2
+ class CLI
3
+ module Options
4
+ module Ssh
5
+ def self.extended(klass)
6
+ klass.class_eval do
7
+ option :ssh_key,
8
+ long: '--ssh-key SSH_KEY',
9
+ description: ['Enable only specified ssh keys ',
10
+ '(use system ssh-agent by default)'].join,
11
+ default: nil,
12
+ proc: ->(v) { composite_options(:ssh_key) << v }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,51 @@
1
+ module Dapp
2
+ class CLI
3
+ module Options
4
+ module Tag
5
+ def self.extended(klass)
6
+ klass.class_eval do
7
+ "Add tag (can be used one or more times), specified text will be slugified".tap do |desc|
8
+ option :tag,
9
+ long: '--tag TAG',
10
+ description: desc,
11
+ default: [],
12
+ proc: proc { |v| composite_options(:tags) << v }
13
+
14
+ option :tag_slug,
15
+ long: '--tag-slug TAG',
16
+ description: desc,
17
+ default: [],
18
+ proc: proc { |v| composite_options(:slug_tags) << v }
19
+ end
20
+
21
+ option :tag_plain,
22
+ long: '--tag-plain TAG',
23
+ description: "Add tag (can be used one or more times)",
24
+ default: [],
25
+ proc: proc { |v| composite_options(:plain_tags) << v }
26
+
27
+ option :tag_branch,
28
+ long: '--tag-branch',
29
+ description: 'Tag by git branch',
30
+ boolean: true
31
+
32
+ option :tag_build_id,
33
+ long: '--tag-build-id',
34
+ description: 'Tag by CI build id',
35
+ boolean: true
36
+
37
+ option :tag_ci,
38
+ long: '--tag-ci',
39
+ description: 'Tag by CI branch and tag',
40
+ boolean: true
41
+
42
+ option :tag_commit,
43
+ long: '--tag-commit',
44
+ description: 'Tag by git commit',
45
+ boolean: true
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
data/lib/dapp/cli.rb CHANGED
@@ -5,14 +5,18 @@ module Dapp
5
5
  extend Helper::Cli
6
6
  include Helper::Trivia
7
7
 
8
- SUBCOMMANDS = ['dimg'].freeze
8
+ SUBCOMMANDS = %w(dimg kube update sample slug).freeze
9
9
 
10
10
  banner <<BANNER.freeze
11
- Usage: dapp [options] sub-command [sub-command options]
11
+ Usage: dapp subcommand [subcommand options]
12
12
 
13
13
  Available subcommands: (for details, dapp SUB-COMMAND --help)
14
14
 
15
- dapp dimg
15
+ dapp dimg
16
+ dapp kube
17
+ dapp update
18
+ dapp sample
19
+ dapp slug STRING
16
20
 
17
21
  Options:
18
22
  BANNER
@@ -34,6 +38,10 @@ BANNER
34
38
  show_options: true,
35
39
  exit: 0
36
40
 
41
+ class << self
42
+ attr_accessor :dapp_object
43
+ end
44
+
37
45
  def initialize(*args)
38
46
  super(*args)
39
47
 
@@ -0,0 +1,21 @@
1
+ module Dapp
2
+ module Config
3
+ class Config < Directive::Base
4
+ def dev_mode
5
+ @_dev_mode = true
6
+ end
7
+
8
+ def _dev_mode
9
+ !!@_dev_mode
10
+ end
11
+
12
+ def after_parsing!
13
+ do_all!('_after_parsing!')
14
+ end
15
+
16
+ def validate!
17
+ do_all!('_validate!')
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,20 +1,117 @@
1
1
  module Dapp
2
2
  module Config
3
3
  module Directive
4
- class Base < Config::Base
4
+ class Base
5
+ def initialize(dapp:, &blk)
6
+ @dapp = dapp
7
+ initialize_variables
8
+ instance_eval(&blk) if block_given?
9
+ end
10
+
5
11
  def clone
6
12
  _clone
7
13
  end
8
14
 
15
+ def encode_with(coder)
16
+ (instance_variables - [:@dapp]).each do |var|
17
+ var = var.to_s
18
+ coder[var.gsub('@', '')] = instance_variable_get(var)
19
+ end
20
+ end
21
+
9
22
  protected
10
23
 
24
+ attr_reader :dapp
25
+
26
+ def path_format(path)
27
+ path = path.to_s
28
+ path = path.chomp('/') unless path == '/'
29
+ path
30
+ end
31
+
32
+ def validate_compliance!(pattern, value, error_code)
33
+ return if /^#{pattern}$/ =~ value
34
+ raise ::Dapp::Error::Config, code: error_code, data: { value: value, pattern: pattern }
35
+ end
36
+
37
+ def initialize_variables
38
+ do_all!('_init_variables!')
39
+ end
40
+
41
+ def do_all!(postfix)
42
+ methods
43
+ .select { |m| m.to_s.end_with? postfix }
44
+ .each(&method(:send))
45
+ end
46
+
47
+ def directive_eval(directive, &blk)
48
+ directive.instance_eval(&blk) if block_given?
49
+ directive
50
+ end
51
+
11
52
  def sub_directive_eval
12
53
  yield if block_given?
13
54
  self
14
55
  end
15
56
 
16
- def path_format(path)
17
- path.to_s.chomp('/')
57
+ def pass_to(obj, clone_method = :clone)
58
+ passed_directives.each do |directive|
59
+ obj.instance_variable_set(directive, clone_variable(instance_variable_get(directive), clone_method))
60
+ end
61
+ obj
62
+ end
63
+
64
+ def clone_variable(var, clone_method = :clone)
65
+ case var
66
+ when Base then var.public_send(clone_method)
67
+ when String, Symbol, Integer, TrueClass, FalseClass then var
68
+ when Array, Hash then marshal_clone(var)
69
+ when NilClass then nil
70
+ else
71
+ raise
72
+ end
73
+ end
74
+
75
+ def passed_directives
76
+ []
77
+ end
78
+
79
+ def ref_variables
80
+ [:@dapp]
81
+ end
82
+
83
+ def marshal_dump
84
+ instance_variables
85
+ .reject {|variable| ref_variables.include? variable}
86
+ .map {|variable| [variable, instance_variable_get(variable)]}
87
+ end
88
+
89
+ def marshal_load(variable_values)
90
+ variable_values.each { |variable, value| instance_variable_set(variable, clone_variable(value)) }
91
+ self
92
+ end
93
+
94
+ def _clone
95
+ marshal_clone(self).tap do |obj|
96
+ _set_ref_variables_to(obj)
97
+ end
98
+ end
99
+
100
+ def _clone_to(obj)
101
+ obj.tap do
102
+ obj.marshal_load(marshal_dump)
103
+ _set_ref_variables_to(obj)
104
+ end
105
+ end
106
+
107
+ def _set_ref_variables_to(obj)
108
+ ref_variables.each do |ref_variable|
109
+ obj.instance_variable_set(ref_variable, instance_variable_get(ref_variable))
110
+ end
111
+ end
112
+
113
+ def marshal_clone(obj)
114
+ Marshal.load(Marshal.dump(obj))
18
115
  end
19
116
  end
20
117
  end
@@ -12,6 +12,20 @@ module Dapp
12
12
  end
13
13
  end
14
14
  end
15
+
16
+ def symbolize_keys
17
+ transform_keys { |key| key.to_sym rescue key }
18
+ end
19
+
20
+ private
21
+
22
+ def transform_keys
23
+ result = {}
24
+ each_key do |key|
25
+ result[yield(key)] = self[key]
26
+ end
27
+ result
28
+ end
15
29
  end
16
30
  end
17
31
  end
@@ -8,13 +8,15 @@ module Dapp
8
8
  path_descends = []
9
9
  cleanpath.descend {|d| path_descends << d}
10
10
 
11
- (path_descends & another_path_descends) == another_path_descends &&
12
- (path_descends - another_path_descends).any?
11
+ (path_descends & another_path_descends) == another_path_descends
13
12
  end
14
13
 
15
14
  def subpath_of(another_path)
16
- return unless subpath_of? another_path
17
- cleanpath.to_s.partition(::Pathname.new(another_path).cleanpath.to_s + '/').last
15
+ another_cleanpath = ::Pathname.new(another_path).cleanpath
16
+
17
+ return unless subpath_of? another_path
18
+ return '.' if cleanpath.to_s == another_cleanpath.to_s
19
+ cleanpath.to_s.partition(another_cleanpath.to_s + '/').last
18
20
  end
19
21
  end # Pathname
20
22
  end # CoreExt
@@ -1,16 +1,8 @@
1
1
  module Dapp
2
2
  class Dapp
3
3
  module Chef
4
- def local_git_artifact_exclude_paths(&blk)
5
- super do |exclude_paths|
6
- exclude_paths << '.dapp_chef'
7
-
8
- yield exclude_paths if block_given?
9
- end
10
- end
11
-
12
4
  def builder_cookbook_path
13
- Pathname.new(path).join('.dapp_chef')
5
+ path('.dapp_chef')
14
6
  end
15
7
  end # Chef
16
8
  end # Dapp
@@ -0,0 +1,24 @@
1
+ module Dapp
2
+ class Dapp
3
+ module Command
4
+ module Common
5
+ def option_repo
6
+ shortcut_or_key(options[:repo])
7
+ end
8
+
9
+ def shortcut_or_key(key)
10
+ shortcuts[key] || key
11
+ end
12
+
13
+ def shortcuts
14
+ { ':minikube' => "localhost:5000/#{name}" }
15
+ end
16
+
17
+ def dimg_registry(repo = option_repo)
18
+ validate_repo_name!(repo)
19
+ ::Dapp::Dimg::DockerRegistry.new(self, repo)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,54 @@
1
+ module Dapp
2
+ class Dapp
3
+ module Command
4
+ module Sample
5
+ module Common
6
+ def _sample_list
7
+ @sample_list ||= [].tap do |list|
8
+ tree = begin
9
+ latest_commit = _sample_git_repo.latest_branch_commit(_samples_git_repo_branch)
10
+ latest_commit_tree = _sample_git_repo.lookup_commit(latest_commit).tree
11
+
12
+ if _samples_dir == '.'
13
+ latest_commit_tree
14
+ else
15
+ begin
16
+ oid = latest_commit_tree.path(_samples_dir)[:oid]
17
+ rescue Rugged::TreeError
18
+ raise Error::Command, code: :samples_directory_not_exist, data: { url: _samples_git_repo_url, path: _samples_dir }
19
+ end
20
+
21
+ _sample_git_repo.lookup_object(oid)
22
+ end
23
+ end
24
+
25
+ tree.each_tree { |entry| list << entry[:name] }
26
+ end
27
+ end
28
+
29
+ def _sample_git_repo
30
+ @sample_repo ||= begin
31
+ Dimg::GitRepo::Remote.get_or_create(
32
+ self,
33
+ git_url_to_name(_samples_git_repo_url),
34
+ url: _samples_git_repo_url
35
+ )
36
+ end
37
+ end
38
+
39
+ def _samples_git_repo_url
40
+ options[:samples_repo]
41
+ end
42
+
43
+ def _samples_git_repo_branch
44
+ options[:samples_branch]
45
+ end
46
+
47
+ def _samples_dir
48
+ options[:samples_dir]
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,57 @@
1
+ module Dapp
2
+ class Dapp
3
+ module Command
4
+ module Sample
5
+ module Create
6
+ def sample_create(sample_name)
7
+ sample_exist!(sample_name)
8
+
9
+ _sample_repo_blobs_entries(sample_name).each do |root, entry|
10
+ file_path = _sample_slice_cwd(sample_name, File.join(root, entry[:name]))
11
+ content = _sample_git_repo.lookup_object(entry[:oid]).content
12
+
13
+ begin
14
+ FileUtils.mkdir_p(File.dirname(file_path))
15
+ if entry[:filemode] == 0o120000 # symlink
16
+ FileUtils.symlink(content, file_path)
17
+ else
18
+ IO.write(file_path, content)
19
+ FileUtils.chmod(entry[:filemode], file_path)
20
+ end
21
+ rescue Errno::EEXIST => e
22
+ log_warning("File `#{file_path}` skipped: `#{e.message}`")
23
+ end
24
+ end
25
+ end
26
+
27
+ def sample_exist!(sample_name)
28
+ return if sample_exist?(sample_name)
29
+ raise Error::Command, code: :sample_not_exist, data: { name: sample_name, url: _samples_git_repo_url, path: _samples_dir }
30
+ end
31
+
32
+ def sample_exist?(sample_name)
33
+ _sample_list.include?(sample_name)
34
+ end
35
+
36
+ def _sample_repo_blobs_entries(sample_name)
37
+ _sample_git_repo
38
+ .blobs_entries(_sample_git_repo.latest_branch_commit(_samples_git_repo_branch), paths: [_sample_directory(sample_name)])
39
+ .reject { |_, entry| entry[:filemode] == 0o160000 }
40
+ end
41
+
42
+ def _sample_directory(sample_name)
43
+ File.expand_path(File.join('/', _samples_dir, sample_name))[1..-1]
44
+ end
45
+
46
+ def _sample_slice_cwd(sample_name, path)
47
+ path
48
+ .reverse
49
+ .chomp(_sample_directory(sample_name).reverse)
50
+ .chomp('/')
51
+ .reverse
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,13 @@
1
+ module Dapp
2
+ class Dapp
3
+ module Command
4
+ module Sample
5
+ module List
6
+ def sample_list
7
+ _sample_list.each(&method(:puts))
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Dapp
2
+ class Dapp
3
+ module Command
4
+ module Slug
5
+ def slug(str)
6
+ puts consistent_uniq_slugify(str)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,85 @@
1
+ module Dapp
2
+ class Dapp
3
+ module DappConfig
4
+ SUPPORTED_CONFIG_OPTIONS = {
5
+ verbose: [FalseClass, TrueClass],
6
+ quiet: [FalseClass, TrueClass],
7
+ dev: [FalseClass, TrueClass],
8
+ time: [FalseClass, TrueClass],
9
+ dry_run: [FalseClass, TrueClass],
10
+ build_dir: [String],
11
+ color: [String]
12
+ }
13
+
14
+ SUPPORTED_CONFIG_OPTIONS.keys.each do |opt|
15
+ define_method "option_#{opt}" do
16
+ options[opt] || config_options[opt]
17
+ end
18
+ end
19
+
20
+ def option_color
21
+ if options[:color] == 'auto'
22
+ config_options[:color] || 'auto'
23
+ else
24
+ options[:color]
25
+ end
26
+ end
27
+
28
+ def option_dev
29
+ if options[:dev].nil?
30
+ config._dev_mode || config_options[:dev]
31
+ else
32
+ options[:dev]
33
+ end
34
+ end
35
+
36
+ def config_options
37
+ @config_options ||= begin
38
+ config_search_paths = []
39
+ config_search_paths << File.join(Dir.home)
40
+ config_search_paths << path if dappfile_exists?
41
+
42
+ config_search_paths.reduce({}) do |options, dir|
43
+ if (config_options_path = make_path(dir, '.dapp_config')).file?
44
+ config_options = begin
45
+ yaml_load_file(config_options_path).tap do |c_options|
46
+ c_options.merge!(c_options.in_depth_merge(c_options['ci'] || {})) if ENV['GITLAB_CI'] || ENV['TRAVIS']
47
+ c_options.delete('ci')
48
+ end
49
+ rescue Psych::SyntaxError => e
50
+ raise Error::Dapp, code: :dapp_config_file_incorrect, data: { message: e.message }
51
+ end
52
+ options.in_depth_merge(config_options)
53
+ else
54
+ options
55
+ end
56
+ end.symbolize_keys
57
+ end
58
+ end
59
+
60
+ def validate_config_options!
61
+ data_list_format = proc { |list| list.map { |e| "'#{e}'" }.join(', ') }
62
+
63
+ unless (unsupported_keys = config_options.select { |k, _| !SUPPORTED_CONFIG_OPTIONS.keys.include?(k) }.keys).empty?
64
+ log_warning(desc: { code: :unsupported_dapp_config_options,
65
+ data: { options: data_list_format.call(unsupported_keys),
66
+ supported_options: data_list_format.call(SUPPORTED_CONFIG_OPTIONS.keys) } })
67
+ end
68
+
69
+ config_options.each do |k, v|
70
+ next unless SUPPORTED_CONFIG_OPTIONS.keys.include?(k)
71
+
72
+ if k == :color
73
+ raise Error::Dapp,
74
+ code: :incorrect_dapp_config_option_color,
75
+ data: { value: v, expected: data_list_format.call(%w(auto on off)) } unless %w(auto on off).member?(v)
76
+ elsif !SUPPORTED_CONFIG_OPTIONS[k].member? v.class
77
+ raise Error::Dapp,
78
+ code: :incorrect_dapp_config_option,
79
+ data: { option: k, value: v, expected: data_list_format.call(SUPPORTED_CONFIG_OPTIONS[k]) }
80
+ end
81
+ end
82
+ end
83
+ end # DappConfig
84
+ end # Dapp
85
+ end # Dapp