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,39 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
module GitRepo
|
4
|
+
class Own < Base
|
5
|
+
def initialize(dimg)
|
6
|
+
super(dimg, 'own')
|
7
|
+
end
|
8
|
+
|
9
|
+
def exclude_paths
|
10
|
+
dimg.dapp.local_git_artifact_exclude_paths
|
11
|
+
end
|
12
|
+
|
13
|
+
def path
|
14
|
+
@path ||= Rugged::Repository.discover(dimg.home_path.to_s).path
|
15
|
+
rescue Rugged::RepositoryError => _e
|
16
|
+
raise Error::Rugged, code: :local_git_repository_does_not_exist
|
17
|
+
end
|
18
|
+
|
19
|
+
def diff(from, to, **kwargs)
|
20
|
+
if to.nil?
|
21
|
+
git.lookup(from).diff_workdir
|
22
|
+
else
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def latest_commit(_branch = nil)
|
28
|
+
git.head.target_id
|
29
|
+
end
|
30
|
+
|
31
|
+
def lookup_commit(commit)
|
32
|
+
super
|
33
|
+
rescue Rugged::OdbError => _e
|
34
|
+
raise Error::Rugged, code: :commit_not_found_in_local_git_repository, data: { commit: commit }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
module GitRepo
|
4
|
+
class Remote < Base
|
5
|
+
def initialize(dimg, name, url:)
|
6
|
+
super(dimg, name)
|
7
|
+
|
8
|
+
@url = url
|
9
|
+
|
10
|
+
dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.git_artifact_clone', data: { name: name }), short: true) do
|
11
|
+
begin
|
12
|
+
Rugged::Repository.clone_at(url, path, bare: true)
|
13
|
+
rescue Rugged::NetworkError, Rugged::SslError => e
|
14
|
+
raise Error::Rugged, code: :rugged_remote_error, data: { message: e.message, url: url }
|
15
|
+
end
|
16
|
+
end unless File.directory?(path)
|
17
|
+
end
|
18
|
+
|
19
|
+
def path
|
20
|
+
dimg.build_path("#{name}.git").to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
def fetch!(branch = nil)
|
24
|
+
branch ||= self.branch
|
25
|
+
dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.git_artifact_fetch', data: { name: name }), short: true) do
|
26
|
+
git.fetch('origin', [branch])
|
27
|
+
end unless dimg.ignore_git_fetch || dimg.dapp.dry_run?
|
28
|
+
end
|
29
|
+
|
30
|
+
def latest_commit(branch)
|
31
|
+
git.ref("refs/remotes/origin/#{branch}").target_id
|
32
|
+
end
|
33
|
+
|
34
|
+
def lookup_commit(commit)
|
35
|
+
super
|
36
|
+
rescue Rugged::OdbError => _e
|
37
|
+
raise Error::Rugged, code: :commit_not_found_in_remote_git_repository, data: { commit: commit, url: url }
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
attr_reader :url
|
43
|
+
|
44
|
+
def git
|
45
|
+
super(bare: true)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
module Image
|
4
|
+
module Argument
|
5
|
+
def add_change_volume(value)
|
6
|
+
add_change_option(:volume, value)
|
7
|
+
end
|
8
|
+
|
9
|
+
def add_change_expose(value)
|
10
|
+
add_change_option(:expose, value)
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_change_env(**options)
|
14
|
+
add_change_option(:env, options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_change_label(**options)
|
18
|
+
add_change_option(:label, options)
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_change_cmd(value)
|
22
|
+
add_change_option(:cmd, value)
|
23
|
+
end
|
24
|
+
|
25
|
+
def add_change_entrypoint(value)
|
26
|
+
add_change_option(:entrypoint, value)
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_change_onbuild(value)
|
30
|
+
add_change_option(:onbuild, value)
|
31
|
+
end
|
32
|
+
|
33
|
+
def add_change_workdir(value)
|
34
|
+
add_change_option(:workdir, value)
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_change_user(value)
|
38
|
+
add_change_option(:user, value)
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_service_change_label(**options)
|
42
|
+
add_service_change_option(:label, options)
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_env(var, value)
|
46
|
+
add_option(:env, "#{var}=#{value}")
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_volume(value)
|
50
|
+
add_option(:volume, value)
|
51
|
+
end
|
52
|
+
|
53
|
+
def add_volumes_from(value)
|
54
|
+
add_option(:'volumes-from', value)
|
55
|
+
end
|
56
|
+
|
57
|
+
def add_command(*commands)
|
58
|
+
@bash_commands.concat(commands.flatten)
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_service_command(*commands)
|
62
|
+
@service_bash_commands.concat(commands.flatten)
|
63
|
+
end
|
64
|
+
|
65
|
+
def prepare_instructions(options)
|
66
|
+
options.map do |key, vals|
|
67
|
+
case key
|
68
|
+
when :cmd, :entrypoint then [vals]
|
69
|
+
when :env, :label then vals.map(&method(:options_to_args)).flatten
|
70
|
+
else vals
|
71
|
+
end.map { |val| %(#{key.to_s.upcase} #{val}) }
|
72
|
+
end.flatten
|
73
|
+
end
|
74
|
+
|
75
|
+
protected
|
76
|
+
|
77
|
+
attr_reader :bash_commands, :service_bash_commands
|
78
|
+
attr_reader :change_options, :service_change_options
|
79
|
+
attr_reader :options
|
80
|
+
|
81
|
+
def add_option(key, value)
|
82
|
+
add_option_default(options, key, value)
|
83
|
+
end
|
84
|
+
|
85
|
+
def add_change_option(key, value)
|
86
|
+
add_option_default(change_options, key, value)
|
87
|
+
end
|
88
|
+
|
89
|
+
def add_service_change_option(key, value)
|
90
|
+
add_option_default(service_change_options, key, value)
|
91
|
+
end
|
92
|
+
|
93
|
+
def add_option_default(hash, key, value)
|
94
|
+
hash[key] = (hash[key].nil? ? [value] : (hash[key] << value)).flatten
|
95
|
+
end
|
96
|
+
|
97
|
+
def from_change_options
|
98
|
+
return {} if from.nil?
|
99
|
+
[:entrypoint, :cmd].each_with_object({}) do |option, options|
|
100
|
+
options[option] = self.class.image_config_option(image_id: from.built_id, option: option)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def options_to_args(options)
|
105
|
+
options.map { |key, value| "#{key}=#{value}" }
|
106
|
+
end
|
107
|
+
|
108
|
+
def prepared_options
|
109
|
+
all_options.map { |key, vals| Array(vals).map { |val| "--#{key}=#{val}" } }.flatten.join(' ')
|
110
|
+
end
|
111
|
+
|
112
|
+
def all_options
|
113
|
+
service_options.merge(options)
|
114
|
+
end
|
115
|
+
|
116
|
+
def all_bash_commands
|
117
|
+
Array(bash_commands) + Array(service_bash_commands)
|
118
|
+
end
|
119
|
+
|
120
|
+
def service_options
|
121
|
+
{ entrypoint: dapp.bash_bin, name: container_name }
|
122
|
+
end
|
123
|
+
|
124
|
+
def prepared_change
|
125
|
+
prepare_instructions(all_change_options).map { |instruction| %(-c '#{instruction}') }.join(' ')
|
126
|
+
end
|
127
|
+
|
128
|
+
def all_change_options
|
129
|
+
from_change_options.merge(change_options.merge(service_change_options) { |_, v1, v2| [v1, v2].flatten })
|
130
|
+
end
|
131
|
+
|
132
|
+
def prepared_bash_command
|
133
|
+
dapp.shellout_pack prepared_commands.join(' && ')
|
134
|
+
end
|
135
|
+
|
136
|
+
def prepared_commands
|
137
|
+
return [dapp.true_bin] if all_bash_commands.empty?
|
138
|
+
all_bash_commands
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end # Image
|
142
|
+
end # Dimg
|
143
|
+
end # Dapp
|
@@ -0,0 +1,127 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
module Image
|
4
|
+
class Docker
|
5
|
+
attr_reader :from
|
6
|
+
attr_reader :name
|
7
|
+
attr_reader :dapp
|
8
|
+
|
9
|
+
def self.image_by_name(name:, **kwargs)
|
10
|
+
(@images ||= {})[name] ||= new(name: name, **kwargs)
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(name:, dapp:, from: nil)
|
14
|
+
@from = from
|
15
|
+
@name = name
|
16
|
+
@dapp = dapp
|
17
|
+
end
|
18
|
+
|
19
|
+
def id
|
20
|
+
cache[:id]
|
21
|
+
end
|
22
|
+
|
23
|
+
def untag!
|
24
|
+
raise Error::Build, code: :image_already_untagged, data: { name: name } unless tagged?
|
25
|
+
dapp.shellout!("docker rmi #{name}")
|
26
|
+
cache_reset
|
27
|
+
end
|
28
|
+
|
29
|
+
def push!
|
30
|
+
raise Error::Build, code: :image_not_exist, data: { name: name } unless tagged?
|
31
|
+
dapp.log_secondary_process(dapp.t(code: 'process.image_push', data: { name: name })) do
|
32
|
+
dapp.shellout!("docker push #{name}", log_verbose: true)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def pull!
|
37
|
+
return if tagged?
|
38
|
+
dapp.log_secondary_process(dapp.t(code: 'process.image_pull', data: { name: name })) do
|
39
|
+
dapp.shellout!("docker pull #{name}", log_verbose: true)
|
40
|
+
end
|
41
|
+
cache_reset
|
42
|
+
end
|
43
|
+
|
44
|
+
def tagged?
|
45
|
+
!!id
|
46
|
+
end
|
47
|
+
|
48
|
+
def created_at
|
49
|
+
raise Error::Build, code: :image_not_exist, data: { name: name } unless tagged?
|
50
|
+
cache[:created_at]
|
51
|
+
end
|
52
|
+
|
53
|
+
def size
|
54
|
+
raise Error::Build, code: :image_not_exist, data: { name: name } unless tagged?
|
55
|
+
cache[:size]
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.image_config_option(image_id:, option:)
|
59
|
+
output = ::Dapp::Dapp.shellout!("docker inspect --format='{{json .Config.#{option.to_s.capitalize}}}' #{image_id}").stdout.strip
|
60
|
+
output == 'null' ? [] : JSON.parse(output)
|
61
|
+
end
|
62
|
+
|
63
|
+
def cache_reset
|
64
|
+
self.class.cache_reset(name)
|
65
|
+
end
|
66
|
+
|
67
|
+
protected
|
68
|
+
|
69
|
+
def cache
|
70
|
+
self.class.cache[name.to_s] || {}
|
71
|
+
end
|
72
|
+
|
73
|
+
class << self
|
74
|
+
def image_name_format
|
75
|
+
separator = '[_.]|__|[-]*'
|
76
|
+
tag = "[[:alnum:]][[[:alnum:]]#{separator}]{0,127}"
|
77
|
+
"#{DockerRegistry.repo_name_format}(:(?<tag>#{tag}))?"
|
78
|
+
end
|
79
|
+
|
80
|
+
def image_name?(name)
|
81
|
+
!(/^#{image_name_format}$/ =~ name).nil?
|
82
|
+
end
|
83
|
+
|
84
|
+
def tag!(id:, tag:)
|
85
|
+
::Dapp::Dapp.shellout!("docker tag #{id} #{tag}")
|
86
|
+
cache_reset
|
87
|
+
end
|
88
|
+
|
89
|
+
def save!(image_or_images, file_path)
|
90
|
+
images = Array(image_or_images).join(' ')
|
91
|
+
::Dapp::Dapp.shellout!("docker save -o #{file_path} #{images}", log_verbose: true)
|
92
|
+
end
|
93
|
+
|
94
|
+
def load!(file_path)
|
95
|
+
::Dapp::Dapp.shellout!("docker load -i #{file_path}", log_verbose: true)
|
96
|
+
end
|
97
|
+
|
98
|
+
def cache
|
99
|
+
@cache ||= (@cache = {}).tap { cache_reset }
|
100
|
+
end
|
101
|
+
|
102
|
+
def cache_reset(name = '')
|
103
|
+
cache.delete(name)
|
104
|
+
::Dapp::Dapp.shellout!("docker images --format='{{.Repository}}:{{.Tag}};{{.ID}};{{.CreatedAt}};{{.Size}}' --no-trunc #{name}")
|
105
|
+
.stdout
|
106
|
+
.lines
|
107
|
+
.each do |l|
|
108
|
+
name, id, created_at, size_field = l.split(';')
|
109
|
+
size = begin
|
110
|
+
number, unit = size_field.split
|
111
|
+
coef = case unit.to_s.downcase
|
112
|
+
when 'b' then return number.to_f
|
113
|
+
when 'kb' then 1
|
114
|
+
when 'mb' then 2
|
115
|
+
when 'gb' then 3
|
116
|
+
when 'tb' then 4
|
117
|
+
end
|
118
|
+
number.to_f * (1000**coef)
|
119
|
+
end
|
120
|
+
cache[name] = { id: id, created_at: created_at, size: size }
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end # Docker
|
125
|
+
end # Image
|
126
|
+
end # Dimg
|
127
|
+
end # Dapp
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
module Image
|
4
|
+
class Scratch < Stage
|
5
|
+
def initialize(**_kwargs)
|
6
|
+
super
|
7
|
+
@from_archives = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def add_archive(*archives)
|
11
|
+
@from_archives.concat(archives.flatten)
|
12
|
+
end
|
13
|
+
|
14
|
+
def build!(**_kwargs)
|
15
|
+
raise
|
16
|
+
|
17
|
+
# FIXME: system-shellout rejected
|
18
|
+
# build_from_command = if from_archives.empty?
|
19
|
+
# "#{dapp.tar_bin} c --files-from /dev/null"
|
20
|
+
# else
|
21
|
+
# "#{dapp.cat_bin} #{from_archives.join(' ')}"
|
22
|
+
# end
|
23
|
+
# @built_id = dapp.system_shellout!("#{build_from_command} | docker import #{prepared_change} - ").stdout.strip
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
attr_accessor :from_archives
|
29
|
+
end # Stage
|
30
|
+
end # Image
|
31
|
+
end # Dimg
|
32
|
+
end # Dapp
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
module Image
|
4
|
+
class Stage < Docker
|
5
|
+
include Argument
|
6
|
+
|
7
|
+
def initialize(name:, dapp:, built_id: nil, from: nil)
|
8
|
+
@container_name = "#{name[/[[^:].]*/]}.#{SecureRandom.hex(4)}"
|
9
|
+
@built_id = built_id
|
10
|
+
|
11
|
+
@bash_commands = []
|
12
|
+
@service_bash_commands = []
|
13
|
+
@options = {}
|
14
|
+
@change_options = {}
|
15
|
+
@service_change_options = {}
|
16
|
+
|
17
|
+
super(name: name, dapp: dapp, from: from)
|
18
|
+
end
|
19
|
+
|
20
|
+
def built_id
|
21
|
+
@built_id ||= id
|
22
|
+
end
|
23
|
+
|
24
|
+
def build!
|
25
|
+
run!
|
26
|
+
@built_id = commit!
|
27
|
+
ensure
|
28
|
+
dapp.shellout("docker rm #{container_name}")
|
29
|
+
end
|
30
|
+
|
31
|
+
def built?
|
32
|
+
!built_id.nil?
|
33
|
+
end
|
34
|
+
|
35
|
+
def export!(name)
|
36
|
+
tag!(name).tap do |image|
|
37
|
+
image.push!
|
38
|
+
image.untag!
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def tag!(name)
|
43
|
+
clone!(name).tap do |image|
|
44
|
+
self.class.tag!(id: image.built_id, tag: image.name)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def import!(name)
|
49
|
+
clone!(name).tap do |image|
|
50
|
+
image.pull!
|
51
|
+
@built_id = image.built_id
|
52
|
+
save_in_cache!
|
53
|
+
image.untag!
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def save_in_cache!
|
58
|
+
dapp.log_warning(desc: { code: :another_image_already_tagged }) if !(existed_id = id).nil? && built_id != existed_id
|
59
|
+
self.class.tag!(id: built_id, tag: name)
|
60
|
+
end
|
61
|
+
|
62
|
+
def labels
|
63
|
+
raise Error::Build, code: :image_not_exist, data: { name: name } if built_id.nil?
|
64
|
+
self.class.image_config_option(image_id: built_id, option: 'labels')
|
65
|
+
end
|
66
|
+
|
67
|
+
protected
|
68
|
+
|
69
|
+
attr_reader :container_name
|
70
|
+
|
71
|
+
def run!
|
72
|
+
raise Error::Build, code: :built_id_not_defined if from.built_id.nil?
|
73
|
+
dapp.shellout!("docker run #{prepared_options} #{from.built_id} -ec '#{prepared_bash_command}'", log_verbose: true)
|
74
|
+
rescue Error::Shellout => error
|
75
|
+
dapp.log_warning(desc: { code: :launched_command, data: { command: prepared_commands.join(' && ') }, context: :container })
|
76
|
+
|
77
|
+
raise unless dapp.introspect_error? || dapp.introspect_before_error?
|
78
|
+
built_id = dapp.introspect_error? ? commit! : from.built_id
|
79
|
+
raise Exception::IntrospectImage, data: { built_id: built_id,
|
80
|
+
options: prepared_options,
|
81
|
+
rmi: dapp.introspect_error?,
|
82
|
+
error: error }
|
83
|
+
end
|
84
|
+
|
85
|
+
def commit!
|
86
|
+
dapp.shellout!("docker commit #{prepared_change} #{container_name}").stdout.strip
|
87
|
+
end
|
88
|
+
|
89
|
+
def clone!(name)
|
90
|
+
self.class.new(name: name, dapp: dapp, built_id: built_id)
|
91
|
+
end
|
92
|
+
end # Stage
|
93
|
+
end # Image
|
94
|
+
end # Dimg
|
95
|
+
end # Dapp
|