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.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dapp +3 -3
  3. data/config/en/common.yml +19 -4
  4. data/config/en/net_status.yml +13 -4
  5. data/lib/dapp.rb +48 -16
  6. data/lib/dapp/application.rb +75 -40
  7. data/lib/dapp/application/path.rb +3 -2
  8. data/lib/dapp/application/stages.rb +59 -0
  9. data/lib/dapp/artifact.rb +22 -0
  10. data/lib/dapp/build/stage/after_install_artifact.rb +13 -0
  11. data/lib/dapp/build/stage/after_setup_artifact.rb +17 -0
  12. data/lib/dapp/build/stage/artifact_base.rb +80 -0
  13. data/lib/dapp/build/stage/artifact_default.rb +62 -0
  14. data/lib/dapp/build/stage/base.rb +47 -12
  15. data/lib/dapp/build/stage/before_install.rb +6 -5
  16. data/lib/dapp/build/stage/before_install_artifact.rb +13 -0
  17. data/lib/dapp/build/stage/before_setup.rb +7 -8
  18. data/lib/dapp/build/stage/before_setup_artifact.rb +13 -0
  19. data/lib/dapp/build/stage/build_artifact.rb +32 -0
  20. data/lib/dapp/build/stage/docker_instructions.rb +4 -22
  21. data/lib/dapp/build/stage/from.rb +7 -8
  22. data/lib/dapp/build/stage/ga_archive.rb +1 -1
  23. data/lib/dapp/build/stage/ga_archive_dependencies.rb +1 -1
  24. data/lib/dapp/build/stage/ga_artifact_patch.rb +21 -0
  25. data/lib/dapp/build/stage/ga_base.rb +6 -29
  26. data/lib/dapp/build/stage/ga_dependencies_base.rb +4 -13
  27. data/lib/dapp/build/stage/ga_latest_patch.rb +2 -2
  28. data/lib/dapp/build/stage/import_artifact.rb +69 -0
  29. data/lib/dapp/build/stage/install/ga_post_install_patch.rb +1 -1
  30. data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +1 -1
  31. data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +1 -7
  32. data/lib/dapp/build/stage/install/install.rb +12 -7
  33. data/lib/dapp/build/stage/mod/logging.rb +10 -7
  34. data/lib/dapp/build/stage/setup/chef_cookbooks.rb +3 -4
  35. data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +1 -1
  36. data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +2 -2
  37. data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +2 -8
  38. data/lib/dapp/build/stage/setup/setup.rb +12 -7
  39. data/lib/dapp/builder/base.rb +13 -1
  40. data/lib/dapp/builder/chef.rb +125 -79
  41. data/lib/dapp/builder/chef/cookbook_metadata.rb +1 -1
  42. data/lib/dapp/builder/shell.rb +2 -3
  43. data/lib/dapp/cli.rb +3 -3
  44. data/lib/dapp/cli/base.rb +0 -2
  45. data/lib/dapp/cli/bp.rb +0 -4
  46. data/lib/dapp/cli/build.rb +3 -7
  47. data/lib/dapp/cli/cleanup.rb +0 -2
  48. data/lib/dapp/cli/list.rb +0 -2
  49. data/lib/dapp/cli/mrproper.rb +22 -0
  50. data/lib/dapp/cli/push.rb +4 -3
  51. data/lib/dapp/cli/run.rb +0 -2
  52. data/lib/dapp/cli/spush.rb +0 -2
  53. data/lib/dapp/cli/stage_image.rb +24 -0
  54. data/lib/dapp/cli/stages.rb +7 -5
  55. data/lib/dapp/cli/stages/cleanup_local.rb +28 -0
  56. data/lib/dapp/cli/stages/cleanup_repo.rb +24 -0
  57. data/lib/dapp/cli/stages/{flush.rb → flush_local.rb} +4 -6
  58. data/lib/dapp/cli/stages/{cleanup.rb → flush_repo.rb} +4 -6
  59. data/lib/dapp/cli/stages/pull.rb +28 -0
  60. data/lib/dapp/cli/stages/push.rb +24 -0
  61. data/lib/dapp/config/application.rb +185 -44
  62. data/lib/dapp/config/artifact.rb +10 -50
  63. data/lib/dapp/config/directive/artifact.rb +77 -0
  64. data/lib/dapp/config/directive/build_dir.rb +9 -0
  65. data/lib/dapp/config/directive/chef.rb +95 -0
  66. data/lib/dapp/config/directive/docker/artifact.rb +26 -0
  67. data/lib/dapp/config/directive/docker/base.rb +91 -0
  68. data/lib/dapp/config/directive/git_artifact.rb +59 -0
  69. data/lib/dapp/config/directive/shell/artifact.rb +38 -0
  70. data/lib/dapp/config/directive/shell/base.rb +85 -0
  71. data/lib/dapp/config/directive/tmp_dir.rb +36 -0
  72. data/lib/dapp/config/main.rb +1 -7
  73. data/lib/dapp/core_ext/hash.rb +21 -0
  74. data/lib/dapp/docker_registry/base.rb +60 -5
  75. data/lib/dapp/docker_registry/mod/request.rb +2 -14
  76. data/lib/dapp/git_artifact.rb +32 -23
  77. data/lib/dapp/git_repo/base.rb +1 -1
  78. data/lib/dapp/image/argument.rb +3 -3
  79. data/lib/dapp/image/docker.rb +13 -16
  80. data/lib/dapp/image/scratch.rb +29 -0
  81. data/lib/dapp/image/stage.rb +33 -23
  82. data/lib/dapp/lock/base.rb +18 -11
  83. data/lib/dapp/lock/file.rb +18 -16
  84. data/lib/dapp/prctl.rb +1 -0
  85. data/lib/dapp/project.rb +22 -9
  86. data/lib/dapp/project/command/bp.rb +2 -5
  87. data/lib/dapp/project/command/build.rb +1 -2
  88. data/lib/dapp/project/command/cleanup.rb +9 -7
  89. data/lib/dapp/project/command/common.rb +37 -12
  90. data/lib/dapp/project/command/mrproper.rb +57 -0
  91. data/lib/dapp/project/command/push.rb +8 -2
  92. data/lib/dapp/project/command/run.rb +1 -1
  93. data/lib/dapp/project/command/stage_image.rb +15 -0
  94. data/lib/dapp/project/command/stages/cleanup_local.rb +100 -0
  95. data/lib/dapp/project/command/stages/cleanup_repo.rb +65 -0
  96. data/lib/dapp/project/command/stages/common.rb +48 -0
  97. data/lib/dapp/project/command/stages/flush_local.rb +24 -0
  98. data/lib/dapp/project/command/stages/flush_repo.rb +22 -0
  99. data/lib/dapp/project/command/stages/pull.rb +26 -0
  100. data/lib/dapp/project/command/stages/push.rb +22 -0
  101. data/lib/dapp/project/dappfile.rb +3 -1
  102. data/lib/dapp/project/deps/base.rb +52 -0
  103. data/lib/dapp/project/deps/gitartifact.rb +36 -0
  104. data/lib/dapp/project/lock.rb +20 -13
  105. data/lib/dapp/project/logging/base.rb +20 -3
  106. data/lib/dapp/project/logging/i18n.rb +25 -0
  107. data/lib/dapp/project/logging/paint.rb +47 -0
  108. data/lib/dapp/project/logging/process.rb +17 -10
  109. data/lib/dapp/project/shellout/base.rb +74 -0
  110. data/lib/dapp/project/shellout/streaming.rb +49 -0
  111. data/lib/dapp/project/shellout/system.rb +72 -0
  112. data/lib/dapp/project/ssh_agent.rb +8 -9
  113. data/lib/dapp/version.rb +1 -1
  114. metadata +48 -17
  115. data/lib/dapp/build/stage/artifact.rb +0 -40
  116. data/lib/dapp/build/stage/mod/artifact.rb +0 -79
  117. data/lib/dapp/config/chef.rb +0 -51
  118. data/lib/dapp/config/docker.rb +0 -82
  119. data/lib/dapp/config/git_artifact.rb +0 -51
  120. data/lib/dapp/config/shell.rb +0 -64
  121. data/lib/dapp/helper/i18n.rb +0 -20
  122. data/lib/dapp/helper/paint.rb +0 -27
  123. data/lib/dapp/helper/shellout.rb +0 -63
  124. data/lib/dapp/helper/streaming.rb +0 -47
  125. data/lib/dapp/project/command/stages_cleanup.rb +0 -72
  126. data/lib/dapp/project/command/stages_flush.rb +0 -20
  127. 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
- log_step(config._name)
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: :run_command_unexpected_apps_number unless build_configs.one?
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