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,39 @@
1
+ module Dapp
2
+ module Dimg
3
+ module GitRepo
4
+ class Own < Base
5
+ def initialize(dimg)
6
+ super(dimg, 'own')
7
+ end
8
+
9
+ def exclude_paths
10
+ dimg.dapp.local_git_artifact_exclude_paths
11
+ end
12
+
13
+ def path
14
+ @path ||= Rugged::Repository.discover(dimg.home_path.to_s).path
15
+ rescue Rugged::RepositoryError => _e
16
+ raise Error::Rugged, code: :local_git_repository_does_not_exist
17
+ end
18
+
19
+ def diff(from, to, **kwargs)
20
+ if to.nil?
21
+ git.lookup(from).diff_workdir
22
+ else
23
+ super
24
+ end
25
+ end
26
+
27
+ def latest_commit(_branch = nil)
28
+ git.head.target_id
29
+ end
30
+
31
+ def lookup_commit(commit)
32
+ super
33
+ rescue Rugged::OdbError => _e
34
+ raise Error::Rugged, code: :commit_not_found_in_local_git_repository, data: { commit: commit }
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,50 @@
1
+ module Dapp
2
+ module Dimg
3
+ module GitRepo
4
+ class Remote < Base
5
+ def initialize(dimg, name, url:)
6
+ super(dimg, name)
7
+
8
+ @url = url
9
+
10
+ dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.git_artifact_clone', data: { name: name }), short: true) do
11
+ begin
12
+ Rugged::Repository.clone_at(url, path, bare: true)
13
+ rescue Rugged::NetworkError, Rugged::SslError => e
14
+ raise Error::Rugged, code: :rugged_remote_error, data: { message: e.message, url: url }
15
+ end
16
+ end unless File.directory?(path)
17
+ end
18
+
19
+ def path
20
+ dimg.build_path("#{name}.git").to_s
21
+ end
22
+
23
+ def fetch!(branch = nil)
24
+ branch ||= self.branch
25
+ dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.git_artifact_fetch', data: { name: name }), short: true) do
26
+ git.fetch('origin', [branch])
27
+ end unless dimg.ignore_git_fetch || dimg.dapp.dry_run?
28
+ end
29
+
30
+ def latest_commit(branch)
31
+ git.ref("refs/remotes/origin/#{branch}").target_id
32
+ end
33
+
34
+ def lookup_commit(commit)
35
+ super
36
+ rescue Rugged::OdbError => _e
37
+ raise Error::Rugged, code: :commit_not_found_in_remote_git_repository, data: { commit: commit, url: url }
38
+ end
39
+
40
+ protected
41
+
42
+ attr_reader :url
43
+
44
+ def git
45
+ super(bare: true)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,143 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Image
4
+ module Argument
5
+ def add_change_volume(value)
6
+ add_change_option(:volume, value)
7
+ end
8
+
9
+ def add_change_expose(value)
10
+ add_change_option(:expose, value)
11
+ end
12
+
13
+ def add_change_env(**options)
14
+ add_change_option(:env, options)
15
+ end
16
+
17
+ def add_change_label(**options)
18
+ add_change_option(:label, options)
19
+ end
20
+
21
+ def add_change_cmd(value)
22
+ add_change_option(:cmd, value)
23
+ end
24
+
25
+ def add_change_entrypoint(value)
26
+ add_change_option(:entrypoint, value)
27
+ end
28
+
29
+ def add_change_onbuild(value)
30
+ add_change_option(:onbuild, value)
31
+ end
32
+
33
+ def add_change_workdir(value)
34
+ add_change_option(:workdir, value)
35
+ end
36
+
37
+ def add_change_user(value)
38
+ add_change_option(:user, value)
39
+ end
40
+
41
+ def add_service_change_label(**options)
42
+ add_service_change_option(:label, options)
43
+ end
44
+
45
+ def add_env(var, value)
46
+ add_option(:env, "#{var}=#{value}")
47
+ end
48
+
49
+ def add_volume(value)
50
+ add_option(:volume, value)
51
+ end
52
+
53
+ def add_volumes_from(value)
54
+ add_option(:'volumes-from', value)
55
+ end
56
+
57
+ def add_command(*commands)
58
+ @bash_commands.concat(commands.flatten)
59
+ end
60
+
61
+ def add_service_command(*commands)
62
+ @service_bash_commands.concat(commands.flatten)
63
+ end
64
+
65
+ def prepare_instructions(options)
66
+ options.map do |key, vals|
67
+ case key
68
+ when :cmd, :entrypoint then [vals]
69
+ when :env, :label then vals.map(&method(:options_to_args)).flatten
70
+ else vals
71
+ end.map { |val| %(#{key.to_s.upcase} #{val}) }
72
+ end.flatten
73
+ end
74
+
75
+ protected
76
+
77
+ attr_reader :bash_commands, :service_bash_commands
78
+ attr_reader :change_options, :service_change_options
79
+ attr_reader :options
80
+
81
+ def add_option(key, value)
82
+ add_option_default(options, key, value)
83
+ end
84
+
85
+ def add_change_option(key, value)
86
+ add_option_default(change_options, key, value)
87
+ end
88
+
89
+ def add_service_change_option(key, value)
90
+ add_option_default(service_change_options, key, value)
91
+ end
92
+
93
+ def add_option_default(hash, key, value)
94
+ hash[key] = (hash[key].nil? ? [value] : (hash[key] << value)).flatten
95
+ end
96
+
97
+ def from_change_options
98
+ return {} if from.nil?
99
+ [:entrypoint, :cmd].each_with_object({}) do |option, options|
100
+ options[option] = self.class.image_config_option(image_id: from.built_id, option: option)
101
+ end
102
+ end
103
+
104
+ def options_to_args(options)
105
+ options.map { |key, value| "#{key}=#{value}" }
106
+ end
107
+
108
+ def prepared_options
109
+ all_options.map { |key, vals| Array(vals).map { |val| "--#{key}=#{val}" } }.flatten.join(' ')
110
+ end
111
+
112
+ def all_options
113
+ service_options.merge(options)
114
+ end
115
+
116
+ def all_bash_commands
117
+ Array(bash_commands) + Array(service_bash_commands)
118
+ end
119
+
120
+ def service_options
121
+ { entrypoint: dapp.bash_bin, name: container_name }
122
+ end
123
+
124
+ def prepared_change
125
+ prepare_instructions(all_change_options).map { |instruction| %(-c '#{instruction}') }.join(' ')
126
+ end
127
+
128
+ def all_change_options
129
+ from_change_options.merge(change_options.merge(service_change_options) { |_, v1, v2| [v1, v2].flatten })
130
+ end
131
+
132
+ def prepared_bash_command
133
+ dapp.shellout_pack prepared_commands.join(' && ')
134
+ end
135
+
136
+ def prepared_commands
137
+ return [dapp.true_bin] if all_bash_commands.empty?
138
+ all_bash_commands
139
+ end
140
+ end
141
+ end # Image
142
+ end # Dimg
143
+ end # Dapp
@@ -0,0 +1,127 @@
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(';')
109
+ size = begin
110
+ number, unit = size_field.split
111
+ coef = case unit.to_s.downcase
112
+ when 'b' then return number.to_f
113
+ when 'kb' then 1
114
+ when 'mb' then 2
115
+ when 'gb' then 3
116
+ when 'tb' then 4
117
+ end
118
+ number.to_f * (1000**coef)
119
+ end
120
+ cache[name] = { id: id, created_at: created_at, size: size }
121
+ end
122
+ end
123
+ end
124
+ end # Docker
125
+ end # Image
126
+ end # Dimg
127
+ end # Dapp
@@ -0,0 +1,32 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Image
4
+ class Scratch < Stage
5
+ def initialize(**_kwargs)
6
+ super
7
+ @from_archives = []
8
+ end
9
+
10
+ def add_archive(*archives)
11
+ @from_archives.concat(archives.flatten)
12
+ end
13
+
14
+ def build!(**_kwargs)
15
+ raise
16
+
17
+ # FIXME: system-shellout rejected
18
+ # build_from_command = if from_archives.empty?
19
+ # "#{dapp.tar_bin} c --files-from /dev/null"
20
+ # else
21
+ # "#{dapp.cat_bin} #{from_archives.join(' ')}"
22
+ # end
23
+ # @built_id = dapp.system_shellout!("#{build_from_command} | docker import #{prepared_change} - ").stdout.strip
24
+ end
25
+
26
+ protected
27
+
28
+ attr_accessor :from_archives
29
+ end # Stage
30
+ end # Image
31
+ end # Dimg
32
+ end # Dapp
@@ -0,0 +1,95 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Image
4
+ class Stage < Docker
5
+ include Argument
6
+
7
+ def initialize(name:, dapp:, built_id: nil, from: nil)
8
+ @container_name = "#{name[/[[^:].]*/]}.#{SecureRandom.hex(4)}"
9
+ @built_id = built_id
10
+
11
+ @bash_commands = []
12
+ @service_bash_commands = []
13
+ @options = {}
14
+ @change_options = {}
15
+ @service_change_options = {}
16
+
17
+ super(name: name, dapp: dapp, from: from)
18
+ end
19
+
20
+ def built_id
21
+ @built_id ||= id
22
+ end
23
+
24
+ def build!
25
+ run!
26
+ @built_id = commit!
27
+ ensure
28
+ dapp.shellout("docker rm #{container_name}")
29
+ end
30
+
31
+ def built?
32
+ !built_id.nil?
33
+ end
34
+
35
+ def export!(name)
36
+ tag!(name).tap do |image|
37
+ image.push!
38
+ image.untag!
39
+ end
40
+ end
41
+
42
+ def tag!(name)
43
+ clone!(name).tap do |image|
44
+ self.class.tag!(id: image.built_id, tag: image.name)
45
+ end
46
+ end
47
+
48
+ def import!(name)
49
+ clone!(name).tap do |image|
50
+ image.pull!
51
+ @built_id = image.built_id
52
+ save_in_cache!
53
+ image.untag!
54
+ end
55
+ end
56
+
57
+ def save_in_cache!
58
+ dapp.log_warning(desc: { code: :another_image_already_tagged }) if !(existed_id = id).nil? && built_id != existed_id
59
+ self.class.tag!(id: built_id, tag: name)
60
+ end
61
+
62
+ def labels
63
+ raise Error::Build, code: :image_not_exist, data: { name: name } if built_id.nil?
64
+ self.class.image_config_option(image_id: built_id, option: 'labels')
65
+ end
66
+
67
+ protected
68
+
69
+ attr_reader :container_name
70
+
71
+ def run!
72
+ raise Error::Build, code: :built_id_not_defined if from.built_id.nil?
73
+ dapp.shellout!("docker run #{prepared_options} #{from.built_id} -ec '#{prepared_bash_command}'", log_verbose: true)
74
+ rescue Error::Shellout => error
75
+ dapp.log_warning(desc: { code: :launched_command, data: { command: prepared_commands.join(' && ') }, context: :container })
76
+
77
+ raise unless dapp.introspect_error? || dapp.introspect_before_error?
78
+ built_id = dapp.introspect_error? ? commit! : from.built_id
79
+ raise Exception::IntrospectImage, data: { built_id: built_id,
80
+ options: prepared_options,
81
+ rmi: dapp.introspect_error?,
82
+ error: error }
83
+ end
84
+
85
+ def commit!
86
+ dapp.shellout!("docker commit #{prepared_change} #{container_name}").stdout.strip
87
+ end
88
+
89
+ def clone!(name)
90
+ self.class.new(name: name, dapp: dapp, built_id: built_id)
91
+ end
92
+ end # Stage
93
+ end # Image
94
+ end # Dimg
95
+ end # Dapp