dapp 0.13.3 → 0.13.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/dapp +0 -13
- data/config/en/common.yml +4 -2
- data/config/en/net_status.yml +15 -3
- data/lib/dapp.rb +11 -6
- data/lib/dapp/cli.rb +1 -1
- data/lib/dapp/cli/command/base.rb +4 -4
- data/lib/dapp/config/directive/base.rb +4 -2
- data/lib/dapp/core_ext/hash.rb +14 -0
- data/lib/dapp/dapp.rb +32 -6
- data/lib/dapp/dapp/dapp_config.rb +85 -0
- data/lib/dapp/dapp/dappfile.rb +4 -0
- data/lib/dapp/dapp/deps/base.rb +2 -2
- data/lib/dapp/dapp/deps/gitartifact.rb +2 -2
- data/lib/dapp/dapp/logging/base.rb +5 -5
- data/lib/dapp/dapp/logging/process.rb +5 -7
- data/lib/dapp/dapp/shellout/base.rb +16 -17
- data/lib/dapp/deployment/cli/command/deployment.rb +2 -3
- data/lib/dapp/deployment/dapp/command/apply.rb +6 -6
- data/lib/dapp/deployment/dapp/dapp.rb +0 -1
- data/lib/dapp/deployment/kube_app.rb +1 -1
- data/lib/dapp/deployment/kube_base.rb +1 -1
- data/lib/dapp/dimg/build/stage/artifact_base.rb +3 -8
- data/lib/dapp/dimg/build/stage/base.rb +57 -38
- data/lib/dapp/dimg/build/stage/docker_instructions.rb +1 -1
- data/lib/dapp/dimg/build/stage/from.rb +6 -2
- data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +2 -2
- data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +1 -5
- data/lib/dapp/dimg/build/stage/ga_base.rb +1 -14
- data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +7 -31
- data/lib/dapp/dimg/build/stage/ga_related_dependencies_base.rb +21 -0
- data/lib/dapp/dimg/build/stage/import_artifact.rb +10 -3
- data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +3 -3
- data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +3 -3
- data/lib/dapp/dimg/build/stage/mod/group.rb +19 -7
- data/lib/dapp/dimg/build/stage/mod/logging.rb +7 -20
- data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +1 -1
- data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +3 -3
- data/lib/dapp/dimg/builder/chef.rb +2 -2
- data/lib/dapp/dimg/builder/chef/cookbook.rb +2 -2
- data/lib/dapp/dimg/cli/command/dimg.rb +1 -1
- data/lib/dapp/dimg/cli/command/dimg/build.rb +15 -8
- data/lib/dapp/dimg/config/directive/artifact_base.rb +13 -4
- data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +1 -1
- data/lib/dapp/dimg/config/directive/dimg/validation.rb +6 -1
- data/lib/dapp/dimg/config/directive/docker/base.rb +1 -2
- data/lib/dapp/dimg/config/directive/git_artifact_local.rb +3 -0
- data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +1 -1
- data/lib/dapp/dimg/config/directive/mount.rb +9 -1
- data/lib/dapp/dimg/dapp/command/build_context/export.rb +13 -15
- data/lib/dapp/dimg/dapp/command/build_context/import.rb +3 -3
- data/lib/dapp/dimg/dapp/command/cleanup.rb +1 -1
- data/lib/dapp/dimg/dapp/command/common.rb +17 -6
- data/lib/dapp/dimg/dapp/command/mrproper.rb +9 -4
- data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +19 -17
- data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +1 -1
- data/lib/dapp/dimg/dimg.rb +5 -5
- data/lib/dapp/dimg/dimg/git_artifact.rb +11 -6
- data/lib/dapp/dimg/dimg/path.rb +2 -6
- data/lib/dapp/dimg/git_artifact.rb +118 -66
- data/lib/dapp/dimg/git_repo/base.rb +1 -1
- data/lib/dapp/dimg/git_repo/own.rb +1 -1
- data/lib/dapp/dimg/git_repo/remote.rb +23 -14
- data/lib/dapp/dimg/image/docker.rb +11 -11
- data/lib/dapp/dimg/image/scratch.rb +33 -9
- data/lib/dapp/dimg/image/stage.rb +3 -3
- data/lib/dapp/helper/cli.rb +8 -0
- data/lib/dapp/helper/tar.rb +31 -0
- data/lib/dapp/kube/cli/command/kube.rb +5 -4
- data/lib/dapp/kube/cli/command/kube/deploy.rb +5 -0
- data/lib/dapp/kube/cli/command/kube/minikube_setup.rb +13 -0
- data/lib/dapp/kube/cli/command/kube/{secret_file_encrypt.rb → secret_extract.rb} +3 -3
- data/lib/dapp/kube/cli/command/kube/secret_generate.rb +11 -1
- data/lib/dapp/kube/client.rb +1 -1
- data/lib/dapp/kube/client/error.rb +1 -1
- data/lib/dapp/kube/dapp/command/common.rb +29 -4
- data/lib/dapp/kube/dapp/command/deploy.rb +43 -21
- data/lib/dapp/kube/dapp/command/dismiss.rb +1 -1
- data/lib/dapp/{deployment → kube}/dapp/command/minikube_setup.rb +12 -12
- data/lib/dapp/kube/dapp/command/secret_extract.rb +46 -0
- data/lib/dapp/kube/dapp/command/secret_generate.rb +33 -4
- data/lib/dapp/kube/dapp/dapp.rb +3 -2
- data/lib/dapp/kube/error/kubernetes.rb +7 -0
- data/lib/dapp/kube/secret.rb +1 -1
- data/lib/dapp/version.rb +2 -2
- metadata +11 -7
- data/lib/dapp/deployment/cli/command/deployment/minikube_setup.rb +0 -13
- data/lib/dapp/kube/dapp/command/secret_file_encrypt.rb +0 -22
data/lib/dapp/dapp/deps/base.rb
CHANGED
@@ -10,10 +10,10 @@ module Dapp
|
|
10
10
|
|
11
11
|
def base_container
|
12
12
|
@base_container ||= begin
|
13
|
-
if shellout("
|
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
|
-
[
|
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("
|
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
|
-
[
|
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
|
-
|
6
|
+
option_quiet
|
7
7
|
end
|
8
8
|
|
9
9
|
def log_time?
|
10
|
-
|
10
|
+
option_time
|
11
11
|
end
|
12
12
|
|
13
13
|
def log_verbose?
|
14
|
-
|
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
|
-
|
30
|
+
option_dry_run
|
31
31
|
end
|
32
32
|
|
33
33
|
def dev_mode?
|
34
|
-
|
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,
|
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
|
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 }
|
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
|
-
|
32
|
-
|
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
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
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'
|
4
|
+
SUBCOMMANDS = ['apply', 'mrproper'].freeze
|
5
5
|
|
6
6
|
banner <<BANNER.freeze
|
7
|
-
Usage: dapp deployment
|
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}"
|
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
|
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
|
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}"
|
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
|
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
|
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)
|
@@ -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"
|
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
|
|
@@ -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
|
-
|
55
|
-
|
56
|
-
|
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
|
124
|
-
|
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
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
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?
|
@@ -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
|