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
@@ -6,15 +6,21 @@ module Dapp
|
|
6
6
|
# Push
|
7
7
|
module Push
|
8
8
|
def push(repo)
|
9
|
+
log_step_with_indent(:stages) { stages_push(repo) } if with_stages?
|
9
10
|
build_configs.each do |config|
|
10
|
-
|
11
|
-
with_log_indent do
|
11
|
+
log_step_with_indent(config._name) do
|
12
12
|
Application.new(config: config, project: self, ignore_git_fetch: true, should_be_built: true).tap do |app|
|
13
13
|
app.export!(repo, format: '%{repo}:%{application_name}-%{tag}')
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def with_stages?
|
22
|
+
!!cli_options[:with_stages]
|
23
|
+
end
|
18
24
|
end
|
19
25
|
end
|
20
26
|
end # Project
|
@@ -6,7 +6,7 @@ module Dapp
|
|
6
6
|
# Run
|
7
7
|
module Run
|
8
8
|
def run(docker_options, command)
|
9
|
-
raise Error::Project, code: :
|
9
|
+
raise Error::Project, code: :command_unexpected_apps_number unless build_configs.one?
|
10
10
|
Application.new(config: build_configs.first, project: self, ignore_git_fetch: true, should_be_built: true).run(docker_options, command)
|
11
11
|
end
|
12
12
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
# Command
|
5
|
+
module Command
|
6
|
+
# StageImage
|
7
|
+
module StageImage
|
8
|
+
def stage_image
|
9
|
+
raise Error::Project, code: :command_unexpected_apps_number unless build_configs.one?
|
10
|
+
puts Application.new(config: build_configs.first, project: self, ignore_git_fetch: true).stage_image_name(cli_options[:stage])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end # Project
|
15
|
+
end # Dapp
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
# Command
|
5
|
+
module Command
|
6
|
+
module Stages
|
7
|
+
# CleanupLocal
|
8
|
+
module CleanupLocal
|
9
|
+
def stages_cleanup_local(repo)
|
10
|
+
lock_repo(repo, readonly: true) do
|
11
|
+
registry = registry(repo)
|
12
|
+
repo_applications = repo_applications_images(registry)
|
13
|
+
proper_cache if proper_cache_version?
|
14
|
+
build_configs.map(&:_basename).uniq.each do |basename|
|
15
|
+
cleanup_project(basename, repo_applications)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def cleanup_project(basename, repo_applications)
|
23
|
+
lock("#{basename}.images") do
|
24
|
+
log_step_with_indent(basename) do
|
25
|
+
project_containers_flush(basename)
|
26
|
+
project_dangling_images_flush(basename)
|
27
|
+
apps, stages = project_images_hash(basename).partition { |_, image_id| repo_applications.values.include?(image_id) }
|
28
|
+
apps = apps.to_h
|
29
|
+
stages = stages.to_h
|
30
|
+
apps.each { |_, aiid| clear_stages(aiid, stages) }
|
31
|
+
remove_images(stages.keys)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def repo_applications_images(registry)
|
37
|
+
repo_images(registry).first
|
38
|
+
end
|
39
|
+
|
40
|
+
def proper_cache
|
41
|
+
log_proper_cache do
|
42
|
+
build_configs.map(&:_basename).uniq.each do |basename|
|
43
|
+
lock("#{basename}.images") do
|
44
|
+
log_step_with_indent(basename) do
|
45
|
+
project_containers_flush(basename)
|
46
|
+
actual_cache_images = actual_cache_images(basename)
|
47
|
+
remove_images(project_images(basename).lines.select { |id| !actual_cache_images.lines.include?(id) }.map(&:strip))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def actual_cache_images(basename)
|
55
|
+
shellout!([
|
56
|
+
'docker images',
|
57
|
+
'--format="{{.Repository}}:{{.Tag}}"',
|
58
|
+
%(-f "label=dapp-cache-version=#{Dapp::BUILD_CACHE_VERSION}"),
|
59
|
+
stage_cache(basename)
|
60
|
+
].join(' ')).stdout.strip
|
61
|
+
end
|
62
|
+
|
63
|
+
def project_images_hash(basename)
|
64
|
+
shellout!(%(docker images --format "{{.Repository}}:{{.Tag}};{{.ID}}" --no-trunc #{stage_cache(basename)})).stdout.lines.map do |line|
|
65
|
+
line.strip.split(';')
|
66
|
+
end.to_h
|
67
|
+
end
|
68
|
+
|
69
|
+
def clear_stages(image_id, stages)
|
70
|
+
if image_exist?(image_id)
|
71
|
+
image_dapp_artifacts_label(image_id).each { |aiid| clear_stages(aiid, stages) }
|
72
|
+
iid = image_id
|
73
|
+
loop do
|
74
|
+
stages.delete_if { |_, siid| siid == iid }
|
75
|
+
break if (iid = image_parent(iid)).empty?
|
76
|
+
end
|
77
|
+
else
|
78
|
+
stages.delete_if { |_, siid| siid == image_id }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def image_exist?(image_id)
|
83
|
+
shellout!(%(docker inspect #{image_id}))
|
84
|
+
true
|
85
|
+
rescue Error::Shellout
|
86
|
+
false
|
87
|
+
end
|
88
|
+
|
89
|
+
def image_dapp_artifacts_label(image_id)
|
90
|
+
select_dapp_artifacts_ids(Image::Docker.image_config_option(image_id: image_id, option: 'labels'))
|
91
|
+
end
|
92
|
+
|
93
|
+
def image_parent(image_id)
|
94
|
+
shellout!(%(docker inspect -f {{.Parent}} #{image_id})).stdout.strip
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end # Project
|
100
|
+
end # Dapp
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
# Command
|
5
|
+
module Command
|
6
|
+
module Stages
|
7
|
+
# CleanupRepo
|
8
|
+
module CleanupRepo
|
9
|
+
def stages_cleanup_repo(repo)
|
10
|
+
lock_repo(repo) do
|
11
|
+
registry = registry(repo)
|
12
|
+
repo_applications, repo_stages = repo_images(registry)
|
13
|
+
repo_stages.delete_if { |_, siid| repo_applications.values.include?(siid) } # ignoring stages with apps ids (v2)
|
14
|
+
proper_repo_cache(registry, repo_stages) if proper_cache_version?
|
15
|
+
log_step_with_indent(repo) do
|
16
|
+
repo_applications.each { |image_tag, image_id| clear_repo_stages(registry, repo_stages, image_tag, image_id) }
|
17
|
+
repo_stages.keys.each { |image_tag| delete_repo_image(registry, image_tag) }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
def clear_repo_stages(registry, repo_stages, image_tag, image_id)
|
25
|
+
repo_image_dapp_artifacts_labels(registry, image_tag).each do |iid|
|
26
|
+
itag = find_image_tag_by_id(repo_stages, iid)
|
27
|
+
clear_repo_stages(registry, repo_stages, itag, iid) unless itag.nil?
|
28
|
+
end
|
29
|
+
|
30
|
+
itag = image_tag
|
31
|
+
iid = image_id
|
32
|
+
loop do
|
33
|
+
repo_stages.delete_if { |_, siid| siid == iid }
|
34
|
+
break if itag.nil? || (iid = registry.image_parent_id(itag)).empty?
|
35
|
+
itag = find_image_tag_by_id(repo_stages, iid)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def repo_image_dapp_artifacts_labels(registry, image_tag)
|
40
|
+
select_dapp_artifacts_ids(registry.image_labels(image_tag))
|
41
|
+
end
|
42
|
+
|
43
|
+
def repo_image_dapp_cache_version_label(registry, image_tag)
|
44
|
+
registry.image_labels(image_tag)['dapp-cache-version']
|
45
|
+
end
|
46
|
+
|
47
|
+
def find_image_tag_by_id(images, image_id)
|
48
|
+
images.each { |tag, id| return tag if id == image_id }
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
def proper_repo_cache(registry, repo_stages)
|
53
|
+
log_proper_cache do
|
54
|
+
wrong_cache_images = repo_stages.select do |image_tag, _|
|
55
|
+
repo_image_dapp_cache_version_label(registry, image_tag) != Dapp::BUILD_CACHE_VERSION.to_s
|
56
|
+
end
|
57
|
+
wrong_cache_images.each { |image_tag, _| delete_repo_image(registry, image_tag) }
|
58
|
+
repo_stages.delete_if { |image_tag, _| wrong_cache_images.keys.include?(image_tag) }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end # Project
|
65
|
+
end # Dapp
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
# Command
|
5
|
+
module Command
|
6
|
+
module Stages
|
7
|
+
# Common
|
8
|
+
module Common
|
9
|
+
protected
|
10
|
+
|
11
|
+
def registry(repo)
|
12
|
+
DockerRegistry.new(repo)
|
13
|
+
end
|
14
|
+
|
15
|
+
def repo_images(registry)
|
16
|
+
format = proc do |arr|
|
17
|
+
arr.map do |tag|
|
18
|
+
if (id = registry.image_id(tag)).nil?
|
19
|
+
log_warning(desc: { code: 'tag_ignored', context: 'warning', data: { tag: tag } })
|
20
|
+
else
|
21
|
+
[tag, id]
|
22
|
+
end
|
23
|
+
end.compact.to_h
|
24
|
+
end
|
25
|
+
applications, stages = registry.tags.partition { |tag| !tag.start_with?('dappstage') }
|
26
|
+
[format.call(applications), format.call(stages)]
|
27
|
+
end
|
28
|
+
|
29
|
+
def delete_repo_image(registry, image_tag)
|
30
|
+
if dry_run?
|
31
|
+
log(image_tag)
|
32
|
+
else
|
33
|
+
registry.image_delete(image_tag)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def select_dapp_artifacts_ids(hash)
|
38
|
+
hash.select { |k, _v| k.start_with?('dapp-artifact') }.values
|
39
|
+
end
|
40
|
+
|
41
|
+
def lock_repo(repo, *args, &blk)
|
42
|
+
lock("repo.#{hashsum repo}", *args, &blk)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end # Project
|
48
|
+
end # Dapp
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
# Command
|
5
|
+
module Command
|
6
|
+
module Stages
|
7
|
+
# FlushLocal
|
8
|
+
module FlushLocal
|
9
|
+
def stages_flush_local
|
10
|
+
build_configs.map(&:_basename).uniq.each do |basename|
|
11
|
+
lock("#{basename}.images") do
|
12
|
+
log_step_with_indent(basename) do
|
13
|
+
project_containers_flush(basename)
|
14
|
+
project_dangling_images_flush(basename)
|
15
|
+
remove_images(project_images(basename).lines.map(&:strip))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end # Project
|
24
|
+
end # Dapp
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
# Command
|
5
|
+
module Command
|
6
|
+
module Stages
|
7
|
+
# FlushRepo
|
8
|
+
module FlushRepo
|
9
|
+
def stages_flush_repo(repo)
|
10
|
+
lock_repo(repo) do
|
11
|
+
log_step_with_indent(repo) do
|
12
|
+
registry = registry(repo)
|
13
|
+
repo_applications, repo_stages = repo_images(registry)
|
14
|
+
repo_applications.merge(repo_stages).keys.each { |image_tag| delete_repo_image(registry, image_tag) }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end # Project
|
22
|
+
end # Dapp
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
# Command
|
5
|
+
module Command
|
6
|
+
module Stages
|
7
|
+
# Pull
|
8
|
+
module Pull
|
9
|
+
def stages_pull(repo)
|
10
|
+
build_configs.each do |config|
|
11
|
+
log_step_with_indent(config._name) do
|
12
|
+
Application.new(config: config, project: self, ignore_git_fetch: true).tap do |app|
|
13
|
+
app.import_stages!(repo, format: '%{repo}:dappstage-%{signature}')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def pull_all_stages?
|
20
|
+
!!cli_options[:pull_all_stages]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end # Project
|
26
|
+
end # Dapp
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
# Command
|
5
|
+
module Command
|
6
|
+
module Stages
|
7
|
+
# Push
|
8
|
+
module Push
|
9
|
+
def stages_push(repo)
|
10
|
+
build_configs.each do |config|
|
11
|
+
log_step_with_indent(config._name) do
|
12
|
+
Application.new(config: config, project: self, ignore_git_fetch: true, should_be_built: true).tap do |app|
|
13
|
+
app.export_stages!(repo, format: '%{repo}:dappstage-%{signature}')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end # Project
|
22
|
+
end # Dapp
|
@@ -63,7 +63,9 @@ module Dapp
|
|
63
63
|
raise Error::Dappfile, code: :incorrect, data: { error: e.class.name, message: message }
|
64
64
|
end
|
65
65
|
end
|
66
|
-
config._apps.select { |app| app_filters.any? { |pattern| File.fnmatch(pattern, app._name) } }
|
66
|
+
config._apps.select { |app| app_filters.any? { |pattern| File.fnmatch(pattern, app._name) } }.tap do |apps|
|
67
|
+
apps.each { |app| app.send(:validate!) }
|
68
|
+
end
|
67
69
|
end
|
68
70
|
end # Dappfile
|
69
71
|
end # Project
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
# Deps
|
5
|
+
module Deps
|
6
|
+
# Base
|
7
|
+
module Base
|
8
|
+
BASE_VERSION = '0.1.14'.freeze
|
9
|
+
|
10
|
+
def base_container_name # FIXME: hashsum(image) or dockersafe()
|
11
|
+
"dappdeps_base_#{BASE_VERSION}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def base_container
|
15
|
+
@base_container ||= begin
|
16
|
+
if shellout("docker inspect #{base_container_name}").exitstatus.nonzero?
|
17
|
+
log_secondary_process(t(code: 'process.base_container_loading'), short: true) do
|
18
|
+
shellout!(
|
19
|
+
['docker create',
|
20
|
+
"--name #{base_container_name}",
|
21
|
+
"--volume /.dapp/deps/base/#{BASE_VERSION} dappdeps/base:#{BASE_VERSION}"].join(' ')
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
base_container_name
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
%w(rsync diff date echo cat
|
30
|
+
stat sleep mkdir find
|
31
|
+
install sed cp true
|
32
|
+
bash tar sudo).each do |cmd|
|
33
|
+
define_method("#{cmd}_path") { "/.dapp/deps/base/#{BASE_VERSION}/bin/#{cmd}" }
|
34
|
+
end
|
35
|
+
|
36
|
+
def sudo_command(owner: nil, group: nil)
|
37
|
+
sudo = ''
|
38
|
+
if owner || group
|
39
|
+
sudo = "#{sudo_path} -E "
|
40
|
+
sudo += "-u #{sudo_format_user(owner)} " if owner
|
41
|
+
sudo += "-g #{sudo_format_user(group)} " if group
|
42
|
+
end
|
43
|
+
sudo
|
44
|
+
end
|
45
|
+
|
46
|
+
def sudo_format_user(user)
|
47
|
+
user.to_s.to_i.to_s == user.to_s ? "\\\##{user}" : user
|
48
|
+
end
|
49
|
+
end # Base
|
50
|
+
end # Deps
|
51
|
+
end # Project
|
52
|
+
end # Dapp
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
# Deps
|
5
|
+
module Deps
|
6
|
+
# Gitartifact
|
7
|
+
module Gitartifact
|
8
|
+
GITARTIFACT_VERSION = '0.1.7'.freeze
|
9
|
+
|
10
|
+
def gitartifact_container_name # FIXME: hashsum(image) or dockersafe()
|
11
|
+
"dappdeps_gitartifact_#{GITARTIFACT_VERSION}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def gitartifact_container
|
15
|
+
@gitartifact_container ||= begin
|
16
|
+
if shellout("docker inspect #{gitartifact_container_name}").exitstatus.nonzero?
|
17
|
+
log_secondary_process(t(code: 'process.gitartifact_container_loading'), short: true) do
|
18
|
+
shellout!(
|
19
|
+
['docker create',
|
20
|
+
"--name #{gitartifact_container_name}",
|
21
|
+
"--volume /.dapp/deps/gitartifact/#{GITARTIFACT_VERSION}",
|
22
|
+
"dappdeps/gitartifact:#{GITARTIFACT_VERSION}"].join(' ')
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
gitartifact_container_name
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def git_path
|
31
|
+
"/.dapp/deps/gitartifact/#{GITARTIFACT_VERSION}/bin/git"
|
32
|
+
end
|
33
|
+
end # Gitartifact
|
34
|
+
end # Deps
|
35
|
+
end # Project
|
36
|
+
end # Dapp
|