dapp 0.6.1 → 0.6.2
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.
- checksums.yaml +4 -4
- data/bin/dapp +3 -3
- data/config/en/common.yml +19 -4
- data/config/en/net_status.yml +13 -4
- data/lib/dapp.rb +48 -16
- data/lib/dapp/application.rb +75 -40
- data/lib/dapp/application/path.rb +3 -2
- data/lib/dapp/application/stages.rb +59 -0
- data/lib/dapp/artifact.rb +22 -0
- data/lib/dapp/build/stage/after_install_artifact.rb +13 -0
- data/lib/dapp/build/stage/after_setup_artifact.rb +17 -0
- data/lib/dapp/build/stage/artifact_base.rb +80 -0
- data/lib/dapp/build/stage/artifact_default.rb +62 -0
- data/lib/dapp/build/stage/base.rb +47 -12
- data/lib/dapp/build/stage/before_install.rb +6 -5
- data/lib/dapp/build/stage/before_install_artifact.rb +13 -0
- data/lib/dapp/build/stage/before_setup.rb +7 -8
- data/lib/dapp/build/stage/before_setup_artifact.rb +13 -0
- data/lib/dapp/build/stage/build_artifact.rb +32 -0
- data/lib/dapp/build/stage/docker_instructions.rb +4 -22
- data/lib/dapp/build/stage/from.rb +7 -8
- data/lib/dapp/build/stage/ga_archive.rb +1 -1
- data/lib/dapp/build/stage/ga_archive_dependencies.rb +1 -1
- data/lib/dapp/build/stage/ga_artifact_patch.rb +21 -0
- data/lib/dapp/build/stage/ga_base.rb +6 -29
- data/lib/dapp/build/stage/ga_dependencies_base.rb +4 -13
- data/lib/dapp/build/stage/ga_latest_patch.rb +2 -2
- data/lib/dapp/build/stage/import_artifact.rb +69 -0
- data/lib/dapp/build/stage/install/ga_post_install_patch.rb +1 -1
- data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +1 -1
- data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +1 -7
- data/lib/dapp/build/stage/install/install.rb +12 -7
- data/lib/dapp/build/stage/mod/logging.rb +10 -7
- data/lib/dapp/build/stage/setup/chef_cookbooks.rb +3 -4
- data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +1 -1
- data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +2 -2
- data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +2 -8
- data/lib/dapp/build/stage/setup/setup.rb +12 -7
- data/lib/dapp/builder/base.rb +13 -1
- data/lib/dapp/builder/chef.rb +125 -79
- data/lib/dapp/builder/chef/cookbook_metadata.rb +1 -1
- data/lib/dapp/builder/shell.rb +2 -3
- data/lib/dapp/cli.rb +3 -3
- data/lib/dapp/cli/base.rb +0 -2
- data/lib/dapp/cli/bp.rb +0 -4
- data/lib/dapp/cli/build.rb +3 -7
- data/lib/dapp/cli/cleanup.rb +0 -2
- data/lib/dapp/cli/list.rb +0 -2
- data/lib/dapp/cli/mrproper.rb +22 -0
- data/lib/dapp/cli/push.rb +4 -3
- data/lib/dapp/cli/run.rb +0 -2
- data/lib/dapp/cli/spush.rb +0 -2
- data/lib/dapp/cli/stage_image.rb +24 -0
- data/lib/dapp/cli/stages.rb +7 -5
- data/lib/dapp/cli/stages/cleanup_local.rb +28 -0
- data/lib/dapp/cli/stages/cleanup_repo.rb +24 -0
- data/lib/dapp/cli/stages/{flush.rb → flush_local.rb} +4 -6
- data/lib/dapp/cli/stages/{cleanup.rb → flush_repo.rb} +4 -6
- data/lib/dapp/cli/stages/pull.rb +28 -0
- data/lib/dapp/cli/stages/push.rb +24 -0
- data/lib/dapp/config/application.rb +185 -44
- data/lib/dapp/config/artifact.rb +10 -50
- data/lib/dapp/config/directive/artifact.rb +77 -0
- data/lib/dapp/config/directive/build_dir.rb +9 -0
- data/lib/dapp/config/directive/chef.rb +95 -0
- data/lib/dapp/config/directive/docker/artifact.rb +26 -0
- data/lib/dapp/config/directive/docker/base.rb +91 -0
- data/lib/dapp/config/directive/git_artifact.rb +59 -0
- data/lib/dapp/config/directive/shell/artifact.rb +38 -0
- data/lib/dapp/config/directive/shell/base.rb +85 -0
- data/lib/dapp/config/directive/tmp_dir.rb +36 -0
- data/lib/dapp/config/main.rb +1 -7
- data/lib/dapp/core_ext/hash.rb +21 -0
- data/lib/dapp/docker_registry/base.rb +60 -5
- data/lib/dapp/docker_registry/mod/request.rb +2 -14
- data/lib/dapp/git_artifact.rb +32 -23
- data/lib/dapp/git_repo/base.rb +1 -1
- data/lib/dapp/image/argument.rb +3 -3
- data/lib/dapp/image/docker.rb +13 -16
- data/lib/dapp/image/scratch.rb +29 -0
- data/lib/dapp/image/stage.rb +33 -23
- data/lib/dapp/lock/base.rb +18 -11
- data/lib/dapp/lock/file.rb +18 -16
- data/lib/dapp/prctl.rb +1 -0
- data/lib/dapp/project.rb +22 -9
- data/lib/dapp/project/command/bp.rb +2 -5
- data/lib/dapp/project/command/build.rb +1 -2
- data/lib/dapp/project/command/cleanup.rb +9 -7
- data/lib/dapp/project/command/common.rb +37 -12
- data/lib/dapp/project/command/mrproper.rb +57 -0
- data/lib/dapp/project/command/push.rb +8 -2
- data/lib/dapp/project/command/run.rb +1 -1
- data/lib/dapp/project/command/stage_image.rb +15 -0
- data/lib/dapp/project/command/stages/cleanup_local.rb +100 -0
- data/lib/dapp/project/command/stages/cleanup_repo.rb +65 -0
- data/lib/dapp/project/command/stages/common.rb +48 -0
- data/lib/dapp/project/command/stages/flush_local.rb +24 -0
- data/lib/dapp/project/command/stages/flush_repo.rb +22 -0
- data/lib/dapp/project/command/stages/pull.rb +26 -0
- data/lib/dapp/project/command/stages/push.rb +22 -0
- data/lib/dapp/project/dappfile.rb +3 -1
- data/lib/dapp/project/deps/base.rb +52 -0
- data/lib/dapp/project/deps/gitartifact.rb +36 -0
- data/lib/dapp/project/lock.rb +20 -13
- data/lib/dapp/project/logging/base.rb +20 -3
- data/lib/dapp/project/logging/i18n.rb +25 -0
- data/lib/dapp/project/logging/paint.rb +47 -0
- data/lib/dapp/project/logging/process.rb +17 -10
- data/lib/dapp/project/shellout/base.rb +74 -0
- data/lib/dapp/project/shellout/streaming.rb +49 -0
- data/lib/dapp/project/shellout/system.rb +72 -0
- data/lib/dapp/project/ssh_agent.rb +8 -9
- data/lib/dapp/version.rb +1 -1
- metadata +48 -17
- data/lib/dapp/build/stage/artifact.rb +0 -40
- data/lib/dapp/build/stage/mod/artifact.rb +0 -79
- data/lib/dapp/config/chef.rb +0 -51
- data/lib/dapp/config/docker.rb +0 -82
- data/lib/dapp/config/git_artifact.rb +0 -51
- data/lib/dapp/config/shell.rb +0 -64
- data/lib/dapp/helper/i18n.rb +0 -20
- data/lib/dapp/helper/paint.rb +0 -27
- data/lib/dapp/helper/shellout.rb +0 -63
- data/lib/dapp/helper/streaming.rb +0 -47
- data/lib/dapp/project/command/stages_cleanup.rb +0 -72
- data/lib/dapp/project/command/stages_flush.rb +0 -20
- data/lib/dapp/project/paint.rb +0 -16
@@ -8,11 +8,12 @@ module Dapp
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def tmp_path(*path)
|
11
|
+
@tmp_path ||= Dir.mktmpdir(project.cli_options[:tmp_dir_prefix] || 'dapp-')
|
11
12
|
make_path(@tmp_path, *path).expand_path.tap { |p| p.parent.mkpath }
|
12
13
|
end
|
13
14
|
|
14
|
-
def build_path
|
15
|
-
project.build_path.join(config._basename)
|
15
|
+
def build_path(*path)
|
16
|
+
make_path(project.build_path.join(config._basename), *path).expand_path.tap { |p| p.parent.mkpath }
|
16
17
|
end
|
17
18
|
|
18
19
|
def container_dapp_path(*path)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Application
|
3
|
+
class Application
|
4
|
+
# Stages
|
5
|
+
module Stages
|
6
|
+
def signature
|
7
|
+
last_stage.send(:signature)
|
8
|
+
end
|
9
|
+
|
10
|
+
def stage_cache_format
|
11
|
+
"#{project.cache_format % { application_name: config._basename }}:%{signature}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def stage_dapp_label
|
15
|
+
project.stage_dapp_label_format % { application_name: config._basename }
|
16
|
+
end
|
17
|
+
|
18
|
+
def images
|
19
|
+
(@images ||= []).tap do |images|
|
20
|
+
stages.map do |stage|
|
21
|
+
if stage.respond_to?(:images)
|
22
|
+
images.concat(stage.images)
|
23
|
+
else
|
24
|
+
images << stage.image
|
25
|
+
end
|
26
|
+
end.uniq(&:name)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
protected
|
31
|
+
|
32
|
+
def last_stage
|
33
|
+
@last_stage ||= if scratch?
|
34
|
+
Build::Stage::ImportArtifact.new(self)
|
35
|
+
else
|
36
|
+
Build::Stage::DockerInstructions.new(self)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def export_images
|
41
|
+
images.select(&:tagged?)
|
42
|
+
end
|
43
|
+
|
44
|
+
def import_images
|
45
|
+
images.select { |image| !image.tagged? }
|
46
|
+
end
|
47
|
+
|
48
|
+
def stages
|
49
|
+
(@stages ||= []).tap do |stages|
|
50
|
+
stage = last_stage
|
51
|
+
loop do
|
52
|
+
stages << stage
|
53
|
+
break if (stage = stage.prev_stage).nil?
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end # Stages
|
58
|
+
end # Application
|
59
|
+
end # Dapp
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Artifact
|
3
|
+
class Artifact < Application
|
4
|
+
def artifact?
|
5
|
+
true
|
6
|
+
end
|
7
|
+
|
8
|
+
def should_be_built?
|
9
|
+
false
|
10
|
+
end
|
11
|
+
|
12
|
+
def with_introspection
|
13
|
+
yield
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def last_stage
|
19
|
+
@last_stage ||= Build::Stage::BuildArtifact.new(self)
|
20
|
+
end
|
21
|
+
end # Artifact
|
22
|
+
end # Dapp
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Build
|
3
|
+
module Stage
|
4
|
+
# AfterInstallArtifact
|
5
|
+
class AfterInstallArtifact < ArtifactDefault
|
6
|
+
def initialize(application, next_stage)
|
7
|
+
@prev_stage = InstallGroup::GAPostInstallPatch.new(application, self)
|
8
|
+
super
|
9
|
+
end
|
10
|
+
end # AfterInstallArtifact
|
11
|
+
end # Stage
|
12
|
+
end # Build
|
13
|
+
end # Dapp
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Build
|
3
|
+
module Stage
|
4
|
+
# AfterSetupArtifact
|
5
|
+
class AfterSetupArtifact < ArtifactDefault
|
6
|
+
def initialize(application, next_stage)
|
7
|
+
@prev_stage = if application.artifact?
|
8
|
+
SetupGroup::ChefCookbooks.new(application, self)
|
9
|
+
else
|
10
|
+
SetupGroup::GAPostSetupPatch.new(application, self)
|
11
|
+
end
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end # AfterSetupArtifact
|
15
|
+
end # Stage
|
16
|
+
end # Build
|
17
|
+
end # Dapp
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Build
|
3
|
+
module Stage
|
4
|
+
# ArtifactBase
|
5
|
+
class ArtifactBase < Base
|
6
|
+
def dependencies
|
7
|
+
artifacts_signatures
|
8
|
+
end
|
9
|
+
|
10
|
+
def prepare_image
|
11
|
+
super
|
12
|
+
artifacts_applications_build!
|
13
|
+
artifacts_labels = {}
|
14
|
+
artifacts.each do |artifact|
|
15
|
+
apply_artifact(artifact, image)
|
16
|
+
artifacts_labels["dapp-artifact-#{artifact[:name]}".to_sym] = artifact[:app].send(:last_stage).image.built_id
|
17
|
+
end
|
18
|
+
image.add_service_change_label artifacts_labels
|
19
|
+
end
|
20
|
+
|
21
|
+
def images
|
22
|
+
[image].concat(artifacts.map { |artifact| artifact[:app].images }.flatten)
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def should_not_be_detailed?
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
def ignore_log_commands?
|
32
|
+
true
|
33
|
+
end
|
34
|
+
|
35
|
+
def artifacts
|
36
|
+
@artifacts ||= begin
|
37
|
+
application.config.public_send("_#{name}").map do |artifact|
|
38
|
+
app = Dapp::Artifact.new(config: artifact._config,
|
39
|
+
project: application.project,
|
40
|
+
ignore_git_fetch: application.ignore_git_fetch)
|
41
|
+
{ name: artifact._config._name, options: artifact._artifact_options, app: app }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def artifacts_signatures
|
47
|
+
artifacts.map { |artifact| hashsum [artifact[:app].signature, artifact[:options]] }
|
48
|
+
end
|
49
|
+
|
50
|
+
def artifacts_applications_build!
|
51
|
+
artifacts.each do |artifact|
|
52
|
+
process = application.project.t(code: 'process.artifact_building', data: { name: artifact[:name] })
|
53
|
+
application.project.log_secondary_process(process,
|
54
|
+
short: !application.project.log_verbose?,
|
55
|
+
quiet: application.artifact? && !application.project.log_verbose?) do
|
56
|
+
application.project.with_log_indent do
|
57
|
+
artifact[:app].build!
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# rubocop:disable Metrics/AbcSize
|
64
|
+
def run_artifact_app(app, artifact_name, commands)
|
65
|
+
docker_options = ['--rm',
|
66
|
+
"--volume #{application.tmp_path('artifact', artifact_name)}:#{app.container_tmp_path(artifact_name)}",
|
67
|
+
"--volumes-from #{application.project.base_container}",
|
68
|
+
"--entrypoint #{application.project.bash_path}"]
|
69
|
+
application.project.log_secondary_process(application.project.t(code: 'process.artifact_copy',
|
70
|
+
data: { name: artifact_name }),
|
71
|
+
short: true,
|
72
|
+
quiet: application.artifact? && !application.project.log_verbose?) do
|
73
|
+
app.run(docker_options, [%(-ec '#{application.project.shellout_pack(commands)}')])
|
74
|
+
end
|
75
|
+
end
|
76
|
+
# rubocop:enable Metrics/AbcSize
|
77
|
+
end # ArtifactBase
|
78
|
+
end # Stage
|
79
|
+
end # Build
|
80
|
+
end # Dapp
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Build
|
3
|
+
module Stage
|
4
|
+
# ArtifactDefault
|
5
|
+
class ArtifactDefault < ArtifactBase
|
6
|
+
protected
|
7
|
+
|
8
|
+
# rubocop:disable Metrics/AbcSize
|
9
|
+
def apply_artifact(artifact, image)
|
10
|
+
return if application.project.dry_run?
|
11
|
+
|
12
|
+
artifact_name = artifact[:name]
|
13
|
+
app = artifact[:app]
|
14
|
+
cwd = artifact[:options][:cwd]
|
15
|
+
paths = artifact[:options][:paths]
|
16
|
+
exclude_paths = artifact[:options][:exclude_paths]
|
17
|
+
owner = artifact[:options][:owner]
|
18
|
+
group = artifact[:options][:group]
|
19
|
+
where_to_add = artifact[:options][:where_to_add]
|
20
|
+
|
21
|
+
command = safe_cp(where_to_add, app.container_tmp_path(artifact_name), Process.uid, Process.gid, cwd, paths, exclude_paths)
|
22
|
+
run_artifact_app(app, artifact_name, command)
|
23
|
+
|
24
|
+
command = safe_cp(application.container_tmp_path('artifact', artifact_name), where_to_add, owner, group, '', paths, exclude_paths)
|
25
|
+
image.add_command command
|
26
|
+
image.add_volume "#{application.tmp_path('artifact', artifact_name)}:#{application.container_tmp_path('artifact', artifact_name)}:ro"
|
27
|
+
end
|
28
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# rubocop:disable Metrics/ParameterLists, Metrics/AbcSize, Metrics/MethodLength
|
33
|
+
def safe_cp(from, to, owner, group, cwd = '', paths = [], exclude_paths = [])
|
34
|
+
credentials = ''
|
35
|
+
credentials += "-o #{owner} " if owner
|
36
|
+
credentials += "-g #{group} " if group
|
37
|
+
excludes = find_command_excludes(from, cwd, exclude_paths).join(' ')
|
38
|
+
|
39
|
+
copy_files = proc do |from_, cwd_, path_ = ''|
|
40
|
+
cwd_ = File.expand_path(File.join('/', cwd_))
|
41
|
+
"#{application.project.find_path} #{File.join(from_, cwd_, path_)} #{excludes} -type f -exec " \
|
42
|
+
"#{application.project.bash_path} -ec '#{application.project.install_path} -D #{credentials} {} " \
|
43
|
+
"#{File.join(to, "$(#{application.project.echo_path} {} | " \
|
44
|
+
"#{application.project.sed_path} -e \"s/#{File.join(from_, cwd_).gsub('/', '\\/')}//g\")")}' \\;"
|
45
|
+
end
|
46
|
+
|
47
|
+
commands = []
|
48
|
+
commands << [application.project.install_path, credentials, '-d', to].join(' ')
|
49
|
+
commands.concat(paths.empty? ? Array(copy_files.call(from, cwd)) : paths.map { |path| copy_files.call(from, cwd, path) })
|
50
|
+
commands << "#{application.project.find_path} #{to} -type d -exec " \
|
51
|
+
"#{application.project.bash_path} -ec '#{application.project.install_path} -d #{credentials} {}' \\;"
|
52
|
+
commands.join(' && ')
|
53
|
+
end
|
54
|
+
# rubocop:enable Metrics/ParameterLists, Metrics/AbcSize, Metrics/MethodLength
|
55
|
+
|
56
|
+
def find_command_excludes(from, cwd, exclude_paths)
|
57
|
+
exclude_paths.map { |path| "-not \\( -path #{File.join(from, cwd, path)} -prune \\)" }
|
58
|
+
end
|
59
|
+
end # ArtifactDefault
|
60
|
+
end # Stage
|
61
|
+
end # Build
|
62
|
+
end # Dapp
|
@@ -17,10 +17,11 @@ module Dapp
|
|
17
17
|
@next_stage.prev_stage = self
|
18
18
|
end
|
19
19
|
|
20
|
+
# rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity
|
20
21
|
def build_lock!
|
21
22
|
return yield if application.project.dry_run?
|
22
23
|
|
23
|
-
try_lock =
|
24
|
+
try_lock = proc do
|
24
25
|
next yield unless should_be_tagged?
|
25
26
|
|
26
27
|
no_lock = false
|
@@ -44,19 +45,22 @@ module Dapp
|
|
44
45
|
try_lock.call
|
45
46
|
end
|
46
47
|
end
|
48
|
+
# rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
|
47
49
|
|
48
50
|
def build!
|
49
51
|
return if should_be_skipped?
|
50
52
|
prev_stage.build! if prev_stage
|
51
|
-
|
53
|
+
if image_should_be_build?
|
54
|
+
prepare_image unless image.tagged?
|
55
|
+
log_image_build(&method(:image_build))
|
56
|
+
end
|
52
57
|
raise Exception::IntrospectImage, data: { built_id: image.built_id, options: image.send(:prepared_options) } if should_be_introspected?
|
53
58
|
end
|
54
59
|
|
55
60
|
def save_in_cache!
|
56
61
|
prev_stage.save_in_cache! if prev_stage
|
57
62
|
return unless should_be_tagged?
|
58
|
-
image.tag!
|
59
|
-
log_time: application.project.log_time?) unless application.project.dry_run?
|
63
|
+
image.tag! unless application.project.dry_run?
|
60
64
|
end
|
61
65
|
|
62
66
|
def image
|
@@ -64,14 +68,29 @@ module Dapp
|
|
64
68
|
if empty?
|
65
69
|
prev_stage.image
|
66
70
|
else
|
67
|
-
Image::Stage.new(name: image_name, from: from_image, project: application.project)
|
68
|
-
image.add_service_change_label dapp: application.stage_dapp_label
|
69
|
-
yield image if block_given?
|
70
|
-
end
|
71
|
+
Image::Stage.new(name: image_name, from: from_image, project: application.project)
|
71
72
|
end
|
72
73
|
end
|
73
74
|
end
|
74
75
|
|
76
|
+
def prepare_image
|
77
|
+
return if application.project.dry_run?
|
78
|
+
image.add_volumes_from application.project.base_container
|
79
|
+
image_add_tmp_volumes(:tmp)
|
80
|
+
image_add_tmp_volumes(:build)
|
81
|
+
image.add_service_change_label dapp: application.stage_dapp_label
|
82
|
+
image.add_service_change_label 'dapp-cache-version'.to_sym => Dapp::BUILD_CACHE_VERSION
|
83
|
+
end
|
84
|
+
|
85
|
+
def image_add_tmp_volumes(type)
|
86
|
+
(application.config.public_send("_#{type}_dir")._store +
|
87
|
+
from_image.labels.select { |l, _| l == "dapp-#{type}-dir" }.map { |_, value| value.split(';') }.flatten).each do |path|
|
88
|
+
absolute_path = File.expand_path(File.join('/', path))
|
89
|
+
tmp_path = application.send("#{type}_path", absolute_path[1..-1]).tap(&:mkpath)
|
90
|
+
image.add_volume "#{tmp_path}:#{absolute_path}"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
75
94
|
def image_should_be_build?
|
76
95
|
!empty? || application.project.log_verbose?
|
77
96
|
end
|
@@ -99,10 +118,11 @@ module Dapp
|
|
99
118
|
protected
|
100
119
|
|
101
120
|
def image_build
|
102
|
-
image.build!
|
103
|
-
|
104
|
-
|
105
|
-
|
121
|
+
image.build!
|
122
|
+
end
|
123
|
+
|
124
|
+
def should_be_skipped?
|
125
|
+
image.tagged? && !application.project.log_verbose? && !should_be_introspected?
|
106
126
|
end
|
107
127
|
|
108
128
|
def should_be_tagged?
|
@@ -127,6 +147,21 @@ module Dapp
|
|
127
147
|
def name
|
128
148
|
class_to_lowercase.to_sym
|
129
149
|
end
|
150
|
+
|
151
|
+
def dependencies_files_checksum(regs)
|
152
|
+
regs.map! { |reg| File.directory?(File.join(application.project.path, reg)) ? File.join(reg, '**', '*') : reg }
|
153
|
+
unless (files = regs.map { |reg| Dir[File.join(application.project.path, reg)].map { |f| File.read(f) if File.file?(f) } }).empty?
|
154
|
+
hashsum files
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def change_options
|
159
|
+
@change_options ||= begin
|
160
|
+
application.config._docker._change_options.to_h.delete_if do |_, val|
|
161
|
+
val.nil? || (val.respond_to?(:empty?) && val.empty?)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
130
165
|
end # Base
|
131
166
|
end # Stage
|
132
167
|
end # Build
|
@@ -12,15 +12,16 @@ module Dapp
|
|
12
12
|
super && !application.builder.before_install?
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
15
|
+
def context
|
16
16
|
[application.builder.before_install_checksum]
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
super
|
21
|
-
|
22
|
-
end
|
19
|
+
def prepare_image
|
20
|
+
super
|
21
|
+
application.builder.before_install(image)
|
23
22
|
end
|
23
|
+
|
24
|
+
alias dependencies context
|
24
25
|
end # BeforeInstall
|
25
26
|
end # Stage
|
26
27
|
end # Build
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Build
|
3
|
+
module Stage
|
4
|
+
# BeforeInstallArtifact
|
5
|
+
class BeforeInstallArtifact < ArtifactDefault
|
6
|
+
def initialize(application, next_stage)
|
7
|
+
@prev_stage = BeforeInstall.new(application, self)
|
8
|
+
super
|
9
|
+
end
|
10
|
+
end # BeforeInstallArtifact
|
11
|
+
end # Stage
|
12
|
+
end # Build
|
13
|
+
end # Dapp
|
@@ -4,22 +4,21 @@ module Dapp
|
|
4
4
|
# BeforeSetup
|
5
5
|
class BeforeSetup < Base
|
6
6
|
def initialize(application, next_stage)
|
7
|
-
@prev_stage =
|
7
|
+
@prev_stage = AfterInstallArtifact.new(application, self)
|
8
8
|
super
|
9
9
|
end
|
10
10
|
|
11
11
|
def empty?
|
12
|
-
|
12
|
+
!application.builder.before_setup?
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
16
|
-
|
15
|
+
def context
|
16
|
+
[application.builder.before_setup_checksum]
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
super
|
21
|
-
|
22
|
-
end
|
19
|
+
def prepare_image
|
20
|
+
super
|
21
|
+
application.builder.before_setup(image)
|
23
22
|
end
|
24
23
|
end # BeforeSetup
|
25
24
|
end # Stage
|