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
@@ -7,20 +7,27 @@ module Dapp
7
7
  build_path.join('locks')
8
8
  end
9
9
 
10
- def lock(name, *args, default_timeout: 300, **kwargs, &blk)
11
- timeout = cli_options[:lock_timeout] || default_timeout
10
+ def _lock(name)
11
+ @_locks ||= {}
12
+ @_locks[name] ||= ::Dapp::Lock::File.new(lock_path, name)
13
+ end
12
14
 
13
- ::Dapp::Lock::File.new(
14
- lock_path, name,
15
- timeout: timeout,
16
- on_wait: lambda do |&blk|
17
- log_secondary_process(
18
- t(code: 'process.waiting_resouce_lock', data: { name: name }),
19
- short: true,
20
- &blk
21
- )
22
- end
23
- ).synchronize(*args, **kwargs, &blk)
15
+ def lock(name, *_args, default_timeout: 300, **kwargs, &blk)
16
+ if dry_run?
17
+ yield if block_given?
18
+ else
19
+ timeout = cli_options[:lock_timeout] || default_timeout
20
+ _lock(name).synchronize(
21
+ timeout: timeout,
22
+ on_wait: proc do |&do_wait|
23
+ log_secondary_process(
24
+ t(code: 'process.waiting_resouce_lock', data: { name: name }),
25
+ short: true,
26
+ &do_wait
27
+ )
28
+ end, **kwargs, &blk
29
+ )
30
+ end
24
31
  end
25
32
  end # Lock
26
33
  end # Project
@@ -17,6 +17,14 @@ module Dapp
17
17
  cli_options[:log_verbose]
18
18
  end
19
19
 
20
+ def introspect_error?
21
+ cli_options[:introspect_error]
22
+ end
23
+
24
+ def introspect_before_error?
25
+ cli_options[:introspect_before_error]
26
+ end
27
+
20
28
  def dry_run?
21
29
  cli_options[:dry_run]
22
30
  end
@@ -26,6 +34,13 @@ module Dapp
26
34
  log(*args, **kwargs)
27
35
  end
28
36
 
37
+ def log_step_with_indent(step)
38
+ log_step(step)
39
+ with_log_indent do
40
+ yield
41
+ end
42
+ end
43
+
29
44
  def log_step(*args, **kwargs)
30
45
  kwargs[:style] = :step
31
46
  log(*args, **kwargs)
@@ -51,7 +66,7 @@ module Dapp
51
66
  end
52
67
 
53
68
  def log_time
54
- self.class.log_time
69
+ "#{DateTime.now.strftime('%Y-%m-%dT%T%z')} "
55
70
  end
56
71
 
57
72
  def log_format_string(str, time: true, indent: true, style: nil)
@@ -90,8 +105,10 @@ module Dapp
90
105
  end
91
106
  end
92
107
 
93
- def self.log_time
94
- "#{DateTime.now.strftime('%Y-%m-%dT%T%z')} "
108
+ class << self
109
+ def included(base)
110
+ base.extend(self)
111
+ end
95
112
  end
96
113
 
97
114
  protected
@@ -0,0 +1,25 @@
1
+ module Dapp
2
+ class Project
3
+ module Logging
4
+ # I18n
5
+ module I18n
6
+ def self.initialize
7
+ ::I18n.load_path << Dir[File.join(Dapp.root, 'config', '**', '*')].select { |path| File.file?(path) }
8
+ ::I18n.reload!
9
+ ::I18n.locale = :en
10
+ end
11
+
12
+ def t(context: nil, **desc)
13
+ code = desc[:code]
14
+ data = desc[:data] || {}
15
+ paths = []
16
+ paths << [:common, context, code].join('.') if context
17
+ paths << [:common, code].join('.')
18
+ ::I18n.t(*paths, **data, raise: true)
19
+ rescue ::I18n::MissingTranslationData => _e
20
+ raise ::NetStatus::Exception, code: :missing_translation, data: { code: code }
21
+ end
22
+ end
23
+ end # Helper
24
+ end
25
+ end # Dapp
@@ -0,0 +1,47 @@
1
+ module Dapp
2
+ # Project
3
+ class Project
4
+ module Logging
5
+ # Paint
6
+ module Paint
7
+ FORMAT = {
8
+ step: [:yellow, :bold],
9
+ info: [:blue],
10
+ success: [:green, :bold],
11
+ warning: [:red, :bold],
12
+ secondary: [:white, :bold],
13
+ default: [:white]
14
+ }.freeze
15
+
16
+ def self.initialize(mode)
17
+ ::Paint.mode = case mode
18
+ when 'auto' then STDOUT.tty? ? 8 : 0
19
+ when 'on' then 8
20
+ when 'off' then 0
21
+ else raise
22
+ end
23
+ end
24
+
25
+ def paint_style(name)
26
+ FORMAT[name].tap do |format|
27
+ raise if format.nil?
28
+ end
29
+ end
30
+
31
+ def paint_string(object, style_name)
32
+ ::Paint[unpaint(object.to_s), *paint_style(style_name)]
33
+ end
34
+
35
+ def unpaint(str)
36
+ ::Paint.unpaint(str)
37
+ end
38
+
39
+ class << self
40
+ def included(base)
41
+ base.extend(self)
42
+ end
43
+ end
44
+ end # Paint
45
+ end
46
+ end # Project
47
+ end # Dapp
@@ -26,19 +26,26 @@ module Dapp
26
26
  log "#{formatted_message}#{formatted_status}"
27
27
  end
28
28
 
29
- def log_process(message, process: nil, short: false, style: {}, &blk)
29
+ # rubocop:disable Metrics/ParameterLists
30
+ def log_process(message, process: nil, short: false, quiet: false, style: {}, status: {}, &blk)
31
+ return yield if quiet
32
+
30
33
  style[:message] ||= DEFAULT_STYLE[:message]
31
34
  style[:process] ||= DEFAULT_STYLE[:process]
32
35
  style[:failed] ||= DEFAULT_STYLE[:failed]
33
36
  style[:success] ||= DEFAULT_STYLE[:success]
34
37
 
38
+ status[:success] ||= t(code: 'status.success.default')
39
+ status[:failed] ||= t(code: 'status.failed.default')
40
+
35
41
  if log_verbose? && !short
36
42
  process ||= t(code: 'status.process.default')
37
- log_process_verbose(message, process: process, style: style, &blk)
43
+ log_process_verbose(message, process: process, style: style, status: status, &blk)
38
44
  else
39
- log_process_short(message, style: style, &blk)
45
+ log_process_short(message, style: style, status: status, &blk)
40
46
  end
41
47
  end
48
+ # rubocop:enable Metrics/ParameterLists
42
49
 
43
50
  def log_secondary_process(message, **kwargs, &blk)
44
51
  log_process(message, **kwargs.merge(style: { message: :secondary, success: :secondary }), &blk)
@@ -46,19 +53,19 @@ module Dapp
46
53
 
47
54
  protected
48
55
 
49
- def log_process_verbose(message, process:, style: {}, &blk)
56
+ def log_process_verbose(message, process:, style: {}, status: {}, &blk)
50
57
  process = paint_string(rjust(process, message), style[:process])
51
58
  info = paint_string(message, style[:message]) + process
52
59
  success_message = paint_string(slice(message), style[:message]) +
53
- paint_string(rjust(t(code: 'status.success.default'), message), style[:success])
54
- failed_message = paint_string(slice(message) + rjust(t(code: 'status.failed.default'), message), style[:failed])
60
+ paint_string(rjust(status[:success], message), style[:success])
61
+ failed_message = paint_string(slice(message) + rjust(status[:failed], message), style[:failed])
55
62
  log_process_default(info, success_message, failed_message, &blk)
56
63
  end
57
64
 
58
- def log_process_short(message, style: {}, &blk)
65
+ def log_process_short(message, style: {}, status: {}, &blk)
59
66
  info = "#{paint_string(slice(message), style[:message])} ... "
60
- success_message = paint_string(rjust(t(code: 'status.success.default'), info), style[:success])
61
- failed_message = paint_string(rjust(t(code: 'status.failed.default'), info), style[:failed])
67
+ success_message = paint_string(rjust(status[:success], info), style[:success])
68
+ failed_message = paint_string(rjust(status[:failed], info), style[:failed])
62
69
  log_process_default(info, success_message, failed_message, inline: true, &blk)
63
70
  end
64
71
 
@@ -90,7 +97,7 @@ module Dapp
90
97
  def free_space(str)
91
98
  base_time = log_time? ? log_time.length : 0
92
99
  indent = log_indent.length
93
- str = ::Paint.unpaint(str.to_s).length
100
+ str = unpaint(str.to_s).length
94
101
  time = 15
95
102
  terminal_width - base_time - str - indent - time
96
103
  end
@@ -0,0 +1,74 @@
1
+ module Dapp
2
+ class Project
3
+ # Shellout
4
+ module Shellout
5
+ # Base
6
+ module Base
7
+ include Streaming
8
+
9
+ def shellout(*args, **kwargs)
10
+ env = nil
11
+
12
+ Base.default_env_keys.each do |env_key|
13
+ env_key = env_key.to_s.upcase
14
+ env ||= {}
15
+ env[env_key] = ENV[env_key]
16
+ end
17
+
18
+ param_env = (kwargs.delete(:env) || kwargs.delete(:environment))
19
+ param_env = param_env.map { |key, value| [key.to_s.upcase, value.to_s] }.to_h if param_env
20
+
21
+ env = (env || {}).merge(param_env) if param_env
22
+ kwargs[:env] = env if env
23
+
24
+ do_shellout = -> { ::Mixlib::ShellOut.new(*args, timeout: 3600, **kwargs).run_command }
25
+ if defined? ::Bundler
26
+ ::Bundler.with_clean_env { do_shellout.call }
27
+ else
28
+ do_shellout.call
29
+ end
30
+ end
31
+
32
+ def shellout!(*args, **kwargs)
33
+ shellout_with_logging(**kwargs) do |options|
34
+ shellout(*args, **options).tap(&:error!)
35
+ end
36
+ end
37
+
38
+ def shellout_pack(command)
39
+ "eval $(#{echo_path} #{Base64.strict_encode64(command)} | base64 --decode)"
40
+ end
41
+
42
+ class << self
43
+ def included(base)
44
+ base.extend(self)
45
+ end
46
+
47
+ def default_env_keys
48
+ @default_env_keys ||= []
49
+ end
50
+ end # << self
51
+
52
+ protected
53
+
54
+ def shellout_with_logging(log_verbose: false, **kwargs)
55
+ return yield(**kwargs) unless instance_of? Project
56
+
57
+ begin
58
+ stream = Stream.new
59
+ if log_verbose && log_verbose?
60
+ kwargs[:live_stream] = Proxy::Base.new(stream, STDOUT, with_time: log_time?)
61
+ else
62
+ kwargs[:live_stdout] = Proxy::Base.new(stream, with_time: log_time?)
63
+ end
64
+ kwargs[:live_stderr] = Proxy::Error.new(stream, with_time: log_time?)
65
+
66
+ yield(**kwargs)
67
+ rescue ::Mixlib::ShellOut::ShellCommandFailed => e
68
+ raise Error::Shellout, code: class_to_lowercase(e.class), data: { stream: stream.show }
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end # Helper
74
+ end # Dapp
@@ -0,0 +1,49 @@
1
+ module Dapp
2
+ class Project
3
+ module Shellout
4
+ # Streaming
5
+ module Streaming
6
+ # Stream
7
+ class Stream
8
+ def buffer
9
+ @buffer ||= []
10
+ end
11
+
12
+ def <<(string)
13
+ buffer << string
14
+ end
15
+
16
+ def show
17
+ buffer.join.strip
18
+ end
19
+ end
20
+
21
+ # Proxy
22
+ module Proxy
23
+ # Base
24
+ class Base
25
+ def initialize(*streams, with_time: false)
26
+ @streams = streams
27
+ @with_time = with_time
28
+ end
29
+
30
+ def <<(str)
31
+ @streams.each { |s| s << format_string(str) }
32
+ end
33
+
34
+ def format_string(str)
35
+ str.lines.map { |l| "#{Project.log_time if @with_time}#{l.strip}\n" }.join
36
+ end
37
+ end
38
+
39
+ # Error
40
+ class Error < Base
41
+ def format_string(str)
42
+ "#{Project.paint_string(super.strip, :warning)}\n"
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end # Helper
49
+ end # Dapp
@@ -0,0 +1,72 @@
1
+ module Dapp
2
+ # Project
3
+ class Project
4
+ module Shellout
5
+ # System
6
+ module System
7
+ SYSTEM_SHELLOUT_IMAGE = 'ubuntu:14.04'.freeze
8
+ SYSTEM_SHELLOUT_VERSION = 2
9
+
10
+ def system_shellout_container_name
11
+ "dapp_system_shellout_#{hashsum [SYSTEM_SHELLOUT_VERSION,
12
+ SYSTEM_SHELLOUT_IMAGE,
13
+ Deps::Base::BASE_VERSION,
14
+ Deps::Gitartifact::GITARTIFACT_VERSION]}"
15
+ end
16
+
17
+ def system_shellout_container
18
+ @system_shellout_container ||= begin
19
+ lock(system_shellout_container_name) do
20
+ if shellout("docker inspect #{system_shellout_container_name}").exitstatus.nonzero?
21
+ volumes_from = [base_container, gitartifact_container]
22
+ log_secondary_process(t(code: 'process.system_shellout_container_loading'), short: true) do
23
+ shellout! ['docker run --detach --privileged', '--restart always',
24
+ "--name #{system_shellout_container_name}",
25
+ *volumes_from.map { |container| "--volumes-from #{container}" },
26
+ '--volume /:/.system_shellout_root',
27
+ "#{SYSTEM_SHELLOUT_IMAGE} #{bash_path} -ec 'while true ; do sleep 1 ; done'"].join(' ')
28
+
29
+ shellout! ["docker exec #{system_shellout_container_name}",
30
+ "bash -ec '#{[
31
+ 'mkdir -p /.system_shellout_root/.dapp',
32
+ 'mount --rbind /.dapp /.system_shellout_root/.dapp'
33
+ ].join(' && ')}'"].join(' ')
34
+ end
35
+ end
36
+ end
37
+
38
+ system_shellout_container_name
39
+ end
40
+ end
41
+
42
+ def system_shellout(command, **kwargs)
43
+ shellout _to_system_shellout_command(command), **kwargs
44
+ end
45
+
46
+ def system_shellout!(command, **kwargs)
47
+ shellout! _to_system_shellout_command(command), **kwargs
48
+ end
49
+
50
+ private
51
+
52
+ def _to_system_shellout_command(command)
53
+ cmd = shellout_pack ["cd #{Dir.pwd}", command].join(' && ')
54
+ "docker exec #{system_shellout_container} chroot /.system_shellout_root bash -ec '#{[
55
+ *System.default_env_keys.map do |env_key|
56
+ env_key = env_key.to_s.upcase
57
+ "export #{env_key}=#{ENV[env_key]}"
58
+ end, cmd
59
+ ].join(' && ')}'"
60
+ end
61
+
62
+ public
63
+
64
+ class << self
65
+ def default_env_keys
66
+ @default_env_keys ||= []
67
+ end
68
+ end # << self
69
+ end # System
70
+ end
71
+ end # Project
72
+ end # Dapp
@@ -5,12 +5,13 @@ module Dapp
5
5
  module SshAgent
6
6
  class << self
7
7
  def included(_base)
8
- ::Dapp::Helper::Shellout.default_env_keys << 'SSH_AUTH_SOCK'
8
+ ::Dapp::Project::Shellout::Base.default_env_keys << 'SSH_AUTH_SOCK'
9
+ ::Dapp::Project::Shellout::System.default_env_keys << 'SSH_AUTH_SOCK'
9
10
  end
10
11
  end # << self
11
12
 
12
13
  def run_ssh_agent
13
- raise "Cannot fork dapp process: there are active file locks" unless ::Dapp::Lock::File.counter == 0
14
+ raise 'Cannot fork dapp process: there are active file locks' unless ::Dapp::Lock::File.counter.zero?
14
15
 
15
16
  sock_name = "dapp-ssh-#{SecureRandom.uuid}"
16
17
 
@@ -22,10 +23,10 @@ module Dapp
22
23
 
23
24
  @ssh_agent_pid = nil
24
25
 
25
- Signal.trap('INT') { }
26
+ Signal.trap('INT') {}
26
27
  Signal.trap('TERM') { Process.kill('TERM', @ssh_agent_pid) if @ssh_agent_pid }
27
28
 
28
- @ssh_agent_pid = Process.fork do
29
+ @ssh_agent_pid = Process.fork do
29
30
  STDOUT.reopen '/dev/null', 'a'
30
31
  STDERR.reopen '/dev/null', 'a'
31
32
  exec 'ssh-agent', '-d', '-a', sock_path
@@ -36,9 +37,7 @@ module Dapp
36
37
 
37
38
  begin
38
39
  ::Timeout.timeout(10) do
39
- until File.exist? sock_path
40
- sleep 0.001
41
- end
40
+ sleep 0.001 until File.exist? sock_path
42
41
  end
43
42
  rescue ::Timeout::Error
44
43
  raise ::Dapp::Error::Project, code: :cannot_run_ssh_agent
@@ -47,7 +46,7 @@ module Dapp
47
46
  end
48
47
 
49
48
  def add_ssh_key(ssh_key_path)
50
- shellout! "ssh-add #{ssh_key_path}", env: {SSH_AUTH_SOCK: ssh_auth_sock(force_run_agent: true)}
49
+ shellout! "ssh-add #{ssh_key_path}", env: { SSH_AUTH_SOCK: ssh_auth_sock(force_run_agent: true) }
51
50
  end
52
51
 
53
52
  def ssh_auth_sock(force_run_agent: false)
@@ -70,7 +69,7 @@ module Dapp
70
69
  raise ::Dapp::Error::Project, code: :ssh_key_not_found,
71
70
  data: { path: ssh_key } unless File.exist? ssh_key
72
71
 
73
- File.chmod 0600, ssh_key
72
+ File.chmod 0o600, ssh_key
74
73
  add_ssh_key ssh_key
75
74
  end
76
75
  end