dapp 0.8.0 → 0.9.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.
- checksums.yaml +4 -4
- data/bin/dapp +5 -5
- data/config/en/common.yml +6 -4
- data/config/en/net_status.yml +8 -7
- data/lib/dapp.rb +157 -139
- data/lib/dapp/cli.rb +6 -16
- data/lib/dapp/cli/base.rb +3 -5
- data/lib/dapp/config/base.rb +19 -7
- data/lib/dapp/config/directive/base.rb +0 -1
- data/lib/dapp/config/error/config.rb +7 -0
- data/lib/dapp/core_ext/hash.rb +0 -2
- data/lib/dapp/core_ext/pathname.rb +1 -3
- data/lib/dapp/{project.rb → dapp.rb} +2 -21
- data/lib/dapp/{project → dapp}/chef.rb +2 -4
- data/lib/dapp/{project → dapp}/dappfile.rb +5 -7
- data/lib/dapp/{project → dapp}/deps/base.rb +3 -6
- data/lib/dapp/{project → dapp}/deps/gitartifact.rb +2 -5
- data/lib/dapp/{project → dapp}/git_artifact.rb +2 -4
- data/lib/dapp/{project → dapp}/lock.rb +3 -5
- data/lib/dapp/{project → dapp}/logging/base.rb +2 -5
- data/lib/dapp/{project → dapp}/logging/i18n.rb +2 -3
- data/lib/dapp/{project → dapp}/logging/paint.rb +2 -4
- data/lib/dapp/{project → dapp}/logging/process.rb +2 -5
- data/lib/dapp/{project → dapp}/shellout/base.rb +2 -4
- data/lib/dapp/{project → dapp}/shellout/streaming.rb +3 -8
- data/lib/dapp/{project → dapp}/ssh_agent.rb +6 -9
- data/lib/dapp/dimg.rb +1 -192
- data/lib/dapp/dimg/artifact.rb +24 -0
- data/lib/dapp/dimg/build/stage/after_install_artifact.rb +14 -0
- data/lib/dapp/dimg/build/stage/after_setup_artifact.rb +18 -0
- data/lib/dapp/dimg/build/stage/artifact_base.rb +80 -0
- data/lib/dapp/dimg/build/stage/artifact_default.rb +63 -0
- data/lib/dapp/dimg/build/stage/base.rb +210 -0
- data/lib/dapp/dimg/build/stage/before_install.rb +33 -0
- data/lib/dapp/dimg/build/stage/before_install_artifact.rb +14 -0
- data/lib/dapp/dimg/build/stage/before_setup.rb +31 -0
- data/lib/dapp/dimg/build/stage/before_setup_artifact.rb +14 -0
- data/lib/dapp/dimg/build/stage/build_artifact.rb +31 -0
- data/lib/dapp/dimg/build/stage/docker_instructions.rb +25 -0
- data/lib/dapp/dimg/build/stage/from.rb +50 -0
- data/lib/dapp/dimg/build/stage/ga_archive.rb +28 -0
- data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +27 -0
- data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +22 -0
- data/lib/dapp/dimg/build/stage/ga_base.rb +80 -0
- data/lib/dapp/dimg/build/stage/ga_dependencies_base.rb +20 -0
- data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +54 -0
- data/lib/dapp/dimg/build/stage/import_artifact.rb +64 -0
- data/lib/dapp/dimg/build/stage/install/ga_post_install_patch.rb +22 -0
- data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +22 -0
- data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb +22 -0
- data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +22 -0
- data/lib/dapp/dimg/build/stage/install/install.rb +35 -0
- data/lib/dapp/dimg/build/stage/mod/group.rb +42 -0
- data/lib/dapp/dimg/build/stage/mod/logging.rb +101 -0
- data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb +22 -0
- data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +32 -0
- data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch.rb +22 -0
- data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +22 -0
- data/lib/dapp/dimg/build/stage/setup/setup.rb +35 -0
- data/lib/dapp/dimg/builder.rb +6 -0
- data/lib/dapp/{builder → dimg/builder}/base.rb +4 -5
- data/lib/dapp/{builder → dimg/builder}/chef.rb +41 -33
- data/lib/dapp/dimg/builder/chef/berksfile.rb +121 -0
- data/lib/dapp/dimg/builder/chef/cookbook.rb +285 -0
- data/lib/dapp/dimg/builder/chef/cookbook_metadata.rb +106 -0
- data/lib/dapp/{builder → dimg/builder}/none.rb +4 -5
- data/lib/dapp/{builder → dimg/builder}/shell.rb +5 -6
- data/lib/dapp/dimg/cli/base.rb +16 -0
- data/lib/dapp/dimg/cli/bp.rb +37 -0
- data/lib/dapp/dimg/cli/build.rb +64 -0
- data/lib/dapp/dimg/cli/build_context.rb +18 -0
- data/lib/dapp/dimg/cli/build_context/export.rb +26 -0
- data/lib/dapp/dimg/cli/build_context/import.rb +17 -0
- data/lib/dapp/dimg/cli/cleanup.rb +22 -0
- data/lib/dapp/dimg/cli/cli.rb +1 -0
- data/lib/dapp/dimg/cli/dimg.rb +30 -0
- data/lib/dapp/dimg/cli/list.rb +17 -0
- data/lib/dapp/dimg/cli/mrproper.rb +26 -0
- data/lib/dapp/dimg/cli/push.rb +61 -0
- data/lib/dapp/dimg/cli/run.rb +59 -0
- data/lib/dapp/{cli → dimg/cli}/spush.rb +7 -7
- data/lib/dapp/dimg/cli/stage_image.rb +24 -0
- data/lib/dapp/dimg/cli/stages.rb +22 -0
- data/lib/dapp/dimg/cli/stages/cleanup_local.rb +44 -0
- data/lib/dapp/dimg/cli/stages/cleanup_repo.rb +26 -0
- data/lib/dapp/dimg/cli/stages/flush_local.rb +23 -0
- data/lib/dapp/dimg/cli/stages/flush_repo.rb +24 -0
- data/lib/dapp/dimg/cli/stages/pull.rb +28 -0
- data/lib/dapp/dimg/cli/stages/push.rb +24 -0
- data/lib/dapp/dimg/cli/tag.rb +24 -0
- data/lib/dapp/dimg/config/artifact_dimg.rb +17 -0
- data/lib/dapp/dimg/config/artifact_group.rb +47 -0
- data/lib/dapp/dimg/config/base.rb +7 -0
- data/lib/dapp/dimg/config/dimg.rb +24 -0
- data/lib/dapp/dimg/config/dimg/instance_methods.rb +177 -0
- data/lib/dapp/dimg/config/dimg/validation.rb +126 -0
- data/lib/dapp/dimg/config/dimg_group.rb +61 -0
- data/lib/dapp/dimg/config/dimg_group_base.rb +54 -0
- data/lib/dapp/dimg/config/dimg_group_main.rb +22 -0
- data/lib/dapp/dimg/config/directive/artifact.rb +70 -0
- data/lib/dapp/dimg/config/directive/artifact_base.rb +97 -0
- data/lib/dapp/dimg/config/directive/base.rb +9 -0
- data/lib/dapp/dimg/config/directive/chef.rb +68 -0
- data/lib/dapp/dimg/config/directive/docker/artifact.rb +15 -0
- data/lib/dapp/dimg/config/directive/docker/base.rb +22 -0
- data/lib/dapp/dimg/config/directive/docker/dimg.rb +82 -0
- data/lib/dapp/dimg/config/directive/git_artifact_local.rb +47 -0
- data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +58 -0
- data/lib/dapp/dimg/config/directive/mount.rb +27 -0
- data/lib/dapp/dimg/config/directive/shell/artifact.rb +18 -0
- data/lib/dapp/dimg/config/directive/shell/dimg.rb +65 -0
- data/lib/dapp/dimg/dapp/command.rb +21 -0
- data/lib/dapp/dimg/dapp/command/bp.rb +20 -0
- data/lib/dapp/dimg/dapp/command/build.rb +22 -0
- data/lib/dapp/dimg/dapp/command/build_context/common.rb +27 -0
- data/lib/dapp/dimg/dapp/command/build_context/export.rb +55 -0
- data/lib/dapp/dimg/dapp/command/build_context/import.rb +71 -0
- data/lib/dapp/dimg/dapp/command/cleanup.rb +23 -0
- data/lib/dapp/dimg/dapp/command/common.rb +96 -0
- data/lib/dapp/dimg/dapp/command/list.rb +19 -0
- data/lib/dapp/dimg/dapp/command/mrproper.rb +75 -0
- data/lib/dapp/dimg/dapp/command/push.rb +27 -0
- data/lib/dapp/dimg/dapp/command/run.rb +15 -0
- data/lib/dapp/dimg/dapp/command/spush.rb +17 -0
- data/lib/dapp/dimg/dapp/command/stage_image.rb +14 -0
- data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +137 -0
- data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +124 -0
- data/lib/dapp/dimg/dapp/command/stages/common.rb +85 -0
- data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +21 -0
- data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +21 -0
- data/lib/dapp/dimg/dapp/command/stages/pull.rb +26 -0
- data/lib/dapp/dimg/dapp/command/stages/push.rb +22 -0
- data/lib/dapp/dimg/dapp/command/tag.rb +17 -0
- data/lib/dapp/dimg/dimg.rb +192 -0
- data/lib/dapp/dimg/dimg/git_artifact.rb +26 -0
- data/lib/dapp/dimg/dimg/path.rb +37 -0
- data/lib/dapp/dimg/dimg/stages.rb +60 -0
- data/lib/dapp/dimg/dimg/tags.rb +65 -0
- data/lib/dapp/dimg/docker_registry.rb +37 -0
- data/lib/dapp/dimg/docker_registry/base.rb +109 -0
- data/lib/dapp/dimg/docker_registry/base/authorization.rb +63 -0
- data/lib/dapp/dimg/docker_registry/base/request.rb +34 -0
- data/lib/dapp/dimg/docker_registry/default.rb +18 -0
- data/lib/dapp/dimg/error/base.rb +7 -0
- data/lib/dapp/dimg/error/build.rb +7 -0
- data/lib/dapp/dimg/error/chef.rb +11 -0
- data/lib/dapp/dimg/error/command.rb +7 -0
- data/lib/dapp/dimg/error/config.rb +7 -0
- data/lib/dapp/dimg/error/dimg.rb +7 -0
- data/lib/dapp/dimg/error/lock.rb +7 -0
- data/lib/dapp/dimg/error/registry.rb +7 -0
- data/lib/dapp/dimg/error/rugged.rb +7 -0
- data/lib/dapp/dimg/error/shellout.rb +7 -0
- data/lib/dapp/dimg/error/tar_writer.rb +7 -0
- data/lib/dapp/dimg/exception/base.rb +7 -0
- data/lib/dapp/dimg/exception/introspect_image.rb +7 -0
- data/lib/dapp/dimg/exception/registry.rb +7 -0
- data/lib/dapp/dimg/filelock.rb +43 -0
- data/lib/dapp/dimg/git_artifact.rb +241 -18
- data/lib/dapp/dimg/git_repo/base.rb +90 -0
- data/lib/dapp/dimg/git_repo/own.rb +39 -0
- data/lib/dapp/dimg/git_repo/remote.rb +50 -0
- data/lib/dapp/dimg/image/argument.rb +143 -0
- data/lib/dapp/dimg/image/docker.rb +127 -0
- data/lib/dapp/dimg/image/scratch.rb +32 -0
- data/lib/dapp/dimg/image/stage.rb +95 -0
- data/lib/dapp/dimg/lock/base.rb +51 -0
- data/lib/dapp/dimg/lock/file.rb +48 -0
- data/lib/dapp/error/base.rb +0 -1
- data/lib/dapp/error/dapp.rb +5 -0
- data/lib/dapp/error/dappfile.rb +0 -1
- data/lib/dapp/error/shellout.rb +0 -1
- data/lib/dapp/exception/base.rb +0 -1
- data/lib/dapp/helper/cli.rb +5 -6
- data/lib/dapp/helper/net_status.rb +0 -1
- data/lib/dapp/helper/sha256.rb +0 -1
- data/lib/dapp/helper/trivia.rb +0 -1
- data/lib/dapp/prctl.rb +0 -1
- data/lib/dapp/version.rb +1 -2
- metadata +172 -140
- data/lib/dapp/artifact.rb +0 -23
- data/lib/dapp/build/stage/after_install_artifact.rb +0 -13
- data/lib/dapp/build/stage/after_setup_artifact.rb +0 -17
- data/lib/dapp/build/stage/artifact_base.rb +0 -80
- data/lib/dapp/build/stage/artifact_default.rb +0 -63
- data/lib/dapp/build/stage/base.rb +0 -203
- data/lib/dapp/build/stage/before_install.rb +0 -32
- data/lib/dapp/build/stage/before_install_artifact.rb +0 -13
- data/lib/dapp/build/stage/before_setup.rb +0 -30
- data/lib/dapp/build/stage/before_setup_artifact.rb +0 -13
- data/lib/dapp/build/stage/build_artifact.rb +0 -36
- data/lib/dapp/build/stage/docker_instructions.rb +0 -24
- data/lib/dapp/build/stage/from.rb +0 -34
- data/lib/dapp/build/stage/ga_archive.rb +0 -27
- data/lib/dapp/build/stage/ga_archive_dependencies.rb +0 -26
- data/lib/dapp/build/stage/ga_artifact_patch.rb +0 -21
- data/lib/dapp/build/stage/ga_base.rb +0 -79
- data/lib/dapp/build/stage/ga_dependencies_base.rb +0 -19
- data/lib/dapp/build/stage/ga_latest_patch.rb +0 -53
- data/lib/dapp/build/stage/import_artifact.rb +0 -65
- data/lib/dapp/build/stage/install/ga_post_install_patch.rb +0 -21
- data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +0 -21
- data/lib/dapp/build/stage/install/ga_pre_install_patch.rb +0 -21
- data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +0 -21
- data/lib/dapp/build/stage/install/install.rb +0 -40
- data/lib/dapp/build/stage/mod/group.rb +0 -42
- data/lib/dapp/build/stage/mod/logging.rb +0 -104
- data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +0 -21
- data/lib/dapp/build/stage/setup/ga_post_setup_patch_dependencies.rb +0 -31
- data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +0 -21
- data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +0 -21
- data/lib/dapp/build/stage/setup/setup.rb +0 -40
- data/lib/dapp/builder/chef/berksfile.rb +0 -78
- data/lib/dapp/builder/chef/cookbook.rb +0 -257
- data/lib/dapp/builder/chef/cookbook_metadata.rb +0 -54
- data/lib/dapp/builder/chef/error.rb +0 -12
- data/lib/dapp/cli/bp.rb +0 -37
- data/lib/dapp/cli/build.rb +0 -60
- data/lib/dapp/cli/cleanup.rb +0 -22
- data/lib/dapp/cli/list.rb +0 -17
- data/lib/dapp/cli/mrproper.rb +0 -26
- data/lib/dapp/cli/push.rb +0 -61
- data/lib/dapp/cli/run.rb +0 -53
- data/lib/dapp/cli/stage_image.rb +0 -24
- data/lib/dapp/cli/stages.rb +0 -23
- data/lib/dapp/cli/stages/cleanup_local.rb +0 -44
- data/lib/dapp/cli/stages/cleanup_repo.rb +0 -26
- data/lib/dapp/cli/stages/flush_local.rb +0 -23
- data/lib/dapp/cli/stages/flush_repo.rb +0 -24
- data/lib/dapp/cli/stages/pull.rb +0 -28
- data/lib/dapp/cli/stages/push.rb +0 -24
- data/lib/dapp/cli/tag.rb +0 -24
- data/lib/dapp/config/artifact_dimg.rb +0 -20
- data/lib/dapp/config/artifact_group.rb +0 -56
- data/lib/dapp/config/dimg.rb +0 -23
- data/lib/dapp/config/dimg/instance_methods.rb +0 -194
- data/lib/dapp/config/dimg/validation.rb +0 -125
- data/lib/dapp/config/dimg_group.rb +0 -60
- data/lib/dapp/config/dimg_group_base.rb +0 -53
- data/lib/dapp/config/dimg_group_main.rb +0 -21
- data/lib/dapp/config/directive/artifact.rb +0 -69
- data/lib/dapp/config/directive/artifact_base.rb +0 -93
- data/lib/dapp/config/directive/chef.rb +0 -57
- data/lib/dapp/config/directive/docker/artifact.rb +0 -15
- data/lib/dapp/config/directive/docker/base.rb +0 -20
- data/lib/dapp/config/directive/docker/dimg.rb +0 -81
- data/lib/dapp/config/directive/git_artifact_local.rb +0 -13
- data/lib/dapp/config/directive/git_artifact_remote.rb +0 -57
- data/lib/dapp/config/directive/mount.rb +0 -26
- data/lib/dapp/config/directive/shell/artifact.rb +0 -17
- data/lib/dapp/config/directive/shell/dimg.rb +0 -65
- data/lib/dapp/dimg/path.rb +0 -37
- data/lib/dapp/dimg/stages.rb +0 -59
- data/lib/dapp/dimg/tags.rb +0 -65
- data/lib/dapp/docker_registry.rb +0 -36
- data/lib/dapp/docker_registry/base.rb +0 -109
- data/lib/dapp/docker_registry/default.rb +0 -18
- data/lib/dapp/docker_registry/mod/authorization.rb +0 -63
- data/lib/dapp/docker_registry/mod/request.rb +0 -32
- data/lib/dapp/error/build.rb +0 -6
- data/lib/dapp/error/config.rb +0 -6
- data/lib/dapp/error/dimg.rb +0 -6
- data/lib/dapp/error/image.rb +0 -6
- data/lib/dapp/error/project.rb +0 -6
- data/lib/dapp/error/registry.rb +0 -6
- data/lib/dapp/error/rugged.rb +0 -6
- data/lib/dapp/error/tar_writer.rb +0 -6
- data/lib/dapp/exception/introspect_image.rb +0 -6
- data/lib/dapp/exception/registry.rb +0 -6
- data/lib/dapp/filelock.rb +0 -43
- data/lib/dapp/git_artifact.rb +0 -241
- data/lib/dapp/git_repo/base.rb +0 -88
- data/lib/dapp/git_repo/own.rb +0 -38
- data/lib/dapp/git_repo/remote.rb +0 -49
- data/lib/dapp/image/argument.rb +0 -134
- data/lib/dapp/image/docker.rb +0 -115
- data/lib/dapp/image/scratch.rb +0 -32
- data/lib/dapp/image/stage.rb +0 -94
- data/lib/dapp/lock/base.rb +0 -51
- data/lib/dapp/lock/error.rb +0 -14
- data/lib/dapp/lock/file.rb +0 -45
- data/lib/dapp/project/command/bp.rb +0 -21
- data/lib/dapp/project/command/build.rb +0 -20
- data/lib/dapp/project/command/cleanup.rb +0 -24
- data/lib/dapp/project/command/common.rb +0 -96
- data/lib/dapp/project/command/list.rb +0 -20
- data/lib/dapp/project/command/mrproper.rb +0 -69
- data/lib/dapp/project/command/push.rb +0 -28
- data/lib/dapp/project/command/run.rb +0 -15
- data/lib/dapp/project/command/spush.rb +0 -18
- data/lib/dapp/project/command/stage_image.rb +0 -15
- data/lib/dapp/project/command/stages/cleanup_local.rb +0 -138
- data/lib/dapp/project/command/stages/cleanup_repo.rb +0 -125
- data/lib/dapp/project/command/stages/common.rb +0 -86
- data/lib/dapp/project/command/stages/flush_local.rb +0 -22
- data/lib/dapp/project/command/stages/flush_repo.rb +0 -22
- data/lib/dapp/project/command/stages/pull.rb +0 -27
- data/lib/dapp/project/command/stages/push.rb +0 -23
- data/lib/dapp/project/command/tag.rb +0 -18
@@ -0,0 +1,71 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
class Dapp
|
4
|
+
module Command
|
5
|
+
module BuildContext
|
6
|
+
module Import
|
7
|
+
def build_context_import
|
8
|
+
raise Error::Command, code: :context_directory_not_found,
|
9
|
+
data: { path: build_context_path } unless build_context_path.exist?
|
10
|
+
|
11
|
+
log_process(:'import context') do
|
12
|
+
with_log_indent do
|
13
|
+
import_build_context_build_tar
|
14
|
+
import_build_context_image_tar
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def import_build_context_image_tar
|
20
|
+
if build_context_images_tar.exist?
|
21
|
+
log_secondary_process(:images, short: true) do
|
22
|
+
lock("#{name}.images") do
|
23
|
+
Image::Docker.load!(build_context_images_tar)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
else
|
27
|
+
log_warning(desc: { code: :context_archive_not_found, data: { path: build_context_images_tar } })
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def import_build_context_build_tar
|
32
|
+
if build_context_build_tar.exist?
|
33
|
+
log_secondary_process(:build_dir, short: true) do
|
34
|
+
store_current_build_dir
|
35
|
+
|
36
|
+
File.open(build_context_build_tar, File::RDONLY) do |f|
|
37
|
+
Gem::Package::TarReader.new(f).each_entry do |entry|
|
38
|
+
header = entry.header
|
39
|
+
path = File.join(build_path, entry.full_name)
|
40
|
+
|
41
|
+
if entry.directory?
|
42
|
+
FileUtils.mkpath path, :mode => entry.header.mode
|
43
|
+
else
|
44
|
+
FileUtils.mkpath File.dirname(path)
|
45
|
+
File.write(path, entry.read)
|
46
|
+
File.chmod(header.mode, path)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
else
|
52
|
+
log_warning(desc: { code: :context_archive_not_found, data: { path: build_context_build_tar } })
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def store_current_build_dir
|
57
|
+
return if build_path_empty?
|
58
|
+
raise Error::Command, code: :stored_build_dir_already_exist,
|
59
|
+
data: { path: "#{build_path}.old" } if File.exist?("#{build_path}.old")
|
60
|
+
FileUtils.mv(build_path, "#{build_path}.old")
|
61
|
+
end
|
62
|
+
|
63
|
+
def build_path_empty?
|
64
|
+
(build_path.entries.map(&:to_s) - %w(. .. locks)).empty?
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
class Dapp
|
4
|
+
module Command
|
5
|
+
module Cleanup
|
6
|
+
def cleanup
|
7
|
+
lock("#{name}.images") do
|
8
|
+
log_step_with_indent(name) do
|
9
|
+
dapp_containers_flush
|
10
|
+
dapp_dangling_images_flush
|
11
|
+
remove_images_by_query([
|
12
|
+
'docker images',
|
13
|
+
%(--format '{{if ne "#{stage_cache}" .Repository }}{{.Repository}}:{{.Tag}}{{ end }}'),
|
14
|
+
%(-f "label=dapp=#{stage_dapp_label}")
|
15
|
+
].join(' ')) # FIXME: negative filter is not currently supported by the Docker CLI
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end # Dimg
|
23
|
+
end # Dapp
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
class Dapp
|
4
|
+
module Command
|
5
|
+
module Common
|
6
|
+
protected
|
7
|
+
|
8
|
+
def dapp_images_names
|
9
|
+
shellout!(%(docker images --format="{{.Repository}}:{{.Tag}}" #{stage_cache})).stdout.lines.map(&:strip)
|
10
|
+
end
|
11
|
+
|
12
|
+
def dapp_images_ids
|
13
|
+
shellout!(%(docker images #{stage_cache} -q --no-trunc)).stdout.lines.map(&:strip)
|
14
|
+
end
|
15
|
+
|
16
|
+
def dapp_containers_flush
|
17
|
+
remove_containers_by_query(%(docker ps -a -f "label=dapp" -f "name=#{container_name_prefix}" -q), force: true)
|
18
|
+
end
|
19
|
+
|
20
|
+
def dapp_dangling_images_flush
|
21
|
+
remove_images_by_query(%(docker images -f "dangling=true" -f "label=dapp=#{stage_dapp_label}" -q), force: true)
|
22
|
+
end
|
23
|
+
|
24
|
+
def remove_images_by_query(images_query, force: false)
|
25
|
+
with_subquery(images_query) { |ids| remove_images(ids, force: force) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def remove_images(ids, force: false)
|
29
|
+
remove_base('docker rmi%{force_option} %{ids}', ids.uniq, force: force)
|
30
|
+
end
|
31
|
+
|
32
|
+
def remove_containers_by_query(containers_query, force: false)
|
33
|
+
with_subquery(containers_query) { |ids| remove_containers(ids, force: force) }
|
34
|
+
end
|
35
|
+
|
36
|
+
def remove_containers(ids, force: false)
|
37
|
+
remove_base('docker rm%{force_option} %{ids}', ids.uniq, force: force)
|
38
|
+
end
|
39
|
+
|
40
|
+
def remove_base(query_format, ids, force: false)
|
41
|
+
return if ids.empty?
|
42
|
+
force_option = force ? ' -f' : ''
|
43
|
+
ids.each_slice(50) { |chunk| run_command(format(query_format, force_option: force_option, ids: chunk.join(' '))) }
|
44
|
+
end
|
45
|
+
|
46
|
+
def with_subquery(query)
|
47
|
+
return if (res = shellout!(query).stdout.strip.lines.map(&:strip)).empty?
|
48
|
+
yield(res)
|
49
|
+
end
|
50
|
+
|
51
|
+
def image_labels(image_id)
|
52
|
+
Image::Stage.image_config_option(image_id: image_id, option: 'labels')
|
53
|
+
end
|
54
|
+
|
55
|
+
def run_command(cmd)
|
56
|
+
log(cmd) if log_verbose? || dry_run?
|
57
|
+
shellout!(cmd) unless dry_run?
|
58
|
+
end
|
59
|
+
|
60
|
+
def container_name_prefix
|
61
|
+
name
|
62
|
+
end
|
63
|
+
|
64
|
+
def validate_repo_name(repo)
|
65
|
+
raise(Error::Command, code: :repo_name_incorrect, data: { name: repo }) unless ::Dapp::Dimg::DockerRegistry.repo_name?(repo)
|
66
|
+
end
|
67
|
+
|
68
|
+
def proper_cache_version?
|
69
|
+
!!cli_options[:proper_cache_version]
|
70
|
+
end
|
71
|
+
|
72
|
+
def log_proper_cache(&blk)
|
73
|
+
log_step_with_indent(:'proper cache', &blk)
|
74
|
+
end
|
75
|
+
|
76
|
+
def one_dimg!
|
77
|
+
return if build_configs.one?
|
78
|
+
raise Error::Command, code: :command_unexpected_dimgs_number, data: { dimgs_names: build_configs.map(&:_name).join(' ') }
|
79
|
+
end
|
80
|
+
|
81
|
+
def push_format(dimg_name)
|
82
|
+
if dimg_name.nil?
|
83
|
+
spush_format
|
84
|
+
else
|
85
|
+
'%{repo}:%{dimg_name}-%{tag}'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def spush_format
|
90
|
+
'%{repo}:%{tag}'
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end # Dimg
|
96
|
+
end # Dapp
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
class Dapp
|
4
|
+
module Command
|
5
|
+
module List
|
6
|
+
def list
|
7
|
+
build_configs.each do |config|
|
8
|
+
if config._name.nil?
|
9
|
+
log_warning('Dappfile has unnamed dimg!') if log_verbose?
|
10
|
+
else
|
11
|
+
puts config._name
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end # Dimg
|
19
|
+
end # Dapp
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
class Dapp
|
4
|
+
module Command
|
5
|
+
module Mrproper
|
6
|
+
# rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
|
7
|
+
def mrproper
|
8
|
+
log_step_with_indent(:mrproper) do
|
9
|
+
raise Error::Command, code: :mrproper_required_option unless proper_all? || proper_dev_mode_cache? || proper_cache_version?
|
10
|
+
|
11
|
+
dapp_dangling_images_flush
|
12
|
+
|
13
|
+
if proper_all?
|
14
|
+
flush_by_label('dapp')
|
15
|
+
elsif proper_dev_mode_cache?
|
16
|
+
flush_by_label('dapp-dev-mode')
|
17
|
+
elsif proper_cache_version?
|
18
|
+
log_proper_cache do
|
19
|
+
proper_cache_images = proper_cache_all_images
|
20
|
+
remove_images(dapp_images_by_label('dapp').select { |id| !proper_cache_images.include?(id) }.map(&:strip))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
# rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
def flush_by_label(label)
|
30
|
+
log_step_with_indent(:containers) { dapp_containers_flush_by_label(label) }
|
31
|
+
log_step_with_indent(:images) { dapp_images_flush_by_label(label) }
|
32
|
+
end
|
33
|
+
|
34
|
+
def proper_all?
|
35
|
+
!!cli_options[:proper_all]
|
36
|
+
end
|
37
|
+
|
38
|
+
def proper_dev_mode_cache?
|
39
|
+
!!cli_options[:proper_dev_mode_cache]
|
40
|
+
end
|
41
|
+
|
42
|
+
def dapp_containers_flush_by_label(label)
|
43
|
+
remove_containers_by_query(%(docker ps -a -f "label=#{label}" -q), force: true)
|
44
|
+
end
|
45
|
+
|
46
|
+
def dapp_dangling_images_flush_by_label(label)
|
47
|
+
remove_images_by_query(%(docker images -f "dangling=true" -f "label=#{label}" -q), force: true)
|
48
|
+
end
|
49
|
+
|
50
|
+
def dapp_images_flush_by_label(label)
|
51
|
+
dapp_dangling_images_flush_by_label(label)
|
52
|
+
remove_images(dapp_images_by_label(label), force: true)
|
53
|
+
end
|
54
|
+
|
55
|
+
def dapp_images_by_label(label)
|
56
|
+
@dapp_images ||= begin
|
57
|
+
shellout!(%(docker images -f "dangling=false" --format="{{.Repository}}:{{.Tag}}" -f "label=#{label}"))
|
58
|
+
.stdout
|
59
|
+
.lines
|
60
|
+
.map(&:strip)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def proper_cache_all_images
|
65
|
+
shellout!([
|
66
|
+
'docker images',
|
67
|
+
'--format="{{.Repository}}:{{.Tag}}"',
|
68
|
+
%(-f "label=dapp-cache-version=#{::Dapp::BUILD_CACHE_VERSION}" -f "dangling=false")
|
69
|
+
].join(' ')).stdout.lines.map(&:strip)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end # Dimg
|
75
|
+
end # Dapp
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
class Dapp
|
4
|
+
module Command
|
5
|
+
module Push
|
6
|
+
def push(repo)
|
7
|
+
validate_repo_name(repo)
|
8
|
+
log_step_with_indent(:stages) { stages_push(repo) } if with_stages?
|
9
|
+
build_configs.each do |config|
|
10
|
+
log_dimg_name_with_indent(config) do
|
11
|
+
Dimg.new(config: config, dapp: self, ignore_git_fetch: true, should_be_built: true).tap do |dimg|
|
12
|
+
dimg.export!(repo, format: push_format(config._name))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
protected
|
19
|
+
|
20
|
+
def with_stages?
|
21
|
+
!!cli_options[:with_stages]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end # Dimg
|
27
|
+
end # Dapp
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
class Dapp
|
4
|
+
module Command
|
5
|
+
module Run
|
6
|
+
def run(docker_options, command)
|
7
|
+
one_dimg!
|
8
|
+
setup_ssh_agent
|
9
|
+
Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true, should_be_built: true).run(docker_options, command)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end # Dimg
|
15
|
+
end # Dapp
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
class Dapp
|
4
|
+
module Command
|
5
|
+
module Spush
|
6
|
+
def spush(repo)
|
7
|
+
validate_repo_name(repo)
|
8
|
+
one_dimg!
|
9
|
+
Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true, should_be_built: true).tap do |dimg|
|
10
|
+
dimg.export!(repo, format: spush_format)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end # Dimg
|
17
|
+
end # Dapp
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
class Dapp
|
4
|
+
module Command
|
5
|
+
module StageImage
|
6
|
+
def stage_image
|
7
|
+
one_dimg!
|
8
|
+
puts Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true).stage_image_name(cli_options[:stage])
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end # Dimg
|
14
|
+
end # Dapp
|
@@ -0,0 +1,137 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
class Dapp
|
4
|
+
module Command
|
5
|
+
module Stages
|
6
|
+
module CleanupLocal
|
7
|
+
def stages_cleanup_local(repo)
|
8
|
+
lock_repo(repo, readonly: true) do
|
9
|
+
raise Error::Command, code: :stages_cleanup_required_option unless stages_cleanup_option?
|
10
|
+
|
11
|
+
dapp_containers_flush
|
12
|
+
|
13
|
+
proper_cache if proper_cache_version?
|
14
|
+
stages_cleanup_by_repo(repo) if proper_repo_cache?
|
15
|
+
proper_git_commit if proper_git_commit?
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def proper_cache
|
22
|
+
log_proper_cache do
|
23
|
+
lock("#{name}.images") do
|
24
|
+
log_step_with_indent(name) do
|
25
|
+
remove_images(dapp_images_names.select { |image_name| !actual_cache_images.include?(image_name) })
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def stages_cleanup_by_repo(repo)
|
32
|
+
registry = registry(repo)
|
33
|
+
repo_dimgs = repo_dimgs_images(registry)
|
34
|
+
|
35
|
+
lock("#{name}.images") do
|
36
|
+
log_step_with_indent(name) do
|
37
|
+
dapp_dangling_images_flush
|
38
|
+
dimgs, stages = dapp_images_hash.partition { |_, image_id| repo_dimgs.values.include?(image_id) }
|
39
|
+
dimgs = dimgs.to_h
|
40
|
+
stages = stages.to_h
|
41
|
+
dimgs.each { |_, aiid| except_image_with_parents(aiid, stages) }
|
42
|
+
remove_images(stages.keys)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def repo_dimgs_images(registry)
|
48
|
+
repo_dimgs_and_cache(registry).first
|
49
|
+
end
|
50
|
+
|
51
|
+
def actual_cache_images
|
52
|
+
shellout!([
|
53
|
+
'docker images',
|
54
|
+
'--format="{{.Repository}}:{{.Tag}}"',
|
55
|
+
%(-f "label=dapp-cache-version=#{::Dapp::BUILD_CACHE_VERSION}"),
|
56
|
+
stage_cache
|
57
|
+
].join(' ')).stdout.lines.map(&:strip)
|
58
|
+
end
|
59
|
+
|
60
|
+
def dapp_images_hash
|
61
|
+
shellout!(%(docker images --format "{{.Repository}}:{{.Tag}};{{.ID}}" --no-trunc #{stage_cache})).stdout.lines.map do |line|
|
62
|
+
line.strip.split(';')
|
63
|
+
end.to_h
|
64
|
+
end
|
65
|
+
|
66
|
+
def except_image_with_parents(image_id, stages)
|
67
|
+
if image_exist?(image_id)
|
68
|
+
image_dapp_artifacts_label(image_id).each { |aiid| except_image_with_parents(aiid, stages) }
|
69
|
+
iid = image_id
|
70
|
+
loop do
|
71
|
+
stages.delete_if { |_, siid| siid == iid }
|
72
|
+
break if (iid = image_parent(iid)).empty?
|
73
|
+
end
|
74
|
+
else
|
75
|
+
stages.delete_if { |_, siid| siid == image_id }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def image_exist?(image_id)
|
80
|
+
shellout!(%(docker inspect #{image_id}))
|
81
|
+
true
|
82
|
+
rescue Error::Shellout
|
83
|
+
false
|
84
|
+
end
|
85
|
+
|
86
|
+
def image_dapp_artifacts_label(image_id)
|
87
|
+
select_dapp_artifacts_ids(::Dapp::Dimg::Image::Docker.image_config_option(image_id: image_id, option: 'labels'))
|
88
|
+
end
|
89
|
+
|
90
|
+
def image_parent(image_id)
|
91
|
+
shellout!(%(docker inspect -f {{.Parent}} #{image_id})).stdout.strip
|
92
|
+
end
|
93
|
+
|
94
|
+
def proper_git_commit
|
95
|
+
log_proper_git_commit do
|
96
|
+
unproper_images_names = []
|
97
|
+
dapp_images_detailed.each do |_, attrs|
|
98
|
+
attrs['Config']['Labels'].each do |repo_name, commit|
|
99
|
+
next if (repo = dapp_git_repositories[repo_name]).nil?
|
100
|
+
unproper_images_names.concat(image_hierarchy_by_id(attrs['Id'])) unless repo.commit_exists?(commit)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
remove_images(unproper_images_names.uniq)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def dapp_images_detailed
|
108
|
+
@dapp_images_detailed ||= {}.tap do |images|
|
109
|
+
dapp_images_names.each do |image_name|
|
110
|
+
shellout!(%(docker inspect --format='{{json .}}' #{image_name})).stdout.strip.tap do |output|
|
111
|
+
images[image_name] = output == 'null' ? {} : JSON.parse(output)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def image_hierarchy_by_id(image_id)
|
118
|
+
hierarchy = []
|
119
|
+
iids = [image_id]
|
120
|
+
|
121
|
+
loop do
|
122
|
+
hierarchy.concat(dapp_images_detailed.map { |name, attrs| name if iids.include?(attrs['Id']) }.compact)
|
123
|
+
break if begin
|
124
|
+
iids.map! do |iid|
|
125
|
+
dapp_images_detailed.map { |_, attrs| attrs['Id'] if attrs['Parent'] == iid }.compact
|
126
|
+
end.flatten!.empty?
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
hierarchy
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end # Dimg
|
137
|
+
end # Dapp
|