dapp 0.7.11 → 0.7.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 753069f8c28bcede5ca0d3f6f5f5419135c7fab9
4
- data.tar.gz: 88812ab9b681784bec6288903e34be896b78a861
3
+ metadata.gz: 6e413ad01ef18d652b7dbda03c0b68ebbd62b1d0
4
+ data.tar.gz: 207e309aedd9d439e673fbaabdfc1e50cb9a5a10
5
5
  SHA512:
6
- metadata.gz: 0ceb1e79ce7906f40384410cab6d35098e3dffe2e591194e74e6b4a8beb01453a995634d037c6113a6c7aaf09c2868b0e5b8afd6e81b6f25d9f05dce851e8cb4
7
- data.tar.gz: 2ab1fc615718fae7ffc543e84dd1979be9ca97e4b1c5f89c8ec5d10c64fcdb5209920e7842494f4fecd5afbad81c0359c21958236e1b8931c894f6e4e5282ff6
6
+ metadata.gz: c9dfe160397e55ec631e6e2b3bd471308e45d64c62bb54b504d9a1e88a024a664844b99958431d7c13b6ec11b51be0ab6d70cadb72a0364f453ec1ecb1f5243f
7
+ data.tar.gz: 9b6b84bcc8f0f62b0d1c0c503eafc9607a57e350123d3f4999b6498f8d94e3d9cb422c949599b6af2d093effe4dbe51a5ef789ce3201de157c70ffab09f52546
data/config/en/common.yml CHANGED
@@ -18,10 +18,10 @@ en:
18
18
  berks_vendor: 'vendoring cookbooks'
19
19
  chef_cookbooks_stage_berks_vendor: 'vendoring cookbooks for chef cookbooks stage'
20
20
  waiting_resouce_lock: "waiting for locked resource '%{name}'"
21
- gitartifact_container_loading: 'loading dappdeps/gitartifact container'
22
- base_container_loading: 'loading dappdeps/base container'
23
- chefdk_container_loading: 'loading dappdeps/chefdk container'
24
- system_shellout_container_loading: 'loading system shellout container'
21
+ gitartifact_container_creating: 'creating dappdeps/gitartifact container'
22
+ base_container_creating: 'creating dappdeps/base container'
23
+ chefdk_container_creating: 'creating dappdeps/chefdk container'
24
+ system_shellout_container_starting: 'starting system-shellout container'
25
25
  image_pull: "pulling image '%{name}'"
26
26
  image_push: "pushing image '%{name}'"
27
27
  status:
data/lib/dapp.rb CHANGED
@@ -13,6 +13,7 @@ require 'ostruct'
13
13
  require 'time'
14
14
  require 'i18n'
15
15
  require 'paint'
16
+ require 'inifile'
16
17
 
17
18
  require 'net_status'
18
19
 
@@ -157,6 +158,7 @@ require 'dapp/dimg/git_artifact'
157
158
  require 'dapp/dimg/path'
158
159
  require 'dapp/dimg/tags'
159
160
  require 'dapp/dimg/stages'
161
+ require 'dapp/dimg/system_shellout'
160
162
  require 'dapp/dimg'
161
163
  require 'dapp/artifact'
162
164
  require 'dapp/image/argument'
@@ -65,7 +65,7 @@ module Dapp
65
65
  docker_options = ['--rm',
66
66
  "--volume #{dimg.tmp_path('artifact', artifact_name)}:#{artifact_dimg.container_tmp_path(artifact_name)}",
67
67
  "--volumes-from #{dimg.project.base_container}",
68
- "--entrypoint #{dimg.project.bash_path}"]
68
+ "--entrypoint #{dimg.project.bash_bin}"]
69
69
  dimg.project.log_secondary_process(dimg.project.t(code: 'process.artifact_copy',
70
70
  data: { name: artifact_name }),
71
71
  short: true,
@@ -39,18 +39,18 @@ module Dapp
39
39
  copy_files = proc do |from_, cwd_, path_ = ''|
40
40
  cwd_ = File.expand_path(File.join('/', cwd_))
41
41
  "if [[ -d #{File.join(from_, cwd_, path_)} ]]; then " \
42
- "#{dimg.project.find_path} #{File.join(from_, cwd_, path_)} #{excludes} -type f -exec " \
43
- "#{dimg.project.bash_path} -ec '#{dimg.project.install_path} -D #{credentials} {} " \
42
+ "#{dimg.project.find_bin} #{File.join(from_, cwd_, path_)} #{excludes} -type f -exec " \
43
+ "#{dimg.project.bash_bin} -ec '#{dimg.project.install_bin} -D #{credentials} {} " \
44
44
  "#{File.join(to, '$(echo {} | ' \
45
- "#{dimg.project.sed_path} -e \"s/#{File.join(from_, cwd_).gsub('/', '\\/')}//g\")")}' \\; ;" \
45
+ "#{dimg.project.sed_bin} -e \"s/#{File.join(from_, cwd_).gsub('/', '\\/')}//g\")")}' \\; ;" \
46
46
  'fi'
47
47
  end
48
48
 
49
49
  commands = []
50
- commands << [dimg.project.install_path, credentials, '-d', to].join(' ')
50
+ commands << [dimg.project.install_bin, credentials, '-d', to].join(' ')
51
51
  commands.concat(include_paths.empty? ? Array(copy_files.call(from, cwd)) : include_paths.map { |path| copy_files.call(from, cwd, path) })
52
- commands << "#{dimg.project.find_path} #{to} -type d -exec " \
53
- "#{dimg.project.bash_path} -ec '#{dimg.project.install_path} -d #{credentials} {}' \\;"
52
+ commands << "#{dimg.project.find_bin} #{to} -type d -exec " \
53
+ "#{dimg.project.bash_bin} -ec '#{dimg.project.install_bin} -d #{credentials} {}' \\;"
54
54
  commands.join(' && ')
55
55
  end
56
56
  # rubocop:enable Metrics/ParameterLists, Metrics/AbcSize, Metrics/MethodLength
@@ -57,7 +57,7 @@ module Dapp
57
57
  end
58
58
  include_paths.map! { |path| path[1..-1] } # relative path
59
59
 
60
- command = "#{sudo} #{dimg.project.tar_path} -czf #{container_archive_path} #{exclude_paths} #{include_paths.join(' ')} #{credentials}"
60
+ command = "#{sudo} #{dimg.project.tar_bin} -czf #{container_archive_path} #{exclude_paths} #{include_paths.join(' ')} #{credentials}"
61
61
  run_artifact_dimg(artifact_dimg, artifact_name, command)
62
62
 
63
63
  image.add_archive archive_path
@@ -40,8 +40,8 @@ module Dapp
40
40
  def chef_cookbooks(image)
41
41
  image.add_volume "#{cookbooks_vendor_path(chef_cookbooks_stage: true)}:#{dimg.container_dapp_path('chef_cookbooks')}"
42
42
  image.add_command(
43
- "#{dimg.project.mkdir_path} -p /usr/share/dapp/chef_repo",
44
- ["#{dimg.project.cp_path} -a #{dimg.container_dapp_path('chef_cookbooks')} ",
43
+ "#{dimg.project.mkdir_bin} -p /usr/share/dapp/chef_repo",
44
+ ["#{dimg.project.cp_bin} -a #{dimg.container_dapp_path('chef_cookbooks')} ",
45
45
  '/usr/share/dapp/chef_repo/cookbooks'].join
46
46
  )
47
47
  end
@@ -208,7 +208,7 @@ module Dapp
208
208
  def chefdk_container
209
209
  @chefdk_container ||= begin
210
210
  if dimg.project.shellout("docker inspect #{chefdk_container_name}").exitstatus.nonzero?
211
- dimg.project.log_secondary_process(dimg.project.t(code: 'process.chefdk_container_loading'), short: true) do
211
+ dimg.project.log_secondary_process(dimg.project.t(code: 'process.chefdk_container_creating'), short: true) do
212
212
  dimg.project.shellout!(
213
213
  ['docker create',
214
214
  "--name #{chefdk_container_name}",
@@ -253,13 +253,13 @@ module Dapp
253
253
  after_vendor_commands = [].tap do |commands|
254
254
  if dimg.project.dev_mode?
255
255
  commands.push(
256
- ["#{dimg.project.install_path} -o #{Process.uid} -g #{Process.gid} ",
257
- "--mode $(#{dimg.project.stat_path} -c %a Berksfile.lock) ",
256
+ ["#{dimg.project.install_bin} -o #{Process.uid} -g #{Process.gid} ",
257
+ "--mode $(#{dimg.project.stat_bin} -c %a Berksfile.lock) ",
258
258
  "Berksfile.lock #{berksfile_lock_path}"].join
259
259
  )
260
260
  elsif !chef_cookbooks_stage
261
261
  commands.push(
262
- "export LOCKDIFF=$(#{dimg.project.diff_path} -u1 #{berksfile_lock_path} Berksfile.lock)",
262
+ "export LOCKDIFF=$(#{dimg.project.diff_bin} -u1 #{berksfile_lock_path} Berksfile.lock)",
263
263
  ['if [ "$LOCKDIFF" != "" ] ; then ',
264
264
  "echo -e \"",
265
265
  "Bad Berksfile.lock, run '#{_update_berksfile_lock_cmd}' ",
@@ -271,14 +271,14 @@ module Dapp
271
271
  end
272
272
 
273
273
  vendor_commands = [
274
- "#{dimg.project.mkdir_path} -p ~/.ssh",
274
+ "#{dimg.project.mkdir_bin} -p ~/.ssh",
275
275
  "echo \"Host *\" >> ~/.ssh/config",
276
276
  "echo \" StrictHostKeyChecking no\" >> ~/.ssh/config",
277
277
  *berksfile
278
278
  .local_cookbooks
279
279
  .values
280
280
  .map {|cookbook|
281
- ["#{dimg.project.rsync_path} --archive",
281
+ ["#{dimg.project.rsync_bin} --archive",
282
282
  #*cookbook[:chefignore].map {|path| "--exclude #{path}"}, # FIXME
283
283
  "--relative #{cookbook[:path]} /tmp/local_cookbooks",
284
284
  ].join(' ')
@@ -287,13 +287,13 @@ module Dapp
287
287
  *before_vendor_commands,
288
288
  '/.dapp/deps/chefdk/bin/berks vendor /tmp/cookbooks',
289
289
  *after_vendor_commands,
290
- ["#{dimg.project.find_path} /tmp/cookbooks -type d -exec #{dimg.project.bash_path} -ec '",
291
- "#{dimg.project.install_path} -o #{Process.uid} -g #{Process.gid} --mode $(#{dimg.project.stat_path} -c %a {}) -d ",
292
- "#{dest_path}/$(echo {} | #{dimg.project.sed_path} -e \"s/^\\/tmp\\/cookbooks//\")' \\;"].join,
293
- ["#{dimg.project.find_path} /tmp/cookbooks -type f -exec #{dimg.project.bash_path} -ec '",
294
- "#{dimg.project.install_path} -o #{Process.uid} -g #{Process.gid} --mode $(#{dimg.project.stat_path} -c %a {}) {} ",
295
- "#{dest_path}/$(echo {} | #{dimg.project.sed_path} -e \"s/\\/tmp\\/cookbooks//\")' \\;"].join,
296
- "#{dimg.project.install_path} -o #{Process.uid} -g #{Process.gid} --mode 0644 <(#{dimg.project.date_path} +%s.%N) #{dest_path.join('.created_at')}"
290
+ ["#{dimg.project.find_bin} /tmp/cookbooks -type d -exec #{dimg.project.bash_bin} -ec '",
291
+ "#{dimg.project.install_bin} -o #{Process.uid} -g #{Process.gid} --mode $(#{dimg.project.stat_bin} -c %a {}) -d ",
292
+ "#{dest_path}/$(echo {} | #{dimg.project.sed_bin} -e \"s/^\\/tmp\\/cookbooks//\")' \\;"].join,
293
+ ["#{dimg.project.find_bin} /tmp/cookbooks -type f -exec #{dimg.project.bash_bin} -ec '",
294
+ "#{dimg.project.install_bin} -o #{Process.uid} -g #{Process.gid} --mode $(#{dimg.project.stat_bin} -c %a {}) {} ",
295
+ "#{dest_path}/$(echo {} | #{dimg.project.sed_bin} -e \"s/\\/tmp\\/cookbooks//\")' \\;"].join,
296
+ "#{dimg.project.install_bin} -o #{Process.uid} -g #{Process.gid} --mode 0644 <(#{dimg.project.date_bin} +%s.%N) #{dest_path.join('.created_at')}"
297
297
  ]
298
298
 
299
299
  dimg.project.shellout!(
@@ -307,7 +307,7 @@ module Dapp
307
307
  "--volume #{dest_path.tap(&:mkpath)}:#{dest_path}",
308
308
  ('--env SSH_AUTH_SOCK=/tmp/dapp-ssh-agent' if dimg.project.ssh_auth_sock),
309
309
  ('--env DAPP_CHEF_COOKBOOKS_VENDORING=1' if chef_cookbooks_stage),
310
- "dappdeps/berksdeps:0.1.0 #{dimg.project.bash_path} -ec '#{dimg.project.shellout_pack(vendor_commands.join(' && '))}'"].compact.join(' '),
310
+ "dappdeps/berksdeps:0.1.0 #{dimg.project.bash_bin} -ec '#{dimg.project.shellout_pack(vendor_commands.join(' && '))}'"].compact.join(' '),
311
311
  log_verbose: dimg.project.log_verbose?
312
312
  )
313
313
  end
data/lib/dapp/dimg.rb CHANGED
@@ -5,6 +5,7 @@ module Dapp
5
5
  include Path
6
6
  include Tags
7
7
  include Stages
8
+ include SystemShellout
8
9
 
9
10
  include Helper::Sha256
10
11
 
@@ -148,7 +149,7 @@ module Dapp
148
149
  end
149
150
 
150
151
  def introspect_image!(image:, options:)
151
- cmd = "docker run -ti --rm --entrypoint #{project.bash_path} #{options} #{image}"
152
+ cmd = "docker run -ti --rm --entrypoint #{project.bash_bin} #{options} #{image}"
152
153
  system(cmd)
153
154
  end
154
155
 
@@ -0,0 +1,17 @@
1
+ module Dapp
2
+ # Dimg
3
+ class Dimg
4
+ # SystemShellout
5
+ module SystemShellout
6
+ def system_shellout(command, **kwargs)
7
+ project.system_shellout_extra(volume: tmp_path) do
8
+ project.system_shellout(command, **kwargs)
9
+ end
10
+ end
11
+
12
+ def system_shellout!(command, **kwargs)
13
+ system_shellout(command, raise_error: true, **kwargs)
14
+ end
15
+ end # SystemShellout
16
+ end # Dimg
17
+ end # Dapp
@@ -26,9 +26,9 @@ module Dapp
26
26
  def apply_archive_command(stage)
27
27
  credentials = [:owner, :group].map { |attr| "--#{attr}=#{send(attr)}" unless send(attr).nil? }.compact
28
28
 
29
- ["#{repo.dimg.project.install_path} #{credentials.join(' ')} -d #{to}",
30
- ["#{repo.dimg.project.git_path} --git-dir=#{repo.container_path} archive #{stage.layer_commit(self)}:#{cwd} #{include_paths.join(' ')}",
31
- "#{sudo}#{repo.dimg.project.tar_path} -x -C #{to} #{archive_command_excludes.join(' ')}"].join(' | ')]
29
+ ["#{repo.dimg.project.install_bin} #{credentials.join(' ')} -d #{to}",
30
+ ["#{repo.dimg.project.git_bin} --git-dir=#{repo.container_path} archive #{stage.layer_commit(self)}:#{cwd} #{include_paths.join(' ')}",
31
+ "#{sudo}#{repo.dimg.project.tar_bin} -x -C #{to} #{archive_command_excludes.join(' ')}"].join(' | ')]
32
32
  end
33
33
 
34
34
  def apply_patch_command(stage)
@@ -36,8 +36,8 @@ module Dapp
36
36
  prev_commit = stage.prev_g_a_stage.layer_commit(self)
37
37
 
38
38
  if prev_commit != current_commit || any_changes?(prev_commit, current_commit)
39
- [["#{repo.dimg.project.git_path} --git-dir=#{repo.container_path} #{diff_command(prev_commit, current_commit)}",
40
- "#{sudo}#{repo.dimg.project.git_path} apply --whitespace=nowarn --directory=#{to} #{patch_command_excludes.join(' ')} --unsafe-paths"].join(' | ')]
39
+ [["#{repo.dimg.project.git_bin} --git-dir=#{repo.container_path} #{diff_command(prev_commit, current_commit)}",
40
+ "#{sudo}#{repo.dimg.project.git_bin} apply --whitespace=nowarn --directory=#{to} #{patch_command_excludes.join(' ')} --unsafe-paths"].join(' | ')]
41
41
  else
42
42
  []
43
43
  end
@@ -44,7 +44,7 @@ module Dapp
44
44
  protected
45
45
 
46
46
  def git(command, **kwargs)
47
- dimg.project.system_shellout! "#{dimg.project.git_path} #{command}", **kwargs
47
+ dimg.system_shellout! "#{dimg.project.git_bin} #{command}", **kwargs
48
48
  end
49
49
  end
50
50
  end
@@ -15,6 +15,16 @@ module Dapp
15
15
  path.delete if path.exist?
16
16
  end
17
17
 
18
+ def search_file_upward(filename)
19
+ cdir = Pathname(work_dir)
20
+ loop do
21
+ if (path = cdir.join(filename)).exist?
22
+ return path.to_s
23
+ end
24
+ break if (cdir = cdir.parent).root?
25
+ end
26
+ end
27
+
18
28
  def self.class_to_lowercase(class_name = self.class)
19
29
  class_name.to_s.split('::').last.split(/(?=[[:upper:]]|[0-9])/).join('_').downcase.to_s
20
30
  end
@@ -110,7 +110,7 @@ module Dapp
110
110
  end
111
111
 
112
112
  def service_options
113
- { entrypoint: project.bash_path, name: container_name }
113
+ { entrypoint: project.bash_bin, name: container_name }
114
114
  end
115
115
 
116
116
  def prepared_change
@@ -126,7 +126,7 @@ module Dapp
126
126
  end
127
127
 
128
128
  def prepared_commands
129
- return [project.true_path] if bash_commands.empty?
129
+ return [project.true_bin] if bash_commands.empty?
130
130
  bash_commands
131
131
  end
132
132
  end
@@ -14,10 +14,11 @@ module Dapp
14
14
 
15
15
  def build!(**_kwargs)
16
16
  build_from_command = if from_archives.empty?
17
- "#{project.tar_path} c --files-from /dev/null"
17
+ "#{project.tar_bin} c --files-from /dev/null"
18
18
  else
19
- "#{project.cat_path} #{from_archives.join(' ')}"
19
+ "#{project.cat_bin} #{from_archives.join(' ')}"
20
20
  end
21
+ #FIXME: do not use docker import from system-shellout
21
22
  @built_id = project.system_shellout!("#{build_from_command} | docker import #{prepared_change} - ").stdout.strip
22
23
  end
23
24
 
data/lib/dapp/project.rb CHANGED
@@ -51,18 +51,35 @@ module Dapp
51
51
 
52
52
  def name
53
53
  @name ||= begin
54
- if File.exist? File.join(path, '.git')
55
- begin
56
- system_shellout("#{git_path} -C #{path} config --get remote.origin.url").stdout.strip.split('/').last[/.*(?=.git)/]
57
- rescue
58
- File.basename(path)
59
- end
54
+ if git_url
55
+ repo_name = git_url.split('/').last
56
+ repo_name = repo_name[/.*(?=\.git)/] if repo_name.end_with? '.git'
57
+ repo_name
58
+ elsif git_path
59
+ File.basename(File.dirname(git_path))
60
60
  else
61
61
  File.basename(path)
62
62
  end
63
63
  end
64
64
  end
65
65
 
66
+ def git_url
67
+ return unless git_config
68
+ (git_config['remote "origin"'] || {})['url']
69
+ end
70
+
71
+ def git_config
72
+ @git_config ||= begin
73
+ IniFile.load(File.join(git_path, 'config')) if git_path
74
+ end
75
+ end
76
+
77
+ def git_path
78
+ defined?(@git_path) ? @git_path : begin
79
+ @git_path = search_file_upward('.git')
80
+ end
81
+ end
82
+
66
83
  def path
67
84
  @path ||= expand_path(dappfile_path)
68
85
  end
@@ -12,20 +12,10 @@ module Dapp
12
12
  end
13
13
 
14
14
  def dappfile_path
15
- raise Error::Project, code: :dappfile_not_found unless (dappfile_path = search_up('Dappfile'))
15
+ raise Error::Project, code: :dappfile_not_found unless (dappfile_path = search_file_upward('Dappfile'))
16
16
  dappfile_path
17
17
  end
18
18
 
19
- def search_up(file)
20
- cdir = Pathname(work_dir)
21
- loop do
22
- if (path = cdir.join(file)).exist?
23
- return path.to_s
24
- end
25
- break if (cdir = cdir.parent).root?
26
- end
27
- end
28
-
29
19
  def work_dir
30
20
  File.expand_path(cli_options[:dir] || Dir.pwd)
31
21
  end
@@ -14,7 +14,7 @@ module Dapp
14
14
  def base_container
15
15
  @base_container ||= begin
16
16
  if shellout("docker inspect #{base_container_name}").exitstatus.nonzero?
17
- log_secondary_process(t(code: 'process.base_container_loading'), short: true) do
17
+ log_secondary_process(t(code: 'process.base_container_creating'), short: true) do
18
18
  shellout!(
19
19
  ['docker create',
20
20
  "--name #{base_container_name}",
@@ -26,17 +26,17 @@ module Dapp
26
26
  end
27
27
  end
28
28
 
29
- %w(rsync diff date echo cat
29
+ %w(rsync diff date cat
30
30
  stat sleep mkdir find
31
31
  install sed cp true
32
32
  bash tar sudo).each do |cmd|
33
- define_method("#{cmd}_path") { "/.dapp/deps/base/#{BASE_VERSION}/bin/#{cmd}" }
33
+ define_method("#{cmd}_bin") { "/.dapp/deps/base/#{BASE_VERSION}/bin/#{cmd}" }
34
34
  end
35
35
 
36
36
  def sudo_command(owner: nil, group: nil)
37
37
  sudo = ''
38
38
  if owner || group
39
- sudo = "#{sudo_path} -E "
39
+ sudo = "#{sudo_bin} -E "
40
40
  sudo += "-u #{sudo_format_user(owner)} " if owner
41
41
  sudo += "-g #{sudo_format_user(group)} " if group
42
42
  end
@@ -14,7 +14,7 @@ module Dapp
14
14
  def gitartifact_container
15
15
  @gitartifact_container ||= begin
16
16
  if shellout("docker inspect #{gitartifact_container_name}").exitstatus.nonzero?
17
- log_secondary_process(t(code: 'process.gitartifact_container_loading'), short: true) do
17
+ log_secondary_process(t(code: 'process.gitartifact_container_creating'), short: true) do
18
18
  shellout!(
19
19
  ['docker create',
20
20
  "--name #{gitartifact_container_name}",
@@ -27,7 +27,7 @@ module Dapp
27
27
  end
28
28
  end
29
29
 
30
- def git_path
30
+ def git_bin
31
31
  "/.dapp/deps/gitartifact/#{GITARTIFACT_VERSION}/bin/git"
32
32
  end
33
33
  end # Gitartifact
@@ -2,63 +2,15 @@ module Dapp
2
2
  # Project
3
3
  class Project
4
4
  module SystemShellout
5
- SYSTEM_SHELLOUT_IMAGE = 'ubuntu:14.04'.freeze
6
- SYSTEM_SHELLOUT_VERSION = 3
7
-
8
- def system_shellout_container_name
9
- "dapp_system_shellout_#{hashsum [SYSTEM_SHELLOUT_VERSION,
10
- SYSTEM_SHELLOUT_IMAGE,
11
- Deps::Base::BASE_VERSION,
12
- Deps::Gitartifact::GITARTIFACT_VERSION]}"
13
- end
14
-
15
- def system_shellout_container
16
- do_livecheck = false
17
-
18
- @system_shellout_container ||= begin
19
- lock(system_shellout_container_name) do
20
- cmd = shellout("docker inspect -f {{.State.Running}} #{system_shellout_container_name}")
21
- if cmd.exitstatus.nonzero?
22
- start_container = true
23
- elsif cmd.stdout.strip == 'false'
24
- shellout!("docker rm -f #{system_shellout_container_name}")
25
- start_container = true
26
- else
27
- start_container = false
28
- end
29
-
30
- if start_container
31
- volumes_from = [base_container, gitartifact_container]
32
- log_secondary_process(t(code: 'process.system_shellout_container_loading'), short: true) do
33
- shellout! ['docker run --detach --privileged',
34
- "--name #{system_shellout_container_name}",
35
- *volumes_from.map { |container| "--volumes-from #{container}" },
36
- '--volume /:/.system_shellout_root',
37
- "#{SYSTEM_SHELLOUT_IMAGE} #{bash_path} -ec 'while true ; do sleep 1 ; done'"].join(' ')
38
-
39
- shellout! ["docker exec #{system_shellout_container_name}",
40
- "bash -ec '#{[
41
- 'mkdir -p /.system_shellout_root/.dapp',
42
- 'mount --rbind /.dapp /.system_shellout_root/.dapp'
43
- ].join(' && ')}'"].join(' ')
44
- end
45
- end
46
- end
47
-
48
- do_livecheck = true
49
- system_shellout_container_name
50
- end
51
-
52
- system_shellout_livecheck! if do_livecheck
53
-
54
- @system_shellout_container
55
- end
5
+ SYSTEM_SHELLOUT_IMAGE = 'ubuntu:16.04'.freeze
56
6
 
57
7
  def system_shellout(command, raise_error: false, **kwargs)
58
- if raise_error
59
- shellout! _to_system_shellout_command(command), **kwargs
60
- else
61
- shellout _to_system_shellout_command(command), **kwargs
8
+ system_shellout_extra(volume: (git_path ? File.dirname(git_path) : path)) do
9
+ if raise_error
10
+ shellout! _to_system_shellout_command(command), **kwargs
11
+ else
12
+ shellout _to_system_shellout_command(command), **kwargs
13
+ end
62
14
  end
63
15
  end
64
16
 
@@ -66,26 +18,38 @@ module Dapp
66
18
  system_shellout(command, raise_error: true, **kwargs)
67
19
  end
68
20
 
69
- private
21
+ def system_shellout_extra(volume: [], workdir: nil, &blk)
22
+ old = system_shellout_opts.dup
23
+
24
+ system_shellout_opts[:volume] += Array(volume)
25
+ system_shellout_opts[:workdir] = workdir if workdir
26
+
27
+ yield if block_given?
28
+ ensure
29
+ @system_shellout_opts = old
30
+ end
31
+
32
+ protected
70
33
 
71
- def system_shellout_livecheck!
72
- # This is stupid container "live check" for now
73
- system_shellout! 'true'
74
- rescue Error::Shellout
75
- $stderr.puts "\033[1m\033[31mSystem shellout container failure, " \
76
- 'try to remove if error persists: ' \
77
- "docker rm -f #{system_shellout_container_name}\033[0m"
78
- raise
34
+ def system_shellout_opts
35
+ @system_shellout_opts ||= {volume: []}
79
36
  end
80
37
 
81
38
  def _to_system_shellout_command(command)
82
- cmd = shellout_pack ["cd #{Dir.pwd}", command].join(' && ')
83
- "docker exec #{system_shellout_container} chroot /.system_shellout_root #{bash_path} -ec '#{[
84
- *SystemShellout.default_env_keys.map do |env_key|
85
- env_key = env_key.to_s.upcase
86
- "export #{env_key}=#{ENV[env_key]}"
87
- end, cmd
88
- ].join(' && ')}'"
39
+ volumes_from = [base_container, gitartifact_container]
40
+
41
+ ['docker run',
42
+ '--rm',
43
+ "--workdir #{system_shellout_opts[:workdir] || Dir.pwd}",
44
+ *volumes_from.map { |container| "--volumes-from #{container}" },
45
+ *Array(system_shellout_opts[:volume]).map { |volume| "--volume #{volume}:#{volume}" },
46
+ *SystemShellout.default_env_keys.map { |env_key|
47
+ env_key = env_key.to_s.upcase
48
+ "--env #{env_key}=#{ENV[env_key]}"
49
+ },
50
+ SYSTEM_SHELLOUT_IMAGE,
51
+ "#{bash_bin} -ec '#{shellout_pack(command)}'"
52
+ ].join(' ')
89
53
  end
90
54
 
91
55
  class << self
data/lib/dapp/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # Version
2
2
  module Dapp
3
- VERSION = '0.7.11'.freeze
3
+ VERSION = '0.7.12'.freeze
4
4
  BUILD_CACHE_VERSION = 6
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.11
4
+ version: 0.7.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Stolyarov
@@ -124,6 +124,20 @@ dependencies:
124
124
  - - ">="
125
125
  - !ruby/object:Gem::Version
126
126
  version: 1.0.1
127
+ - !ruby/object:Gem::Dependency
128
+ name: inifile
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: 3.0.0
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: 3.0.0
127
141
  - !ruby/object:Gem::Dependency
128
142
  name: bundler
129
143
  requirement: !ruby/object:Gem::Requirement
@@ -431,6 +445,7 @@ files:
431
445
  - lib/dapp/dimg/git_artifact.rb
432
446
  - lib/dapp/dimg/path.rb
433
447
  - lib/dapp/dimg/stages.rb
448
+ - lib/dapp/dimg/system_shellout.rb
434
449
  - lib/dapp/dimg/tags.rb
435
450
  - lib/dapp/docker_registry.rb
436
451
  - lib/dapp/docker_registry/base.rb