dapp 0.13.3 → 0.13.4

Sign up to get free protection for your applications and to get access to all the features.
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