dapp 0.7.11 → 0.7.12

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 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