dapp 0.11.0 → 0.12.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 (154) hide show
  1. checksums.yaml +4 -4
  2. data/config/en/net_status.yml +36 -4
  3. data/lib/dapp.rb +84 -36
  4. data/lib/dapp/cli.rb +3 -2
  5. data/lib/dapp/cli/command/base.rb +69 -0
  6. data/lib/dapp/config/config.rb +17 -0
  7. data/lib/dapp/config/directive/base.rb +90 -3
  8. data/lib/dapp/dapp.rb +6 -14
  9. data/lib/dapp/dapp/dappfile.rb +20 -27
  10. data/lib/dapp/dapp/deps/base.rb +2 -2
  11. data/lib/dapp/dapp/lock.rb +1 -1
  12. data/lib/dapp/dapp/logging/base.rb +11 -7
  13. data/lib/dapp/dapp/logging/process.rb +4 -2
  14. data/lib/dapp/dapp/shellout/base.rb +2 -2
  15. data/lib/dapp/dapp/ssh_agent.rb +2 -2
  16. data/lib/dapp/deployment.rb +1 -0
  17. data/lib/dapp/deployment/app.rb +120 -0
  18. data/lib/dapp/deployment/cli/cli.rb +1 -0
  19. data/lib/dapp/deployment/cli/command/base.rb +14 -0
  20. data/lib/dapp/deployment/cli/command/deployment.rb +21 -0
  21. data/lib/dapp/deployment/cli/command/deployment/apply.rb +26 -0
  22. data/lib/dapp/deployment/cli/command/deployment/minikube_setup.rb +13 -0
  23. data/lib/dapp/deployment/cli/command/deployment/mrproper.rb +13 -0
  24. data/lib/dapp/deployment/cli/command/deployment/secret_generate.rb +13 -0
  25. data/lib/dapp/deployment/cli/command/deployment/secret_key_generate.rb +13 -0
  26. data/lib/dapp/deployment/config/config.rb +46 -0
  27. data/lib/dapp/deployment/config/directive/app.rb +28 -0
  28. data/lib/dapp/deployment/config/directive/app/instance_methods.rb +51 -0
  29. data/lib/dapp/deployment/config/directive/base.rb +13 -0
  30. data/lib/dapp/deployment/config/directive/deployment.rb +11 -0
  31. data/lib/dapp/deployment/config/directive/expose.rb +68 -0
  32. data/lib/dapp/deployment/config/directive/group.rb +27 -0
  33. data/lib/dapp/deployment/config/directive/job.rb +28 -0
  34. data/lib/dapp/deployment/config/directive/mod/group.rb +22 -0
  35. data/lib/dapp/deployment/config/directive/mod/jobs.rb +26 -0
  36. data/lib/dapp/deployment/config/directive/namespace.rb +26 -0
  37. data/lib/dapp/deployment/config/directive/namespace/instance_methods.rb +37 -0
  38. data/lib/dapp/deployment/core_ext/hash.rb +19 -0
  39. data/lib/dapp/deployment/dapp/command/apply.rb +83 -0
  40. data/lib/dapp/deployment/dapp/command/common.rb +17 -0
  41. data/lib/dapp/deployment/dapp/command/minikube_setup.rb +393 -0
  42. data/lib/dapp/deployment/dapp/command/mrproper.rb +12 -0
  43. data/lib/dapp/deployment/dapp/command/secret_generate.rb +17 -0
  44. data/lib/dapp/deployment/dapp/command/secret_key_generate.rb +13 -0
  45. data/lib/dapp/deployment/dapp/dapp.rb +18 -0
  46. data/lib/dapp/deployment/dapp/dappfile.rb +23 -0
  47. data/lib/dapp/deployment/deployment.rb +46 -0
  48. data/lib/dapp/deployment/error/app.rb +7 -0
  49. data/lib/dapp/deployment/error/base.rb +7 -0
  50. data/lib/dapp/deployment/error/command.rb +7 -0
  51. data/lib/dapp/deployment/error/config.rb +7 -0
  52. data/lib/dapp/deployment/error/deployment.rb +7 -0
  53. data/lib/dapp/deployment/error/kubernetes.rb +7 -0
  54. data/lib/dapp/deployment/kube_app.rb +277 -0
  55. data/lib/dapp/deployment/kube_base.rb +97 -0
  56. data/lib/dapp/deployment/kube_deployment.rb +51 -0
  57. data/lib/dapp/deployment/kubernetes.rb +174 -0
  58. data/lib/dapp/deployment/kubernetes/error.rb +20 -0
  59. data/lib/dapp/deployment/mod/jobs.rb +37 -0
  60. data/lib/dapp/deployment/mod/namespace.rb +58 -0
  61. data/lib/dapp/deployment/mod/system_environments.rb +30 -0
  62. data/lib/dapp/deployment/secret.rb +93 -0
  63. data/lib/dapp/dimg/artifact.rb +1 -1
  64. data/lib/dapp/dimg/build/stage/artifact_default.rb +35 -23
  65. data/lib/dapp/dimg/build/stage/base.rb +1 -1
  66. data/lib/dapp/dimg/build/stage/before_setup.rb +0 -2
  67. data/lib/dapp/dimg/build/stage/build_artifact.rb +0 -2
  68. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +2 -2
  69. data/lib/dapp/dimg/build/stage/install/install.rb +0 -1
  70. data/lib/dapp/dimg/build/stage/setup/setup.rb +0 -1
  71. data/lib/dapp/dimg/cli/cli.rb +1 -1
  72. data/lib/dapp/dimg/cli/command/base.rb +14 -0
  73. data/lib/dapp/dimg/cli/{dimg.rb → command/dimg.rb} +5 -7
  74. data/lib/dapp/dimg/cli/{bp.rb → command/dimg/bp.rb} +3 -3
  75. data/lib/dapp/dimg/cli/{build.rb → command/dimg/build.rb} +3 -3
  76. data/lib/dapp/dimg/cli/{build_context.rb → command/dimg/build_context.rb} +3 -3
  77. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/export.rb +4 -4
  78. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/import.rb +4 -4
  79. data/lib/dapp/dimg/cli/{cleanup.rb → command/dimg/cleanup.rb} +3 -3
  80. data/lib/dapp/dimg/cli/{list.rb → command/dimg/list.rb} +3 -3
  81. data/lib/dapp/dimg/cli/{mrproper.rb → command/dimg/mrproper.rb} +4 -4
  82. data/lib/dapp/dimg/cli/{push.rb → command/dimg/push.rb} +5 -5
  83. data/lib/dapp/dimg/cli/{run.rb → command/dimg/run.rb} +8 -8
  84. data/lib/dapp/dimg/cli/{spush.rb → command/dimg/spush.rb} +4 -4
  85. data/lib/dapp/dimg/cli/{stage_image.rb → command/dimg/stage_image.rb} +3 -3
  86. data/lib/dapp/dimg/cli/{stages.rb → command/dimg/stages.rb} +3 -3
  87. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_local.rb +6 -6
  88. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_repo.rb +5 -5
  89. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/flush_local.rb +5 -5
  90. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/flush_repo.rb +6 -6
  91. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/pull.rb +6 -6
  92. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/push.rb +6 -6
  93. data/lib/dapp/dimg/cli/{tag.rb → command/dimg/tag.rb} +6 -6
  94. data/lib/dapp/dimg/config/config.rb +20 -0
  95. data/lib/dapp/dimg/config/directive/artifact_dimg.rb +19 -0
  96. data/lib/dapp/dimg/config/directive/artifact_group.rb +45 -0
  97. data/lib/dapp/dimg/config/directive/dimg.rb +36 -0
  98. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +149 -0
  99. data/lib/dapp/dimg/config/directive/dimg/validation.rb +128 -0
  100. data/lib/dapp/dimg/config/directive/dimg_group.rb +64 -0
  101. data/lib/dapp/dimg/config/directive/dimg_group_base.rb +46 -0
  102. data/lib/dapp/dimg/config/directive/docker/dimg.rb +4 -4
  103. data/lib/dapp/dimg/config/directive/shell/dimg.rb +1 -1
  104. data/lib/dapp/dimg/dapp/command/bp.rb +4 -4
  105. data/lib/dapp/dimg/dapp/command/build.rb +2 -2
  106. data/lib/dapp/dimg/dapp/command/build_context/common.rb +2 -2
  107. data/lib/dapp/dimg/dapp/command/build_context/export.rb +1 -1
  108. data/lib/dapp/dimg/dapp/command/build_context/import.rb +1 -1
  109. data/lib/dapp/dimg/dapp/command/cleanup.rb +1 -1
  110. data/lib/dapp/dimg/dapp/command/common.rb +19 -4
  111. data/lib/dapp/dimg/dapp/command/list.rb +1 -1
  112. data/lib/dapp/dimg/dapp/command/mrproper.rb +3 -3
  113. data/lib/dapp/dimg/dapp/command/push.rb +6 -5
  114. data/lib/dapp/dimg/dapp/command/run.rb +1 -1
  115. data/lib/dapp/dimg/dapp/command/spush.rb +4 -3
  116. data/lib/dapp/dimg/dapp/command/stage_image.rb +2 -2
  117. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +1 -1
  118. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +3 -3
  119. data/lib/dapp/dimg/dapp/command/stages/common.rb +4 -4
  120. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +1 -1
  121. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +1 -1
  122. data/lib/dapp/dimg/dapp/command/stages/pull.rb +5 -4
  123. data/lib/dapp/dimg/dapp/command/stages/push.rb +4 -3
  124. data/lib/dapp/dimg/dapp/command/tag.rb +3 -2
  125. data/lib/dapp/dimg/dapp/dapp.rb +33 -0
  126. data/lib/dapp/dimg/dapp/dappfile.rb +25 -0
  127. data/lib/dapp/dimg/dimg.rb +3 -3
  128. data/lib/dapp/dimg/dimg/path.rb +1 -1
  129. data/lib/dapp/dimg/dimg/stages.rb +1 -1
  130. data/lib/dapp/dimg/dimg/tags.rb +5 -5
  131. data/lib/dapp/dimg/docker_registry.rb +3 -7
  132. data/lib/dapp/dimg/git_artifact.rb +30 -14
  133. data/lib/dapp/dimg/git_repo/base.rb +13 -1
  134. data/lib/dapp/dimg/git_repo/own.rb +9 -1
  135. data/lib/dapp/dimg/image/docker.rb +9 -3
  136. data/lib/dapp/helper/cli.rb +3 -1
  137. data/lib/dapp/helper/net_status.rb +5 -1
  138. data/lib/dapp/helper/trivia.rb +1 -1
  139. data/lib/dapp/version.rb +2 -2
  140. metadata +84 -38
  141. data/lib/dapp/cli/base.rb +0 -63
  142. data/lib/dapp/config/base.rb +0 -54
  143. data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +0 -23
  144. data/lib/dapp/dimg/cli/base.rb +0 -16
  145. data/lib/dapp/dimg/config/artifact_dimg.rb +0 -17
  146. data/lib/dapp/dimg/config/artifact_group.rb +0 -43
  147. data/lib/dapp/dimg/config/base.rb +0 -7
  148. data/lib/dapp/dimg/config/dimg.rb +0 -24
  149. data/lib/dapp/dimg/config/dimg/instance_methods.rb +0 -179
  150. data/lib/dapp/dimg/config/dimg/validation.rb +0 -126
  151. data/lib/dapp/dimg/config/dimg_group.rb +0 -61
  152. data/lib/dapp/dimg/config/dimg_group_base.rb +0 -54
  153. data/lib/dapp/dimg/config/dimg_group_main.rb +0 -22
  154. data/lib/dapp/dimg/dapp/command.rb +0 -21
@@ -1,6 +1,6 @@
1
- module Dapp
2
- module Dimg
3
- module CLI
1
+ module Dapp::Dimg::CLI
2
+ module Command
3
+ class Dimg < ::Dapp::CLI
4
4
  class StageImage < Base
5
5
  banner <<BANNER.freeze
6
6
  Usage:
@@ -1,6 +1,6 @@
1
- module Dapp
2
- module Dimg
3
- module CLI
1
+ module Dapp::Dimg::CLI
2
+ module Command
3
+ class Dimg < ::Dapp::CLI
4
4
  class Stages < ::Dapp::CLI
5
5
  SUBCOMMANDS = ['flush local', 'flush repo', 'cleanup local', 'cleanup repo', 'push', 'pull'].freeze
6
6
 
@@ -1,7 +1,7 @@
1
- module Dapp
2
- module Dimg
3
- module CLI
4
- class Stages
1
+ module Dapp::Dimg::CLI
2
+ module Command
3
+ class Dimg < ::Dapp::CLI
4
+ class Stages < ::Dapp::CLI
5
5
  class CleanupLocal < Base
6
6
  banner <<BANNER.freeze
7
7
  Usage:
@@ -27,11 +27,11 @@ BANNER
27
27
  def run(argv = ARGV)
28
28
  self.class.parse_options(self, argv)
29
29
  repository = repo
30
- ::Dapp::Dapp.new(cli_options: config, dimgs_patterns: cli_arguments).send(run_method, repository)
30
+ ::Dapp::Dapp.new(options: cli_options(dimgs_patterns: cli_arguments, repo: repository)).send(run_method)
31
31
  end
32
32
 
33
33
  def repo
34
- config[:proper_repo_cache] ? self.class.required_argument(self) : nil
34
+ config[:proper_repo_cache] ? self.class.required_argument(self, 'repo') : nil
35
35
  end
36
36
 
37
37
  def run_method
@@ -1,7 +1,7 @@
1
- module Dapp
2
- module Dimg
3
- module CLI
4
- class Stages
1
+ module Dapp::Dimg::CLI
2
+ module Command
3
+ class Dimg < ::Dapp::CLI
4
+ class Stages < ::Dapp::CLI
5
5
  class CleanupRepo < CleanupLocal
6
6
  banner <<BANNER.freeze
7
7
  Usage:
@@ -17,7 +17,7 @@ BANNER
17
17
  end
18
18
 
19
19
  def repo
20
- self.class.required_argument(self)
20
+ self.class.required_argument(self, 'repo')
21
21
  end
22
22
  end
23
23
  end
@@ -1,7 +1,7 @@
1
- module Dapp
2
- module Dimg
3
- module CLI
4
- class Stages
1
+ module Dapp::Dimg::CLI
2
+ module Command
3
+ class Dimg < ::Dapp::CLI
4
+ class Stages < ::Dapp::CLI
5
5
  class FlushLocal < Base
6
6
  banner <<BANNER.freeze
7
7
  Usage:
@@ -14,7 +14,7 @@ Options:
14
14
  BANNER
15
15
  def run(argv = ARGV)
16
16
  self.class.parse_options(self, argv)
17
- ::Dapp::Dapp.new(cli_options: config, dimgs_patterns: cli_arguments).stages_flush_local
17
+ ::Dapp::Dapp.new(options: cli_options(dimgs_patterns: cli_arguments)).stages_flush_local
18
18
  end
19
19
  end
20
20
  end
@@ -1,7 +1,7 @@
1
- module Dapp
2
- module Dimg
3
- module CLI
4
- class Stages
1
+ module Dapp::Dimg::CLI
2
+ module Command
3
+ class Dimg < ::Dapp::CLI
4
+ class Stages < ::Dapp::CLI
5
5
  class FlushRepo < Base
6
6
  banner <<BANNER.freeze
7
7
  Usage:
@@ -14,8 +14,8 @@ Options:
14
14
  BANNER
15
15
  def run(argv = ARGV)
16
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)
17
+ repo = self.class.required_argument(self, 'repo')
18
+ ::Dapp::Dapp.new(options: cli_options(dimgs_patterns: cli_arguments, repo: repo)).stages_flush_repo
19
19
  end
20
20
  end
21
21
  end
@@ -1,7 +1,7 @@
1
- module Dapp
2
- module Dimg
3
- module CLI
4
- class Stages
1
+ module Dapp::Dimg::CLI
2
+ module Command
3
+ class Dimg < ::Dapp::CLI
4
+ class Stages < ::Dapp::CLI
5
5
  class Pull < Base
6
6
  banner <<BANNER.freeze
7
7
  Usage:
@@ -18,8 +18,8 @@ BANNER
18
18
 
19
19
  def run(argv = ARGV)
20
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)
21
+ repo = self.class.required_argument(self, 'repo')
22
+ ::Dapp::Dapp.new(options: cli_options(dimgs_patterns: cli_arguments, repo: repo)).stages_pull
23
23
  end
24
24
  end
25
25
  end
@@ -1,7 +1,7 @@
1
- module Dapp
2
- module Dimg
3
- module CLI
4
- class Stages
1
+ module Dapp::Dimg::CLI
2
+ module Command
3
+ class Dimg < ::Dapp::CLI
4
+ class Stages < ::Dapp::CLI
5
5
  class Push < Base
6
6
  banner <<BANNER.freeze
7
7
  Usage:
@@ -14,8 +14,8 @@ Options:
14
14
  BANNER
15
15
  def run(argv = ARGV)
16
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)
17
+ repo = self.class.required_argument(self, 'repo')
18
+ ::Dapp::Dapp.new(options: cli_options(dimgs_patterns: cli_arguments, repo: repo)).stages_push
19
19
  end
20
20
  end
21
21
  end
@@ -1,12 +1,12 @@
1
- module Dapp
2
- module Dimg
3
- module CLI
1
+ module Dapp::Dimg::CLI
2
+ module Command
3
+ class Dimg < ::Dapp::CLI
4
4
  class Tag < Base
5
5
  banner <<BANNER.freeze
6
6
  Usage:
7
7
 
8
8
  dapp dimg tag [options] [DIMG] TAG
9
-
9
+
10
10
  DIMG Dapp image to process [default: *].
11
11
  REPO Pushed image name.
12
12
 
@@ -15,8 +15,8 @@ BANNER
15
15
 
16
16
  def run(argv = ARGV)
17
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)
18
+ tag = self.class.required_argument(self, 'tag')
19
+ ::Dapp::Dapp.new(options: cli_options(dimgs_patterns: cli_arguments)).public_send(class_to_lowercase, tag)
20
20
  end
21
21
  end
22
22
  end
@@ -0,0 +1,20 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Config
5
+ def self.included(base)
6
+ base.include(Directive::DimgGroupBase)
7
+ end
8
+
9
+ protected
10
+
11
+ def dimg_config_validate!
12
+ raise Error::Config, code: :dimg_name_required if _dimg.any? { |dimg| dimg._name.nil? } && _dimg.size > 1
13
+ _dimg.each(&:validate!)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ ::Dapp::Config::Config.send(:include, ::Dapp::Dimg::Config::Config)
@@ -0,0 +1,19 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class ArtifactDimg < Dimg
6
+ def validate_scratch!
7
+ end
8
+
9
+ def validate_artifacts_artifacts!
10
+ end
11
+
12
+ def validated_artifacts
13
+ _git_artifact._local + _git_artifact._remote
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,45 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class ArtifactGroup < DimgGroup
6
+ def export(*args, &blk)
7
+ artifact_config = pass_to(ArtifactDimg.new("artifact-#{SecureRandom.hex(2)}", dapp: dapp))
8
+ artifact = Artifact.new(dapp: dapp, config: artifact_config)
9
+ artifact.export(*args, &blk).tap do
10
+ _export.concat artifact._export
11
+ end
12
+ end
13
+
14
+ def _shell(&blk)
15
+ @_shell ||= Shell::Artifact.new(dapp: dapp, &blk)
16
+ end
17
+
18
+ def _docker(&blk)
19
+ @_docker ||= Docker::Artifact.new(dapp: dapp, &blk)
20
+ end
21
+
22
+ def _export
23
+ @_export ||= []
24
+ end
25
+
26
+ def validate!
27
+ _export.each(&:validate!)
28
+ end
29
+
30
+ undef :artifact
31
+ undef :dimg
32
+ undef :dimg_group
33
+
34
+ protected
35
+
36
+ def check_dimg_directive_order(_directive)
37
+ end
38
+
39
+ def check_dimg_group_directive_order(_directive)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,36 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class Dimg < Base
6
+ include Validation
7
+ include InstanceMethods
8
+
9
+ attr_reader :_name
10
+
11
+ def initialize(name, dapp:)
12
+ self._name = name
13
+ super(dapp: dapp)
14
+ end
15
+
16
+ def _name=(name)
17
+ sub_directive_eval do
18
+ return self if name.nil?
19
+ name = name.to_s
20
+ validate_compliance!(dimg_name_pattern, name, :dimg_name_incorrect)
21
+ @_name = name
22
+ end
23
+ end
24
+
25
+ protected
26
+
27
+ def dimg_name_pattern
28
+ separator = '[_\.]|(__)|(-*)'
29
+ alpha_numeric = '[a-z0-9]'
30
+ "^#{alpha_numeric}(#{separator}#{alpha_numeric})*$"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,149 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Config
4
+ module Directive
5
+ class Dimg < Base
6
+ module InstanceMethods
7
+ attr_reader :_builder
8
+ attr_reader :_chef, :_shell, :_docker, :_git_artifact, :_mount, :_artifact
9
+ attr_reader :_artifact_groups
10
+
11
+ def chef(&blk)
12
+ builder(:chef)
13
+ directive_eval(_chef, &blk)
14
+ end
15
+
16
+ def shell(&blk)
17
+ builder(:shell)
18
+ directive_eval(_shell, &blk)
19
+ end
20
+
21
+ def docker(&blk)
22
+ directive_eval(_docker, &blk)
23
+ end
24
+
25
+ def artifact(&blk)
26
+ pass_to(ArtifactGroup.new(dapp: dapp), :clone_to_artifact).tap do |artifact_group|
27
+ _artifact_groups << directive_eval(artifact_group, &blk)
28
+ end
29
+ end
30
+
31
+ def git(url = nil, &blk)
32
+ type = url.nil? ? :local : :remote
33
+ _git_artifact.public_send(type, url.to_s, &blk)
34
+ end
35
+
36
+ def mount(to, &blk)
37
+ Mount.new(to, dapp: dapp, &blk).tap do |mount|
38
+ _mount << mount
39
+ end
40
+ end
41
+
42
+ def _builder
43
+ @_builder || :none
44
+ end
45
+
46
+ def _chef
47
+ @_chef ||= Chef.new(dapp: dapp)
48
+ end
49
+
50
+ def _shell
51
+ @_shell ||= Shell::Dimg.new(dapp: dapp)
52
+ end
53
+
54
+ def _docker
55
+ @_docker ||= Docker::Dimg.new(dapp: dapp)
56
+ end
57
+
58
+ def _mount
59
+ @_mount ||= []
60
+ end
61
+
62
+ def _git_artifact
63
+ @_git_artifact ||= GitArtifact.new(dapp: dapp)
64
+ end
65
+
66
+ [:build_dir, :tmp_dir].each do |mount_type|
67
+ define_method "_#{mount_type}_mount" do
68
+ _mount.select { |m| m._type == mount_type }
69
+ end
70
+ end
71
+
72
+ def _artifact_groups
73
+ @_artifact_groups ||= []
74
+ end
75
+
76
+ def _artifact
77
+ _artifact_groups.map(&:_export).flatten
78
+ end
79
+
80
+ [:before, :after].each do |order|
81
+ [:setup, :install].each do |stage|
82
+ define_method "_#{order}_#{stage}_artifact" do
83
+ _artifact.select do |art|
84
+ art.public_send("_#{order}") == stage
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ def _import_artifact
91
+ _artifact.select(&:not_associated?)
92
+ end
93
+
94
+ class GitArtifact < Base
95
+ attr_reader :_local, :_remote
96
+
97
+ def initialize(**kwargs, &blk)
98
+ @_local = []
99
+ @_remote = []
100
+
101
+ super(**kwargs, &blk)
102
+ end
103
+
104
+ def local(_, &blk)
105
+ GitArtifactLocal.new(dapp: dapp, &blk).tap do |git|
106
+ @_local << git
107
+ end
108
+ end
109
+
110
+ def remote(repo_url, &blk)
111
+ GitArtifactRemote.new(repo_url, dapp: dapp, &blk).tap do |git|
112
+ @_remote << git
113
+ end
114
+ end
115
+
116
+ def _local
117
+ @_local.map(&:_export).flatten
118
+ end
119
+
120
+ def _remote
121
+ @_remote.map(&:_export).flatten
122
+ end
123
+
124
+ def empty?
125
+ (_local + _remote).empty?
126
+ end
127
+
128
+ def validate!
129
+ (_local + _remote).each(&: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 passed_directives
141
+ [:@_chef, :@_shell, :@_docker, :@_git_artifact, :@_mount, :@_artifact_groups, :@_builder]
142
+ end
143
+ end # InstanceMethods
144
+ # rubocop:enable Metrics/ModuleLength
145
+ end # Dimg
146
+ end # Directive
147
+ end # Config
148
+ end # Dimg
149
+ end # Dapp