dapp 0.8.0 → 0.9.0

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 (299) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dapp +5 -5
  3. data/config/en/common.yml +6 -4
  4. data/config/en/net_status.yml +8 -7
  5. data/lib/dapp.rb +157 -139
  6. data/lib/dapp/cli.rb +6 -16
  7. data/lib/dapp/cli/base.rb +3 -5
  8. data/lib/dapp/config/base.rb +19 -7
  9. data/lib/dapp/config/directive/base.rb +0 -1
  10. data/lib/dapp/config/error/config.rb +7 -0
  11. data/lib/dapp/core_ext/hash.rb +0 -2
  12. data/lib/dapp/core_ext/pathname.rb +1 -3
  13. data/lib/dapp/{project.rb → dapp.rb} +2 -21
  14. data/lib/dapp/{project → dapp}/chef.rb +2 -4
  15. data/lib/dapp/{project → dapp}/dappfile.rb +5 -7
  16. data/lib/dapp/{project → dapp}/deps/base.rb +3 -6
  17. data/lib/dapp/{project → dapp}/deps/gitartifact.rb +2 -5
  18. data/lib/dapp/{project → dapp}/git_artifact.rb +2 -4
  19. data/lib/dapp/{project → dapp}/lock.rb +3 -5
  20. data/lib/dapp/{project → dapp}/logging/base.rb +2 -5
  21. data/lib/dapp/{project → dapp}/logging/i18n.rb +2 -3
  22. data/lib/dapp/{project → dapp}/logging/paint.rb +2 -4
  23. data/lib/dapp/{project → dapp}/logging/process.rb +2 -5
  24. data/lib/dapp/{project → dapp}/shellout/base.rb +2 -4
  25. data/lib/dapp/{project → dapp}/shellout/streaming.rb +3 -8
  26. data/lib/dapp/{project → dapp}/ssh_agent.rb +6 -9
  27. data/lib/dapp/dimg.rb +1 -192
  28. data/lib/dapp/dimg/artifact.rb +24 -0
  29. data/lib/dapp/dimg/build/stage/after_install_artifact.rb +14 -0
  30. data/lib/dapp/dimg/build/stage/after_setup_artifact.rb +18 -0
  31. data/lib/dapp/dimg/build/stage/artifact_base.rb +80 -0
  32. data/lib/dapp/dimg/build/stage/artifact_default.rb +63 -0
  33. data/lib/dapp/dimg/build/stage/base.rb +210 -0
  34. data/lib/dapp/dimg/build/stage/before_install.rb +33 -0
  35. data/lib/dapp/dimg/build/stage/before_install_artifact.rb +14 -0
  36. data/lib/dapp/dimg/build/stage/before_setup.rb +31 -0
  37. data/lib/dapp/dimg/build/stage/before_setup_artifact.rb +14 -0
  38. data/lib/dapp/dimg/build/stage/build_artifact.rb +31 -0
  39. data/lib/dapp/dimg/build/stage/docker_instructions.rb +25 -0
  40. data/lib/dapp/dimg/build/stage/from.rb +50 -0
  41. data/lib/dapp/dimg/build/stage/ga_archive.rb +28 -0
  42. data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +27 -0
  43. data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +22 -0
  44. data/lib/dapp/dimg/build/stage/ga_base.rb +80 -0
  45. data/lib/dapp/dimg/build/stage/ga_dependencies_base.rb +20 -0
  46. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +54 -0
  47. data/lib/dapp/dimg/build/stage/import_artifact.rb +64 -0
  48. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch.rb +22 -0
  49. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +22 -0
  50. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb +22 -0
  51. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +22 -0
  52. data/lib/dapp/dimg/build/stage/install/install.rb +35 -0
  53. data/lib/dapp/dimg/build/stage/mod/group.rb +42 -0
  54. data/lib/dapp/dimg/build/stage/mod/logging.rb +101 -0
  55. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb +22 -0
  56. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +32 -0
  57. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch.rb +22 -0
  58. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +22 -0
  59. data/lib/dapp/dimg/build/stage/setup/setup.rb +35 -0
  60. data/lib/dapp/dimg/builder.rb +6 -0
  61. data/lib/dapp/{builder → dimg/builder}/base.rb +4 -5
  62. data/lib/dapp/{builder → dimg/builder}/chef.rb +41 -33
  63. data/lib/dapp/dimg/builder/chef/berksfile.rb +121 -0
  64. data/lib/dapp/dimg/builder/chef/cookbook.rb +285 -0
  65. data/lib/dapp/dimg/builder/chef/cookbook_metadata.rb +106 -0
  66. data/lib/dapp/{builder → dimg/builder}/none.rb +4 -5
  67. data/lib/dapp/{builder → dimg/builder}/shell.rb +5 -6
  68. data/lib/dapp/dimg/cli/base.rb +16 -0
  69. data/lib/dapp/dimg/cli/bp.rb +37 -0
  70. data/lib/dapp/dimg/cli/build.rb +64 -0
  71. data/lib/dapp/dimg/cli/build_context.rb +18 -0
  72. data/lib/dapp/dimg/cli/build_context/export.rb +26 -0
  73. data/lib/dapp/dimg/cli/build_context/import.rb +17 -0
  74. data/lib/dapp/dimg/cli/cleanup.rb +22 -0
  75. data/lib/dapp/dimg/cli/cli.rb +1 -0
  76. data/lib/dapp/dimg/cli/dimg.rb +30 -0
  77. data/lib/dapp/dimg/cli/list.rb +17 -0
  78. data/lib/dapp/dimg/cli/mrproper.rb +26 -0
  79. data/lib/dapp/dimg/cli/push.rb +61 -0
  80. data/lib/dapp/dimg/cli/run.rb +59 -0
  81. data/lib/dapp/{cli → dimg/cli}/spush.rb +7 -7
  82. data/lib/dapp/dimg/cli/stage_image.rb +24 -0
  83. data/lib/dapp/dimg/cli/stages.rb +22 -0
  84. data/lib/dapp/dimg/cli/stages/cleanup_local.rb +44 -0
  85. data/lib/dapp/dimg/cli/stages/cleanup_repo.rb +26 -0
  86. data/lib/dapp/dimg/cli/stages/flush_local.rb +23 -0
  87. data/lib/dapp/dimg/cli/stages/flush_repo.rb +24 -0
  88. data/lib/dapp/dimg/cli/stages/pull.rb +28 -0
  89. data/lib/dapp/dimg/cli/stages/push.rb +24 -0
  90. data/lib/dapp/dimg/cli/tag.rb +24 -0
  91. data/lib/dapp/dimg/config/artifact_dimg.rb +17 -0
  92. data/lib/dapp/dimg/config/artifact_group.rb +47 -0
  93. data/lib/dapp/dimg/config/base.rb +7 -0
  94. data/lib/dapp/dimg/config/dimg.rb +24 -0
  95. data/lib/dapp/dimg/config/dimg/instance_methods.rb +177 -0
  96. data/lib/dapp/dimg/config/dimg/validation.rb +126 -0
  97. data/lib/dapp/dimg/config/dimg_group.rb +61 -0
  98. data/lib/dapp/dimg/config/dimg_group_base.rb +54 -0
  99. data/lib/dapp/dimg/config/dimg_group_main.rb +22 -0
  100. data/lib/dapp/dimg/config/directive/artifact.rb +70 -0
  101. data/lib/dapp/dimg/config/directive/artifact_base.rb +97 -0
  102. data/lib/dapp/dimg/config/directive/base.rb +9 -0
  103. data/lib/dapp/dimg/config/directive/chef.rb +68 -0
  104. data/lib/dapp/dimg/config/directive/docker/artifact.rb +15 -0
  105. data/lib/dapp/dimg/config/directive/docker/base.rb +22 -0
  106. data/lib/dapp/dimg/config/directive/docker/dimg.rb +82 -0
  107. data/lib/dapp/dimg/config/directive/git_artifact_local.rb +47 -0
  108. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +58 -0
  109. data/lib/dapp/dimg/config/directive/mount.rb +27 -0
  110. data/lib/dapp/dimg/config/directive/shell/artifact.rb +18 -0
  111. data/lib/dapp/dimg/config/directive/shell/dimg.rb +65 -0
  112. data/lib/dapp/dimg/dapp/command.rb +21 -0
  113. data/lib/dapp/dimg/dapp/command/bp.rb +20 -0
  114. data/lib/dapp/dimg/dapp/command/build.rb +22 -0
  115. data/lib/dapp/dimg/dapp/command/build_context/common.rb +27 -0
  116. data/lib/dapp/dimg/dapp/command/build_context/export.rb +55 -0
  117. data/lib/dapp/dimg/dapp/command/build_context/import.rb +71 -0
  118. data/lib/dapp/dimg/dapp/command/cleanup.rb +23 -0
  119. data/lib/dapp/dimg/dapp/command/common.rb +96 -0
  120. data/lib/dapp/dimg/dapp/command/list.rb +19 -0
  121. data/lib/dapp/dimg/dapp/command/mrproper.rb +75 -0
  122. data/lib/dapp/dimg/dapp/command/push.rb +27 -0
  123. data/lib/dapp/dimg/dapp/command/run.rb +15 -0
  124. data/lib/dapp/dimg/dapp/command/spush.rb +17 -0
  125. data/lib/dapp/dimg/dapp/command/stage_image.rb +14 -0
  126. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +137 -0
  127. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +124 -0
  128. data/lib/dapp/dimg/dapp/command/stages/common.rb +85 -0
  129. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +21 -0
  130. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +21 -0
  131. data/lib/dapp/dimg/dapp/command/stages/pull.rb +26 -0
  132. data/lib/dapp/dimg/dapp/command/stages/push.rb +22 -0
  133. data/lib/dapp/dimg/dapp/command/tag.rb +17 -0
  134. data/lib/dapp/dimg/dimg.rb +192 -0
  135. data/lib/dapp/dimg/dimg/git_artifact.rb +26 -0
  136. data/lib/dapp/dimg/dimg/path.rb +37 -0
  137. data/lib/dapp/dimg/dimg/stages.rb +60 -0
  138. data/lib/dapp/dimg/dimg/tags.rb +65 -0
  139. data/lib/dapp/dimg/docker_registry.rb +37 -0
  140. data/lib/dapp/dimg/docker_registry/base.rb +109 -0
  141. data/lib/dapp/dimg/docker_registry/base/authorization.rb +63 -0
  142. data/lib/dapp/dimg/docker_registry/base/request.rb +34 -0
  143. data/lib/dapp/dimg/docker_registry/default.rb +18 -0
  144. data/lib/dapp/dimg/error/base.rb +7 -0
  145. data/lib/dapp/dimg/error/build.rb +7 -0
  146. data/lib/dapp/dimg/error/chef.rb +11 -0
  147. data/lib/dapp/dimg/error/command.rb +7 -0
  148. data/lib/dapp/dimg/error/config.rb +7 -0
  149. data/lib/dapp/dimg/error/dimg.rb +7 -0
  150. data/lib/dapp/dimg/error/lock.rb +7 -0
  151. data/lib/dapp/dimg/error/registry.rb +7 -0
  152. data/lib/dapp/dimg/error/rugged.rb +7 -0
  153. data/lib/dapp/dimg/error/shellout.rb +7 -0
  154. data/lib/dapp/dimg/error/tar_writer.rb +7 -0
  155. data/lib/dapp/dimg/exception/base.rb +7 -0
  156. data/lib/dapp/dimg/exception/introspect_image.rb +7 -0
  157. data/lib/dapp/dimg/exception/registry.rb +7 -0
  158. data/lib/dapp/dimg/filelock.rb +43 -0
  159. data/lib/dapp/dimg/git_artifact.rb +241 -18
  160. data/lib/dapp/dimg/git_repo/base.rb +90 -0
  161. data/lib/dapp/dimg/git_repo/own.rb +39 -0
  162. data/lib/dapp/dimg/git_repo/remote.rb +50 -0
  163. data/lib/dapp/dimg/image/argument.rb +143 -0
  164. data/lib/dapp/dimg/image/docker.rb +127 -0
  165. data/lib/dapp/dimg/image/scratch.rb +32 -0
  166. data/lib/dapp/dimg/image/stage.rb +95 -0
  167. data/lib/dapp/dimg/lock/base.rb +51 -0
  168. data/lib/dapp/dimg/lock/file.rb +48 -0
  169. data/lib/dapp/error/base.rb +0 -1
  170. data/lib/dapp/error/dapp.rb +5 -0
  171. data/lib/dapp/error/dappfile.rb +0 -1
  172. data/lib/dapp/error/shellout.rb +0 -1
  173. data/lib/dapp/exception/base.rb +0 -1
  174. data/lib/dapp/helper/cli.rb +5 -6
  175. data/lib/dapp/helper/net_status.rb +0 -1
  176. data/lib/dapp/helper/sha256.rb +0 -1
  177. data/lib/dapp/helper/trivia.rb +0 -1
  178. data/lib/dapp/prctl.rb +0 -1
  179. data/lib/dapp/version.rb +1 -2
  180. metadata +172 -140
  181. data/lib/dapp/artifact.rb +0 -23
  182. data/lib/dapp/build/stage/after_install_artifact.rb +0 -13
  183. data/lib/dapp/build/stage/after_setup_artifact.rb +0 -17
  184. data/lib/dapp/build/stage/artifact_base.rb +0 -80
  185. data/lib/dapp/build/stage/artifact_default.rb +0 -63
  186. data/lib/dapp/build/stage/base.rb +0 -203
  187. data/lib/dapp/build/stage/before_install.rb +0 -32
  188. data/lib/dapp/build/stage/before_install_artifact.rb +0 -13
  189. data/lib/dapp/build/stage/before_setup.rb +0 -30
  190. data/lib/dapp/build/stage/before_setup_artifact.rb +0 -13
  191. data/lib/dapp/build/stage/build_artifact.rb +0 -36
  192. data/lib/dapp/build/stage/docker_instructions.rb +0 -24
  193. data/lib/dapp/build/stage/from.rb +0 -34
  194. data/lib/dapp/build/stage/ga_archive.rb +0 -27
  195. data/lib/dapp/build/stage/ga_archive_dependencies.rb +0 -26
  196. data/lib/dapp/build/stage/ga_artifact_patch.rb +0 -21
  197. data/lib/dapp/build/stage/ga_base.rb +0 -79
  198. data/lib/dapp/build/stage/ga_dependencies_base.rb +0 -19
  199. data/lib/dapp/build/stage/ga_latest_patch.rb +0 -53
  200. data/lib/dapp/build/stage/import_artifact.rb +0 -65
  201. data/lib/dapp/build/stage/install/ga_post_install_patch.rb +0 -21
  202. data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +0 -21
  203. data/lib/dapp/build/stage/install/ga_pre_install_patch.rb +0 -21
  204. data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +0 -21
  205. data/lib/dapp/build/stage/install/install.rb +0 -40
  206. data/lib/dapp/build/stage/mod/group.rb +0 -42
  207. data/lib/dapp/build/stage/mod/logging.rb +0 -104
  208. data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +0 -21
  209. data/lib/dapp/build/stage/setup/ga_post_setup_patch_dependencies.rb +0 -31
  210. data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +0 -21
  211. data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +0 -21
  212. data/lib/dapp/build/stage/setup/setup.rb +0 -40
  213. data/lib/dapp/builder/chef/berksfile.rb +0 -78
  214. data/lib/dapp/builder/chef/cookbook.rb +0 -257
  215. data/lib/dapp/builder/chef/cookbook_metadata.rb +0 -54
  216. data/lib/dapp/builder/chef/error.rb +0 -12
  217. data/lib/dapp/cli/bp.rb +0 -37
  218. data/lib/dapp/cli/build.rb +0 -60
  219. data/lib/dapp/cli/cleanup.rb +0 -22
  220. data/lib/dapp/cli/list.rb +0 -17
  221. data/lib/dapp/cli/mrproper.rb +0 -26
  222. data/lib/dapp/cli/push.rb +0 -61
  223. data/lib/dapp/cli/run.rb +0 -53
  224. data/lib/dapp/cli/stage_image.rb +0 -24
  225. data/lib/dapp/cli/stages.rb +0 -23
  226. data/lib/dapp/cli/stages/cleanup_local.rb +0 -44
  227. data/lib/dapp/cli/stages/cleanup_repo.rb +0 -26
  228. data/lib/dapp/cli/stages/flush_local.rb +0 -23
  229. data/lib/dapp/cli/stages/flush_repo.rb +0 -24
  230. data/lib/dapp/cli/stages/pull.rb +0 -28
  231. data/lib/dapp/cli/stages/push.rb +0 -24
  232. data/lib/dapp/cli/tag.rb +0 -24
  233. data/lib/dapp/config/artifact_dimg.rb +0 -20
  234. data/lib/dapp/config/artifact_group.rb +0 -56
  235. data/lib/dapp/config/dimg.rb +0 -23
  236. data/lib/dapp/config/dimg/instance_methods.rb +0 -194
  237. data/lib/dapp/config/dimg/validation.rb +0 -125
  238. data/lib/dapp/config/dimg_group.rb +0 -60
  239. data/lib/dapp/config/dimg_group_base.rb +0 -53
  240. data/lib/dapp/config/dimg_group_main.rb +0 -21
  241. data/lib/dapp/config/directive/artifact.rb +0 -69
  242. data/lib/dapp/config/directive/artifact_base.rb +0 -93
  243. data/lib/dapp/config/directive/chef.rb +0 -57
  244. data/lib/dapp/config/directive/docker/artifact.rb +0 -15
  245. data/lib/dapp/config/directive/docker/base.rb +0 -20
  246. data/lib/dapp/config/directive/docker/dimg.rb +0 -81
  247. data/lib/dapp/config/directive/git_artifact_local.rb +0 -13
  248. data/lib/dapp/config/directive/git_artifact_remote.rb +0 -57
  249. data/lib/dapp/config/directive/mount.rb +0 -26
  250. data/lib/dapp/config/directive/shell/artifact.rb +0 -17
  251. data/lib/dapp/config/directive/shell/dimg.rb +0 -65
  252. data/lib/dapp/dimg/path.rb +0 -37
  253. data/lib/dapp/dimg/stages.rb +0 -59
  254. data/lib/dapp/dimg/tags.rb +0 -65
  255. data/lib/dapp/docker_registry.rb +0 -36
  256. data/lib/dapp/docker_registry/base.rb +0 -109
  257. data/lib/dapp/docker_registry/default.rb +0 -18
  258. data/lib/dapp/docker_registry/mod/authorization.rb +0 -63
  259. data/lib/dapp/docker_registry/mod/request.rb +0 -32
  260. data/lib/dapp/error/build.rb +0 -6
  261. data/lib/dapp/error/config.rb +0 -6
  262. data/lib/dapp/error/dimg.rb +0 -6
  263. data/lib/dapp/error/image.rb +0 -6
  264. data/lib/dapp/error/project.rb +0 -6
  265. data/lib/dapp/error/registry.rb +0 -6
  266. data/lib/dapp/error/rugged.rb +0 -6
  267. data/lib/dapp/error/tar_writer.rb +0 -6
  268. data/lib/dapp/exception/introspect_image.rb +0 -6
  269. data/lib/dapp/exception/registry.rb +0 -6
  270. data/lib/dapp/filelock.rb +0 -43
  271. data/lib/dapp/git_artifact.rb +0 -241
  272. data/lib/dapp/git_repo/base.rb +0 -88
  273. data/lib/dapp/git_repo/own.rb +0 -38
  274. data/lib/dapp/git_repo/remote.rb +0 -49
  275. data/lib/dapp/image/argument.rb +0 -134
  276. data/lib/dapp/image/docker.rb +0 -115
  277. data/lib/dapp/image/scratch.rb +0 -32
  278. data/lib/dapp/image/stage.rb +0 -94
  279. data/lib/dapp/lock/base.rb +0 -51
  280. data/lib/dapp/lock/error.rb +0 -14
  281. data/lib/dapp/lock/file.rb +0 -45
  282. data/lib/dapp/project/command/bp.rb +0 -21
  283. data/lib/dapp/project/command/build.rb +0 -20
  284. data/lib/dapp/project/command/cleanup.rb +0 -24
  285. data/lib/dapp/project/command/common.rb +0 -96
  286. data/lib/dapp/project/command/list.rb +0 -20
  287. data/lib/dapp/project/command/mrproper.rb +0 -69
  288. data/lib/dapp/project/command/push.rb +0 -28
  289. data/lib/dapp/project/command/run.rb +0 -15
  290. data/lib/dapp/project/command/spush.rb +0 -18
  291. data/lib/dapp/project/command/stage_image.rb +0 -15
  292. data/lib/dapp/project/command/stages/cleanup_local.rb +0 -138
  293. data/lib/dapp/project/command/stages/cleanup_repo.rb +0 -125
  294. data/lib/dapp/project/command/stages/common.rb +0 -86
  295. data/lib/dapp/project/command/stages/flush_local.rb +0 -22
  296. data/lib/dapp/project/command/stages/flush_repo.rb +0 -22
  297. data/lib/dapp/project/command/stages/pull.rb +0 -27
  298. data/lib/dapp/project/command/stages/push.rb +0 -23
  299. data/lib/dapp/project/command/tag.rb +0 -18
@@ -0,0 +1,59 @@
1
+ module Dapp
2
+ module Dimg
3
+ module CLI
4
+ class Run < Base
5
+ banner <<BANNER.freeze
6
+ Usage:
7
+
8
+ dapp dimg run [options] [DIMG] [DOCKER ARGS]
9
+
10
+ DIMG Dapp image to process [default: *].
11
+ DOCKER ARGS Docker run options and command separated by '--'
12
+
13
+ Options:
14
+ BANNER
15
+ option :ssh_key,
16
+ long: '--ssh-key SSH_KEY',
17
+ description: ['Enable only specified ssh keys ',
18
+ '(use system ssh-agent by default)'].join,
19
+ default: nil,
20
+ proc: ->(v) { composite_options(:ssh_key) << v }
21
+
22
+ def read_cli_options(args)
23
+ self.class.cli_wrapper(self) do
24
+ args.each_with_index do |arg, i|
25
+ next if arg == '--'
26
+ next if (key = find_option(arg)).nil?
27
+ cli_option = []
28
+ cli_option << args.slice!(i)
29
+ if key[:with_arg]
30
+ raise OptionParser::InvalidOption if args.count < i + 1
31
+ cli_option << args.slice!(i)
32
+ end
33
+ parse_options(cli_option)
34
+ return read_cli_options(args)
35
+ end
36
+ end
37
+ end
38
+
39
+ def find_option(arg)
40
+ expected_options.each { |hash| return hash if hash[:formats].any? { |f| f.start_with? arg } }
41
+ nil
42
+ end
43
+
44
+ def expected_options
45
+ @expected_options ||= options.values.map { |opt| { formats: [opt[:long], opt[:short]].compact, with_arg: !opt[:long].split.one? } }
46
+ end
47
+
48
+ def run(argv = ARGV)
49
+ filtered_args = read_cli_options(argv)
50
+ pattern = filtered_args.any? && !filtered_args.first.start_with?('-') ? [filtered_args.shift] : []
51
+ index = filtered_args.index('--') || filtered_args.count
52
+ docker_options = index.nonzero? ? filtered_args.slice(0..index - 1) : []
53
+ command = filtered_args.slice(index + 1..-1) || []
54
+ ::Dapp::Dapp.new(cli_options: config, dimgs_patterns: pattern).run(docker_options, command)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,18 +1,18 @@
1
1
  module Dapp
2
- class CLI
3
- # CLI spush subcommand
4
- class Spush < Push
5
- banner <<BANNER.freeze
6
- Version: #{Dapp::VERSION}
7
-
2
+ module Dimg
3
+ module CLI
4
+ class Spush < Push
5
+ banner <<BANNER.freeze
8
6
  Usage:
9
- dapp spush [options] [DIMG] REPO
7
+
8
+ dapp dimg spush [options] [DIMG] REPO
10
9
 
11
10
  DIMG Dapp image to process [default: *].
12
11
  REPO Pushed image name.
13
12
 
14
13
  Options:
15
14
  BANNER
15
+ end
16
16
  end
17
17
  end
18
18
  end
@@ -0,0 +1,24 @@
1
+ module Dapp
2
+ module Dimg
3
+ module CLI
4
+ class StageImage < Base
5
+ banner <<BANNER.freeze
6
+ Usage:
7
+
8
+ dapp dimg stage image [options] [DIMG]
9
+
10
+ DIMG Dapp image to process [default: *].
11
+
12
+ Options:
13
+ BANNER
14
+ option :stage,
15
+ long: '--stage STAGE',
16
+ proc: proc { |v| v.to_sym },
17
+ default: :docker_instructions,
18
+ in: [:from, :before_install, :before_install_artifact, :g_a_archive, :g_a_pre_install_patch, :install,
19
+ :g_a_post_install_patch, :after_install_artifact, :before_setup, :before_setup_artifact, :g_a_pre_setup_patch,
20
+ :setup, :g_a_post_setup_patch, :after_setup_artifact, :g_a_latest_patch, :docker_instructions]
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ module Dapp
2
+ module Dimg
3
+ module CLI
4
+ class Stages < ::Dapp::CLI
5
+ SUBCOMMANDS = ['flush local', 'flush repo', 'cleanup local', 'cleanup repo', 'push', 'pull'].freeze
6
+
7
+ banner <<BANNER.freeze
8
+ Available subcommands: (for details, dapp dimg stages SUB-COMMAND --help)
9
+
10
+ dapp dimg stages cleanup local [options] [DIMG ...] [REPO]
11
+ dapp dimg stages cleanup repo [options] [DIMG ...] REPO
12
+ dapp dimg stages flush local [options] [DIMG ...]
13
+ dapp dimg stages flush repo [options] [DIMG ...] REPO
14
+ dapp dimg stages push [options] [DIMG ...] REPO
15
+ dapp dimg stages pull [options] [DIMG ...] REPO
16
+
17
+ Options:
18
+ BANNER
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,44 @@
1
+ module Dapp
2
+ module Dimg
3
+ module CLI
4
+ class Stages
5
+ class CleanupLocal < Base
6
+ banner <<BANNER.freeze
7
+ Usage:
8
+
9
+ dapp dimg stages cleanup local [options] [DIMG ...] [REPO]
10
+
11
+ DIMG Dapp image to process [default: *].
12
+
13
+ Options:
14
+ BANNER
15
+ option :proper_cache_version,
16
+ long: '--improper-cache-version',
17
+ boolean: true
18
+
19
+ option :proper_git_commit,
20
+ long: '--improper-git-commit',
21
+ boolean: true
22
+
23
+ option :proper_repo_cache,
24
+ long: '--improper-repo-cache',
25
+ boolean: true
26
+
27
+ def run(argv = ARGV)
28
+ self.class.parse_options(self, argv)
29
+ repository = repo
30
+ ::Dapp::Dapp.new(cli_options: config, dimgs_patterns: cli_arguments).send(run_method, repository)
31
+ end
32
+
33
+ def repo
34
+ config[:proper_repo_cache] ? self.class.required_argument(self) : nil
35
+ end
36
+
37
+ def run_method
38
+ :stages_cleanup_local
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,26 @@
1
+ module Dapp
2
+ module Dimg
3
+ module CLI
4
+ class Stages
5
+ class CleanupRepo < CleanupLocal
6
+ banner <<BANNER.freeze
7
+ Usage:
8
+
9
+ dapp dimg stages cleanup repo [options] [DIMG ...] REPO
10
+
11
+ DIMG Dapp image to process [default: *].
12
+
13
+ Options:
14
+ BANNER
15
+ def run_method
16
+ :stages_cleanup_repo
17
+ end
18
+
19
+ def repo
20
+ self.class.required_argument(self)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ module Dapp
2
+ module Dimg
3
+ module CLI
4
+ class Stages
5
+ class FlushLocal < Base
6
+ banner <<BANNER.freeze
7
+ Usage:
8
+
9
+ dapp dimg stages flush local [options] [DIMG ...]
10
+
11
+ DIMG Dapp image to process [default: *].
12
+
13
+ Options:
14
+ BANNER
15
+ def run(argv = ARGV)
16
+ self.class.parse_options(self, argv)
17
+ ::Dapp::Dapp.new(cli_options: config, dimgs_patterns: cli_arguments).stages_flush_local
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ module Dapp
2
+ module Dimg
3
+ module CLI
4
+ class Stages
5
+ class FlushRepo < Base
6
+ banner <<BANNER.freeze
7
+ Usage:
8
+
9
+ dapp dimg stages flush repo [options] [DIMG ...] REPO
10
+
11
+ DIMG Dapp image to process [default: *].
12
+
13
+ Options:
14
+ BANNER
15
+ def run(argv = ARGV)
16
+ self.class.parse_options(self, argv)
17
+ repo = self.class.required_argument(self)
18
+ ::Dapp::Dapp.new(cli_options: config, dimgs_patterns: cli_arguments).stages_flush_repo(repo)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,28 @@
1
+ module Dapp
2
+ module Dimg
3
+ module CLI
4
+ class Stages
5
+ class Pull < Base
6
+ banner <<BANNER.freeze
7
+ Usage:
8
+
9
+ dapp dimg stages pull [options] [DIMG ...] REPO
10
+
11
+ DIMG Dapp image to process [default: *].
12
+
13
+ Options:
14
+ BANNER
15
+ option :pull_all_stages,
16
+ long: '--all',
17
+ boolean: true
18
+
19
+ def run(argv = ARGV)
20
+ self.class.parse_options(self, argv)
21
+ repo = self.class.required_argument(self)
22
+ ::Dapp::Dapp.new(cli_options: config, dimgs_patterns: cli_arguments).stages_pull(repo)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ module Dapp
2
+ module Dimg
3
+ module CLI
4
+ class Stages
5
+ class Push < Base
6
+ banner <<BANNER.freeze
7
+ Usage:
8
+
9
+ dapp dimg stages push [options] [DIMG ...] REPO
10
+
11
+ DIMG Dapp image to process [default: *].
12
+
13
+ Options:
14
+ BANNER
15
+ def run(argv = ARGV)
16
+ self.class.parse_options(self, argv)
17
+ repo = self.class.required_argument(self)
18
+ ::Dapp::Dapp.new(cli_options: config, dimgs_patterns: cli_arguments).stages_push(repo)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module Dapp
2
+ module Dimg
3
+ module CLI
4
+ class Tag < Base
5
+ banner <<BANNER.freeze
6
+ Usage:
7
+
8
+ dapp dimg tag [options] [DIMG] TAG
9
+
10
+ DIMG Dapp image to process [default: *].
11
+ REPO Pushed image name.
12
+
13
+ Options:
14
+ BANNER
15
+
16
+ def run(argv = ARGV)
17
+ self.class.parse_options(self, argv)
18
+ tag = self.class.required_argument(self)
19
+ ::Dapp::Dapp.new(cli_options: config, dimgs_patterns: cli_arguments).public_send(class_to_lowercase, tag)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,17 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ class ArtifactDimg < Dimg
5
+ def validate_scratch!
6
+ end
7
+
8
+ def validate_artifacts_artifacts!
9
+ end
10
+
11
+ def validated_artifacts
12
+ _git_artifact._local + _git_artifact._remote
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,47 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ class ArtifactGroup < DimgGroup
5
+ def _shell(&blk)
6
+ @_shell ||= Directive::Shell::Artifact.new(dapp: dapp, &blk)
7
+ end
8
+
9
+ def _docker(&blk)
10
+ @_docker ||= Directive::Docker::Artifact.new(dapp: dapp, &blk)
11
+ end
12
+
13
+ def _export
14
+ @_export ||= []
15
+ end
16
+
17
+ undef :artifact
18
+ undef :dimg
19
+ undef :dimg_group
20
+
21
+ protected
22
+
23
+ def export(*args, &blk)
24
+ _export.concat begin
25
+ artifact_config = pass_to_default(
26
+ ArtifactDimg.new(
27
+ "artifact-#{SecureRandom.hex(2)}",
28
+ dapp: dapp
29
+ )
30
+ )
31
+
32
+ artifact = Directive::Artifact.new(dapp: dapp, config: artifact_config)
33
+ artifact.send(:export, *args, &blk)
34
+
35
+ artifact._export
36
+ end
37
+ end
38
+
39
+ def check_dimg_directive_order(_directive)
40
+ end
41
+
42
+ def check_dimg_group_directive_order(_directive)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,7 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ class Base < ::Dapp::Config::Base; end
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,24 @@
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
@@ -0,0 +1,177 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ class Dimg < Base
5
+ module InstanceMethods
6
+ attr_reader :_builder
7
+ attr_reader :_chef, :_shell, :_docker, :_git_artifact, :_mount, :_artifact
8
+
9
+ def dev_mode
10
+ @_dev_mode = true
11
+ end
12
+
13
+ def chef(&blk)
14
+ builder(:chef)
15
+ directive_eval(_chef, &blk)
16
+ end
17
+
18
+ def shell(&blk)
19
+ builder(:shell)
20
+ directive_eval(_shell, &blk)
21
+ end
22
+
23
+ def docker(&blk)
24
+ directive_eval(_docker, &blk)
25
+ end
26
+
27
+ def artifact(&blk)
28
+ _artifact.concat begin
29
+ pass_to_custom(ArtifactGroup.new(dapp: dapp), :clone_to_artifact).tap do |artifact_group|
30
+ artifact_group.instance_eval(&blk) if block_given?
31
+ end._export
32
+ end
33
+ end
34
+
35
+ def git(url = nil, &blk)
36
+ type = url.nil? ? :local : :remote
37
+ _git_artifact.send(type, url.to_s, &blk)
38
+ end
39
+
40
+ def mount(to, &blk)
41
+ _mount << Directive::Mount.new(to, dapp: dapp, &blk)
42
+ end
43
+
44
+ def _dev_mode
45
+ !!@_dev_mode
46
+ end
47
+
48
+ def _builder
49
+ @_builder || :none
50
+ end
51
+
52
+ def _chef
53
+ @_chef ||= Directive::Chef.new(dapp: dapp)
54
+ end
55
+
56
+ def _shell
57
+ @_shell ||= Directive::Shell::Dimg.new(dapp: dapp)
58
+ end
59
+
60
+ def _docker
61
+ @_docker ||= Directive::Docker::Dimg.new(dapp: dapp)
62
+ end
63
+
64
+ def _mount
65
+ @_mount ||= []
66
+ end
67
+
68
+ def _git_artifact
69
+ @_git_artifact ||= GitArtifact.new(dapp: dapp)
70
+ end
71
+
72
+ [:build_dir, :tmp_dir].each do |mount_type|
73
+ define_method "_#{mount_type}_mount" do
74
+ _mount.select { |m| m._type == mount_type }
75
+ end
76
+ end
77
+
78
+ def _artifact
79
+ @_artifact ||= []
80
+ end
81
+
82
+ [:before, :after].each do |order|
83
+ [:setup, :install].each do |stage|
84
+ define_method "_#{order}_#{stage}_artifact" do
85
+ _artifact.select do |art|
86
+ art.public_send("_#{order}") == stage
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+ def _import_artifact
93
+ _artifact.select(&:not_associated?)
94
+ end
95
+
96
+ class GitArtifact < Directive::Base
97
+ attr_reader :_local, :_remote
98
+
99
+ def initialize(**kwargs, &blk)
100
+ @_local = []
101
+ @_remote = []
102
+
103
+ super(**kwargs, &blk)
104
+ end
105
+
106
+ def local(_, &blk)
107
+ @_local << Directive::GitArtifactLocal.new(dapp: dapp, &blk)
108
+ end
109
+
110
+ def remote(repo_url, &blk)
111
+ @_remote << Directive::GitArtifactRemote.new(repo_url, dapp: dapp, &blk)
112
+ end
113
+
114
+ def _local
115
+ @_local.map(&:_export).flatten
116
+ end
117
+
118
+ def _remote
119
+ @_remote.map(&:_export).flatten
120
+ end
121
+
122
+ protected
123
+
124
+ def empty?
125
+ (_local + _remote).empty?
126
+ end
127
+
128
+ def validate!
129
+ (_local + _remote).each { |exp| exp.send(:validate!) }
130
+ end
131
+ end
132
+
133
+ protected
134
+
135
+ def builder(type)
136
+ @_builder = type if _builder == :none
137
+ raise Error::Config, code: :builder_type_conflict unless @_builder == type
138
+ end
139
+
140
+ def directive_eval(directive, &blk)
141
+ directive.instance_eval(&blk) if block_given?
142
+ directive
143
+ end
144
+
145
+ def pass_to_default(dimg)
146
+ pass_to_custom(dimg, :clone)
147
+ end
148
+
149
+ def pass_to_custom(obj, clone_method)
150
+ passed_directives.each do |directive|
151
+ next if (variable = instance_variable_get(directive)).nil?
152
+
153
+ obj.instance_variable_set(directive, begin
154
+ case variable
155
+ when Directive::Base, GitArtifact then variable.send(clone_method)
156
+ when Symbol then variable
157
+ when Array then variable.dup
158
+ when TrueClass, FalseClass then variable
159
+ else
160
+ raise
161
+ end
162
+ end)
163
+ end
164
+ obj
165
+ end
166
+
167
+ def passed_directives
168
+ [:@_chef, :@_shell, :@_docker,
169
+ :@_git_artifact, :@_mount,
170
+ :@_artifact, :@_builder, :@_dev_mode]
171
+ end
172
+ end # InstanceMethods
173
+ # rubocop:enable Metrics/ModuleLength
174
+ end # Dimg
175
+ end # Config
176
+ end # Dimg
177
+ end # Dapp