dapp 0.13.3 → 0.13.4

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 (88) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dapp +0 -13
  3. data/config/en/common.yml +4 -2
  4. data/config/en/net_status.yml +15 -3
  5. data/lib/dapp.rb +11 -6
  6. data/lib/dapp/cli.rb +1 -1
  7. data/lib/dapp/cli/command/base.rb +4 -4
  8. data/lib/dapp/config/directive/base.rb +4 -2
  9. data/lib/dapp/core_ext/hash.rb +14 -0
  10. data/lib/dapp/dapp.rb +32 -6
  11. data/lib/dapp/dapp/dapp_config.rb +85 -0
  12. data/lib/dapp/dapp/dappfile.rb +4 -0
  13. data/lib/dapp/dapp/deps/base.rb +2 -2
  14. data/lib/dapp/dapp/deps/gitartifact.rb +2 -2
  15. data/lib/dapp/dapp/logging/base.rb +5 -5
  16. data/lib/dapp/dapp/logging/process.rb +5 -7
  17. data/lib/dapp/dapp/shellout/base.rb +16 -17
  18. data/lib/dapp/deployment/cli/command/deployment.rb +2 -3
  19. data/lib/dapp/deployment/dapp/command/apply.rb +6 -6
  20. data/lib/dapp/deployment/dapp/dapp.rb +0 -1
  21. data/lib/dapp/deployment/kube_app.rb +1 -1
  22. data/lib/dapp/deployment/kube_base.rb +1 -1
  23. data/lib/dapp/dimg/build/stage/artifact_base.rb +3 -8
  24. data/lib/dapp/dimg/build/stage/base.rb +57 -38
  25. data/lib/dapp/dimg/build/stage/docker_instructions.rb +1 -1
  26. data/lib/dapp/dimg/build/stage/from.rb +6 -2
  27. data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +2 -2
  28. data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +1 -5
  29. data/lib/dapp/dimg/build/stage/ga_base.rb +1 -14
  30. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +7 -31
  31. data/lib/dapp/dimg/build/stage/ga_related_dependencies_base.rb +21 -0
  32. data/lib/dapp/dimg/build/stage/import_artifact.rb +10 -3
  33. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +3 -3
  34. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +3 -3
  35. data/lib/dapp/dimg/build/stage/mod/group.rb +19 -7
  36. data/lib/dapp/dimg/build/stage/mod/logging.rb +7 -20
  37. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +1 -1
  38. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +3 -3
  39. data/lib/dapp/dimg/builder/chef.rb +2 -2
  40. data/lib/dapp/dimg/builder/chef/cookbook.rb +2 -2
  41. data/lib/dapp/dimg/cli/command/dimg.rb +1 -1
  42. data/lib/dapp/dimg/cli/command/dimg/build.rb +15 -8
  43. data/lib/dapp/dimg/config/directive/artifact_base.rb +13 -4
  44. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +1 -1
  45. data/lib/dapp/dimg/config/directive/dimg/validation.rb +6 -1
  46. data/lib/dapp/dimg/config/directive/docker/base.rb +1 -2
  47. data/lib/dapp/dimg/config/directive/git_artifact_local.rb +3 -0
  48. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +1 -1
  49. data/lib/dapp/dimg/config/directive/mount.rb +9 -1
  50. data/lib/dapp/dimg/dapp/command/build_context/export.rb +13 -15
  51. data/lib/dapp/dimg/dapp/command/build_context/import.rb +3 -3
  52. data/lib/dapp/dimg/dapp/command/cleanup.rb +1 -1
  53. data/lib/dapp/dimg/dapp/command/common.rb +17 -6
  54. data/lib/dapp/dimg/dapp/command/mrproper.rb +9 -4
  55. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +19 -17
  56. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +1 -1
  57. data/lib/dapp/dimg/dimg.rb +5 -5
  58. data/lib/dapp/dimg/dimg/git_artifact.rb +11 -6
  59. data/lib/dapp/dimg/dimg/path.rb +2 -6
  60. data/lib/dapp/dimg/git_artifact.rb +118 -66
  61. data/lib/dapp/dimg/git_repo/base.rb +1 -1
  62. data/lib/dapp/dimg/git_repo/own.rb +1 -1
  63. data/lib/dapp/dimg/git_repo/remote.rb +23 -14
  64. data/lib/dapp/dimg/image/docker.rb +11 -11
  65. data/lib/dapp/dimg/image/scratch.rb +33 -9
  66. data/lib/dapp/dimg/image/stage.rb +3 -3
  67. data/lib/dapp/helper/cli.rb +8 -0
  68. data/lib/dapp/helper/tar.rb +31 -0
  69. data/lib/dapp/kube/cli/command/kube.rb +5 -4
  70. data/lib/dapp/kube/cli/command/kube/deploy.rb +5 -0
  71. data/lib/dapp/kube/cli/command/kube/minikube_setup.rb +13 -0
  72. data/lib/dapp/kube/cli/command/kube/{secret_file_encrypt.rb → secret_extract.rb} +3 -3
  73. data/lib/dapp/kube/cli/command/kube/secret_generate.rb +11 -1
  74. data/lib/dapp/kube/client.rb +1 -1
  75. data/lib/dapp/kube/client/error.rb +1 -1
  76. data/lib/dapp/kube/dapp/command/common.rb +29 -4
  77. data/lib/dapp/kube/dapp/command/deploy.rb +43 -21
  78. data/lib/dapp/kube/dapp/command/dismiss.rb +1 -1
  79. data/lib/dapp/{deployment → kube}/dapp/command/minikube_setup.rb +12 -12
  80. data/lib/dapp/kube/dapp/command/secret_extract.rb +46 -0
  81. data/lib/dapp/kube/dapp/command/secret_generate.rb +33 -4
  82. data/lib/dapp/kube/dapp/dapp.rb +3 -2
  83. data/lib/dapp/kube/error/kubernetes.rb +7 -0
  84. data/lib/dapp/kube/secret.rb +1 -1
  85. data/lib/dapp/version.rb +2 -2
  86. metadata +11 -7
  87. data/lib/dapp/deployment/cli/command/deployment/minikube_setup.rb +0 -13
  88. data/lib/dapp/kube/dapp/command/secret_file_encrypt.rb +0 -22
@@ -10,10 +10,10 @@ module Dapp
10
10
 
11
11
  def base_container
12
12
  @base_container ||= begin
13
- if shellout("docker inspect #{base_container_name}").exitstatus.nonzero?
13
+ if shellout("#{host_docker_bin} inspect #{base_container_name}").exitstatus.nonzero?
14
14
  log_secondary_process(t(code: 'process.base_container_creating'), short: true) do
15
15
  shellout!(
16
- ['docker create',
16
+ ["#{host_docker_bin} create",
17
17
  "--name #{base_container_name}",
18
18
  "--volume /.dapp/deps/base/#{BASE_VERSION} dappdeps/base:#{BASE_VERSION}"].join(' ')
19
19
  )
@@ -10,10 +10,10 @@ module Dapp
10
10
 
11
11
  def gitartifact_container
12
12
  @gitartifact_container ||= begin
13
- if shellout("docker inspect #{gitartifact_container_name}").exitstatus.nonzero?
13
+ if shellout("#{host_docker_bin} inspect #{gitartifact_container_name}").exitstatus.nonzero?
14
14
  log_secondary_process(t(code: 'process.gitartifact_container_creating'), short: true) do
15
15
  shellout!(
16
- ['docker create',
16
+ ["#{host_docker_bin} create",
17
17
  "--name #{gitartifact_container_name}",
18
18
  "--volume /.dapp/deps/gitartifact/#{GITARTIFACT_VERSION}",
19
19
  "dappdeps/gitartifact:#{GITARTIFACT_VERSION}"].join(' ')
@@ -3,15 +3,15 @@ module Dapp
3
3
  module Logging
4
4
  module Base
5
5
  def log_quiet?
6
- options[:log_quiet]
6
+ option_quiet
7
7
  end
8
8
 
9
9
  def log_time?
10
- options[:log_time]
10
+ option_time
11
11
  end
12
12
 
13
13
  def log_verbose?
14
- options[:log_verbose]
14
+ option_verbose
15
15
  end
16
16
 
17
17
  def ignore_config_warning?
@@ -27,11 +27,11 @@ module Dapp
27
27
  end
28
28
 
29
29
  def dry_run?
30
- options[:dry_run]
30
+ option_dry_run
31
31
  end
32
32
 
33
33
  def dev_mode?
34
- options[:dev].nil? ? config._dev_mode : options[:dev]
34
+ option_dev
35
35
  end
36
36
 
37
37
  def log_info(*args, **kwargs)
@@ -25,7 +25,7 @@ module Dapp
25
25
  end
26
26
 
27
27
  # rubocop:disable Metrics/ParameterLists
28
- def log_process(message, process: nil, short: false, quiet: false, verbose: nil, style: {}, status: {}, &blk)
28
+ def log_process(message, process: nil, short: false, quiet: false, style: {}, status: {}, &blk)
29
29
  style[:message] ||= DEFAULT_STYLE[:message]
30
30
  style[:process] ||= DEFAULT_STYLE[:process]
31
31
  style[:failed] ||= DEFAULT_STYLE[:failed]
@@ -34,21 +34,19 @@ module Dapp
34
34
  status[:success] ||= t(code: 'status.success.default')
35
35
  status[:failed] ||= t(code: 'status.failed.default')
36
36
 
37
- is_verbose = (verbose.nil? ? log_verbose? : verbose) && !short
38
-
39
37
  if quiet
40
38
  log_process_quiet(message.to_s, style: style, status: status, &blk)
41
- elsif is_verbose
39
+ elsif short
40
+ log_process_short(message.to_s, style: style, status: status, &blk)
41
+ else
42
42
  process ||= t(code: 'status.process.default')
43
43
  log_process_verbose(message.to_s, process: process, style: style, status: status, &blk)
44
- else
45
- log_process_short(message.to_s, style: style, status: status, &blk)
46
44
  end
47
45
  end
48
46
  # rubocop:enable Metrics/ParameterLists
49
47
 
50
48
  def log_secondary_process(message, **kwargs, &blk)
51
- log_process(message, **kwargs.merge(style: { message: :secondary, success: :secondary }, quiet: !log_verbose?), &blk)
49
+ log_process(message, **kwargs.merge(style: { message: :secondary, success: :secondary }), &blk)
52
50
  end
53
51
 
54
52
  protected
@@ -28,9 +28,12 @@ module Dapp
28
28
  end
29
29
 
30
30
  def shellout!(*args, **kwargs)
31
- shellout_with_logging(**kwargs) do |options|
32
- shellout(*args, **options).tap(&:error!)
31
+ if instance_of? Dapp
32
+ default_kwarg = proc { |key, value| kwargs[key] = value unless kwargs.key?(key) }
33
+ default_kwarg.call(:quiet, log_quiet?)
34
+ default_kwarg.call(:time, log_time?)
33
35
  end
36
+ _shellout_with_logging!(*args, **kwargs)
34
37
  end
35
38
 
36
39
  def shellout_pack(command)
@@ -49,22 +52,18 @@ module Dapp
49
52
 
50
53
  protected
51
54
 
52
- def shellout_with_logging(log_verbose: false, force_log: false, **kwargs)
53
- return yield(**kwargs) unless instance_of? Dapp
54
-
55
- begin
56
- stream = Stream.new
57
- if force_log || (log_verbose && log_verbose?)
58
- kwargs[:live_stream] = Proxy::Base.new(stream, STDOUT, with_time: log_time?)
59
- else
60
- kwargs[:live_stdout] = Proxy::Base.new(stream, with_time: log_time?)
61
- end
62
- kwargs[:live_stderr] = Proxy::Error.new(stream, with_time: log_time?)
63
-
64
- yield(**kwargs)
65
- rescue ::Mixlib::ShellOut::ShellCommandFailed => e
66
- raise Error::Shellout, code: class_to_lowercase(e.class), data: { stream: stream.show }
55
+ def _shellout_with_logging!(*args, verbose: false, quiet: true, time: false, **kwargs)
56
+ stream = Stream.new
57
+ if verbose && !quiet
58
+ kwargs[:live_stream] = Proxy::Base.new(stream, STDOUT, with_time: time)
59
+ else
60
+ kwargs[:live_stdout] = Proxy::Base.new(stream, with_time: time)
67
61
  end
62
+ kwargs[:live_stderr] = Proxy::Error.new(stream, with_time: time)
63
+
64
+ shellout(*args, **kwargs).tap(&:error!)
65
+ rescue ::Mixlib::ShellOut::ShellCommandFailed => e
66
+ raise Error::Shellout, code: Helper::Trivia.class_to_lowercase(e.class), data: { stream: stream.show }
68
67
  end
69
68
  end
70
69
  end
@@ -1,15 +1,14 @@
1
1
  module Dapp::Deployment::CLI
2
2
  module Command
3
3
  class Deployment < ::Dapp::CLI
4
- SUBCOMMANDS = ['apply', 'mrproper', 'minikube setup'].freeze
4
+ SUBCOMMANDS = ['apply', 'mrproper'].freeze
5
5
 
6
6
  banner <<BANNER.freeze
7
- Usage: dapp deployment sub-command [sub-command options]
7
+ Usage: dapp deployment subcommand [subcommand options]
8
8
 
9
9
  Available subcommands: (for details, dapp deployment SUB-COMMAND --help)
10
10
 
11
11
  dapp deployment apply [options] [APP ...] REPO
12
- dapp deployment minikube setup
13
12
  dapp deployment mrproper [options]
14
13
 
15
14
  Options:
@@ -10,14 +10,14 @@ module Dapp
10
10
  validate_repo_name!(repo)
11
11
  validate_tag_name!(image_version)
12
12
 
13
- log_process("Applying deployment #{deployment.name}", verbose: true) do
13
+ log_process("Applying deployment #{deployment.name}") do
14
14
  with_log_indent do
15
15
  deployment.kube.delete_unknown_resources!
16
16
 
17
17
  deployment.to_kube_bootstrap_pods(repo, image_version).each do |name, spec|
18
18
  next if deployment.kube.pod_succeeded?(name)
19
19
  deployment.kube.delete_pod!(name) if deployment.kube.pod_exist?(name)
20
- log_process(:bootstrap, verbose: true) do
20
+ log_process(:bootstrap) do
21
21
  with_log_indent do
22
22
  deployment.kube.run_job!(spec, name)
23
23
  end
@@ -25,7 +25,7 @@ module Dapp
25
25
  end
26
26
 
27
27
  deployment.to_kube_before_apply_job_pods(repo, image_version).each do |name, spec|
28
- log_process(:before_apply_job, verbose: true) do
28
+ log_process(:before_apply_job) do
29
29
  deployment.kube.delete_pod!(name) if deployment.kube.pod_exist?(name)
30
30
  with_log_indent do
31
31
  deployment.kube.run_job!(spec, name)
@@ -34,7 +34,7 @@ module Dapp
34
34
  end
35
35
 
36
36
  deployment.apps.each do |app|
37
- log_process("Applying app #{app.name}", verbose: true) do
37
+ log_process("Applying app #{app.name}") do
38
38
  with_log_indent do
39
39
  (app.kube.existing_deployments_names - app.to_kube_deployments(repo, image_version).keys).each do |deployment_name|
40
40
  app.kube.delete_deployment!(deployment_name)
@@ -47,7 +47,7 @@ module Dapp
47
47
  app.to_kube_bootstrap_pods(repo, image_version).each do |name, spec|
48
48
  next if app.kube.pod_succeeded?(name)
49
49
  app.kube.delete_pod!(name) if app.kube.pod_exist?(name)
50
- log_process(:bootstrap, verbose: true) do
50
+ log_process(:bootstrap) do
51
51
  with_log_indent do
52
52
  app.kube.run_job!(spec, name)
53
53
  end
@@ -55,7 +55,7 @@ module Dapp
55
55
  end
56
56
 
57
57
  app.to_kube_before_apply_job_pods(repo, image_version).each do |name, spec|
58
- log_process(:before_apply_job, verbose: true) do
58
+ log_process(:before_apply_job) do
59
59
  app.kube.delete_pod!(name) if app.kube.pod_exist?(name)
60
60
  with_log_indent do
61
61
  app.kube.run_job!(spec, name)
@@ -3,7 +3,6 @@ module Dapp
3
3
  module Dapp
4
4
  module Dapp
5
5
  include Command::Apply
6
- include Command::MinikubeSetup
7
6
  include Command::Mrproper
8
7
  include Command::Common
9
8
 
@@ -117,7 +117,7 @@ module Dapp
117
117
  # NOTICE: Однако, при обновлении deployment ревизия сбрасывается и ожидание переустановки этой ревизии
118
118
  # NOTICE: является одним из критериев завершения ожидания на данный момент.
119
119
  def _wait_for_deployment(d, old_d_revision: nil)
120
- app.deployment.dapp.log_process("Waiting for kubernetes Deployment #{d['metadata']['name']} readiness", verbose: true) do
120
+ app.deployment.dapp.log_process("Waiting for kubernetes Deployment #{d['metadata']['name']} readiness") do
121
121
  app.deployment.dapp.with_log_indent do
122
122
  known_events_by_pod = {}
123
123
 
@@ -38,7 +38,7 @@ module Dapp
38
38
  end
39
39
  end
40
40
 
41
- deployment.dapp.log_process(:running, verbose: true) do
41
+ deployment.dapp.log_process(:running) do
42
42
  log_thread = Thread.new do
43
43
  begin
44
44
  deployment.kubernetes.pod_log(name, follow: true) { |chunk| puts chunk }
@@ -4,7 +4,7 @@ module Dapp
4
4
  module Stage
5
5
  class ArtifactBase < Base
6
6
  def dependencies
7
- artifacts_signatures
7
+ @dependencies ||= artifacts_signatures
8
8
  end
9
9
 
10
10
  def prepare_image
@@ -50,9 +50,7 @@ module Dapp
50
50
  def artifacts_dimgs_build!
51
51
  artifacts.each do |artifact|
52
52
  process = dimg.dapp.t(code: 'process.artifact_building', data: { name: artifact[:name] })
53
- dimg.dapp.log_secondary_process(process,
54
- short: !dimg.dapp.log_verbose?,
55
- quiet: dimg.artifact? && !dimg.dapp.log_verbose?) do
53
+ dimg.dapp.log_secondary_process(process) do
56
54
  dimg.dapp.with_log_indent do
57
55
  artifact[:dimg].build!
58
56
  end
@@ -65,10 +63,7 @@ module Dapp
65
63
  "--volume #{dimg.tmp_path('artifact', artifact_name)}:#{artifact_dimg.container_tmp_path(artifact_name)}",
66
64
  "--volumes-from #{dimg.dapp.base_container}",
67
65
  "--entrypoint #{dimg.dapp.bash_bin}"]
68
- dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.artifact_copy',
69
- data: { name: artifact_name }),
70
- short: true,
71
- quiet: dimg.artifact? && !dimg.dapp.log_verbose?) do
66
+ dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.artifact_copy', data: { name: artifact_name }), short: true) do
72
67
  artifact_dimg.run(docker_options, [%(-ec '#{dimg.dapp.shellout_pack(commands)}')])
73
68
  end
74
69
  end
@@ -47,17 +47,19 @@ module Dapp
47
47
  end
48
48
  # rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
49
49
 
50
- # rubocop:disable Metrics/CyclomaticComplexity
51
50
  def build!
52
- return if build_should_be_skipped?
53
51
  prev_stage.build! if prev_stage
54
- if image_should_be_build?
55
- prepare_image if !image.built? && !should_be_not_present? || should_be_introspected?
56
- log_image_build(&method(:image_build))
52
+ image_build unless empty?
53
+ image_introspect if image_should_be_introspected?
54
+ end
55
+
56
+ def image_introspect
57
+ if image.built?
58
+ dimg.introspect_image!(image: image.built_id, options: image.send(:prepared_options))
59
+ else
60
+ dimg.dapp.log_warning(desc: { code: :introspect_image_impossible, data: { name: name } })
57
61
  end
58
- dimg.introspect_image!(image: image.built_id, options: image.send(:prepared_options)) if should_be_introspected?
59
62
  end
60
- # rubocop:enable Metrics/CyclomaticComplexity
61
63
 
62
64
  def save_in_cache!
63
65
  prev_stage.save_in_cache! if prev_stage
@@ -106,12 +108,35 @@ module Dapp
106
108
 
107
109
  image.add_service_change_label :"dapp-mount-#{type.to_s.tr('_', '-')}" => mounts.join(';')
108
110
  end
111
+
112
+ image_add_custom_mounts
113
+ end
114
+
115
+ def image_add_custom_mounts
116
+ adding_custom_dir_mounts.each do |from, to_pathes|
117
+ FileUtils.mkdir_p(from)
118
+ to_pathes.tap(&:uniq!).map { |to_path| image.add_volume "#{from}:#{to_path}" }
119
+ image.add_service_change_label :"dapp-mount-custom-dir-#{from.gsub('/', '--')}" => to_pathes.join(';')
120
+ end
109
121
  end
110
122
 
111
123
  def adding_mounts_by_type(type)
112
124
  (config_mounts_by_type(type) + labels_mounts_by_type(type)).uniq
113
125
  end
114
126
 
127
+ def adding_custom_dir_mounts
128
+ config_custom_dir_mounts.in_depth_merge(labels_custom_dir_mounts)
129
+ end
130
+
131
+ def config_custom_dir_mounts
132
+ dimg.config._custom_dir_mount.reduce({}) do |mounts, mount|
133
+ from_path = File.expand_path(mount._from)
134
+ mounts[from_path] ||= []
135
+ mounts[from_path] << mount._to
136
+ mounts
137
+ end
138
+ end
139
+
115
140
  def config_mounts_by_type(type)
116
141
  dimg.config.public_send("_#{type}_mount").map(&:_to)
117
142
  end
@@ -120,8 +145,11 @@ module Dapp
120
145
  from_image.labels.select { |l, _| l == "dapp-mount-#{type.to_s.tr('_', '-')}" }.map { |_, value| value.split(';') }.flatten
121
146
  end
122
147
 
123
- def image_should_be_build?
124
- (!empty? && !image.built?) || dimg.dapp.log_verbose?
148
+ def labels_custom_dir_mounts
149
+ from_image.labels.map do |label, value|
150
+ next unless label =~ /dapp-mount-custom-dir-(?<from>.+)/
151
+ [File.expand_path(Regexp.last_match(:from).gsub('--', '/')), value.split(';')]
152
+ end.compact.to_h
125
153
  end
126
154
 
127
155
  def empty?
@@ -133,18 +161,16 @@ module Dapp
133
161
  end
134
162
 
135
163
  def signature
136
- @signature ||= begin
137
- if empty?
138
- prev_stage.signature
139
- else
140
- args = []
141
- args << prev_stage.signature unless prev_stage.nil?
142
- args << dimg.build_cache_version
143
- args << builder_checksum
144
- args.concat(dependencies.flatten)
164
+ if empty?
165
+ prev_stage.signature
166
+ else
167
+ args = []
168
+ args << prev_stage.signature unless prev_stage.nil?
169
+ args << dimg.build_cache_version
170
+ args << builder_checksum
171
+ args.concat(dependencies.flatten)
145
172
 
146
- hashsum args
147
- end
173
+ hashsum args
148
174
  end
149
175
  end
150
176
 
@@ -156,19 +182,7 @@ module Dapp
156
182
  end
157
183
 
158
184
  def git_artifacts_dependencies
159
- local_git_artifacts_dependencies + remote_git_artifacts_dependencies
160
- end
161
-
162
- def local_git_artifacts_dependencies
163
- default_git_artifacts_dependencies(dimg.local_git_artifacts)
164
- end
165
-
166
- def remote_git_artifacts_dependencies
167
- default_git_artifacts_dependencies(dimg.remote_git_artifacts)
168
- end
169
-
170
- def default_git_artifacts_dependencies(git_artifacts)
171
- git_artifacts.map { |git_artifact| git_artifact.stage_dependencies_checksum(self) }
185
+ dimg.git_artifacts.map { |git_artifact| git_artifact.stage_dependencies_checksum(self) }
172
186
  end
173
187
 
174
188
  def dependencies
@@ -200,11 +214,12 @@ module Dapp
200
214
  protected
201
215
 
202
216
  def image_build
203
- image.build!
204
- end
205
-
206
- def build_should_be_skipped?
207
- image.built? && !dimg.dapp.log_verbose? && !should_be_introspected?
217
+ prepare_image if image_should_be_prepared?
218
+ log_image_build do
219
+ dimg.dapp.log_process(log_name,
220
+ process: dimg.dapp.t(code: 'status.process.building'),
221
+ short: should_not_be_detailed?) { image.build! }
222
+ end
208
223
  end
209
224
 
210
225
  def should_be_tagged?
@@ -215,6 +230,10 @@ module Dapp
215
230
  !(empty? || image.tagged? || should_be_not_present?)
216
231
  end
217
232
 
233
+ def image_should_be_prepared?
234
+ !image.built? && !should_be_not_present? || image_should_be_introspected?
235
+ end
236
+
218
237
  def should_be_not_present?
219
238
  return false if next_stage.nil?
220
239
  next_stage.image.tagged? || next_stage.should_be_not_present?
@@ -9,7 +9,7 @@ module Dapp
9
9
  end
10
10
 
11
11
  def dependencies
12
- [change_options]
12
+ @dependencies ||= [change_options]
13
13
  end
14
14
 
15
15
  def prepare_image
@@ -4,7 +4,7 @@ module Dapp
4
4
  module Stage
5
5
  class From < Base
6
6
  def dependencies
7
- [from_image_name, dimg.config._docker._from_cache_version, config_mounts_dirs]
7
+ @dependencies ||= [from_image_name, dimg.config._docker._from_cache_version, config_mounts_dirs]
8
8
  end
9
9
 
10
10
  protected
@@ -23,13 +23,17 @@ module Dapp
23
23
  end
24
24
 
25
25
  def config_mounts_dirs
26
- [:tmp_dir, :build_dir].map { |type| config_mounts_by_type(type) }.flatten.uniq
26
+ ([:tmp_dir, :build_dir].map { |type| config_mounts_by_type(type) } + config_custom_dir_mounts.map(&:last)).flatten.uniq
27
27
  end
28
28
 
29
29
  def adding_mounts_by_type(_type)
30
30
  []
31
31
  end
32
32
 
33
+ def adding_custom_dir_mounts
34
+ []
35
+ end
36
+
33
37
  def should_not_be_detailed?
34
38
  from_image.tagged?
35
39
  end