dapp 0.5.13 → 0.6.0
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 -0
- data/config/en/common.yml +35 -6
- data/config/en/net_status.yml +20 -6
- data/lib/dapp.rb +53 -27
- data/lib/dapp/application.rb +48 -27
- data/lib/dapp/application/git_artifact.rb +1 -1
- data/lib/dapp/application/path.rb +2 -18
- data/lib/dapp/application/tags.rb +5 -5
- data/lib/dapp/build/stage/artifact.rb +8 -3
- data/lib/dapp/build/stage/base.rb +43 -30
- data/lib/dapp/build/stage/{infra_install.rb → before_install.rb} +6 -6
- data/lib/dapp/build/stage/before_setup.rb +27 -0
- data/lib/dapp/build/stage/docker_instructions.rb +12 -1
- data/lib/dapp/build/stage/from.rb +4 -3
- data/lib/dapp/build/stage/{source_1_archive.rb → ga_archive.rb} +7 -7
- data/lib/dapp/build/stage/{source_1_archive_dependencies.rb → ga_archive_dependencies.rb} +4 -4
- data/lib/dapp/build/stage/{source_base.rb → ga_base.rb} +31 -7
- data/lib/dapp/build/stage/{source_dependencies_base.rb → ga_dependencies_base.rb} +5 -6
- data/lib/dapp/build/stage/{source_5.rb → ga_latest_patch.rb} +6 -6
- data/lib/dapp/build/stage/install/ga_post_install_patch.rb +21 -0
- data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +21 -0
- data/lib/dapp/build/stage/install/ga_pre_install_patch.rb +21 -0
- data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +31 -0
- data/lib/dapp/build/stage/install/install.rb +31 -0
- data/lib/dapp/build/stage/mod/artifact.rb +9 -19
- data/lib/dapp/build/stage/mod/group.rb +42 -0
- data/lib/dapp/build/stage/mod/logging.rb +62 -26
- data/lib/dapp/build/stage/setup/chef_cookbooks.rb +37 -0
- data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +25 -0
- data/lib/dapp/build/stage/setup/ga_post_setup_patch_dependencies.rb +31 -0
- data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +25 -0
- data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +27 -0
- data/lib/dapp/build/stage/setup/setup.rb +31 -0
- data/lib/dapp/builder/base.rb +9 -6
- data/lib/dapp/builder/chef.rb +128 -107
- data/lib/dapp/builder/chef/berksfile.rb +3 -0
- data/lib/dapp/builder/shell.rb +4 -3
- data/lib/dapp/cli.rb +8 -6
- data/lib/dapp/cli/base.rb +6 -1
- data/lib/dapp/cli/bp.rb +41 -0
- data/lib/dapp/cli/build.rb +17 -4
- data/lib/dapp/cli/cleanup.rb +24 -0
- data/lib/dapp/cli/list.rb +2 -2
- data/lib/dapp/cli/push.rb +8 -9
- data/lib/dapp/cli/run.rb +3 -4
- data/lib/dapp/cli/spush.rb +20 -0
- data/lib/dapp/cli/stages.rb +2 -0
- data/lib/dapp/cli/stages/cleanup.rb +7 -3
- data/lib/dapp/cli/stages/flush.rb +6 -3
- data/lib/dapp/config/application.rb +17 -11
- data/lib/dapp/config/chef.rb +4 -0
- data/lib/dapp/config/docker.rb +3 -2
- data/lib/dapp/config/git_artifact.rb +1 -2
- data/lib/dapp/config/main.rb +5 -2
- data/lib/dapp/config/shell.rb +20 -16
- data/lib/dapp/docker_registry.rb +32 -0
- data/lib/dapp/docker_registry/base.rb +47 -0
- data/lib/dapp/docker_registry/default.rb +18 -0
- data/lib/dapp/docker_registry/mod/authorization.rb +62 -0
- data/lib/dapp/docker_registry/mod/request.rb +44 -0
- data/lib/dapp/error/image.rb +6 -0
- data/lib/dapp/error/project.rb +6 -0
- data/lib/dapp/error/registry.rb +6 -0
- data/lib/dapp/exception/registry.rb +6 -0
- data/lib/dapp/git_artifact.rb +6 -7
- data/lib/dapp/git_repo/base.rb +1 -1
- data/lib/dapp/git_repo/remote.rb +6 -38
- data/lib/dapp/helper/sha256.rb +3 -3
- data/lib/dapp/helper/shellout.rb +25 -7
- data/lib/dapp/helper/streaming.rb +1 -3
- data/lib/dapp/image/argument.rb +31 -18
- data/lib/dapp/image/docker.rb +15 -8
- data/lib/dapp/image/stage.rb +10 -12
- data/lib/dapp/lock/base.rb +44 -0
- data/lib/dapp/lock/error.rb +14 -0
- data/lib/dapp/lock/file.rb +33 -0
- data/lib/dapp/prctl.rb +22 -0
- data/lib/dapp/project.rb +75 -0
- data/lib/dapp/project/command/bp.rb +24 -0
- data/lib/dapp/project/command/build.rb +21 -0
- data/lib/dapp/project/command/cleanup.rb +24 -0
- data/lib/dapp/project/command/common.rb +51 -0
- data/lib/dapp/project/command/list.rb +14 -0
- data/lib/dapp/project/command/push.rb +21 -0
- data/lib/dapp/project/command/run.rb +15 -0
- data/lib/dapp/project/command/spush.rb +17 -0
- data/lib/dapp/project/command/stages_cleanup.rb +70 -0
- data/lib/dapp/project/command/stages_flush.rb +18 -0
- data/lib/dapp/project/dappfile.rb +70 -0
- data/lib/dapp/project/lock.rb +27 -0
- data/lib/dapp/project/logging/base.rb +107 -0
- data/lib/dapp/project/logging/process.rb +104 -0
- data/lib/dapp/project/paint.rb +16 -0
- data/lib/dapp/project/ssh_agent.rb +77 -0
- data/lib/dapp/version.rb +1 -1
- metadata +74 -27
- data/lib/dapp/application/deps/gitartifact.rb +0 -39
- data/lib/dapp/application/logging.rb +0 -120
- data/lib/dapp/application/system_shellout.rb +0 -63
- data/lib/dapp/build/stage/chef_cookbooks.rb +0 -33
- data/lib/dapp/build/stage/infra_setup.rb +0 -27
- data/lib/dapp/build/stage/install.rb +0 -27
- data/lib/dapp/build/stage/setup.rb +0 -27
- data/lib/dapp/build/stage/source_1.rb +0 -21
- data/lib/dapp/build/stage/source_1_dependencies.rb +0 -27
- data/lib/dapp/build/stage/source_2.rb +0 -17
- data/lib/dapp/build/stage/source_2_dependencies.rb +0 -17
- data/lib/dapp/build/stage/source_3.rb +0 -17
- data/lib/dapp/build/stage/source_3_dependencies.rb +0 -23
- data/lib/dapp/build/stage/source_4.rb +0 -21
- data/lib/dapp/build/stage/source_4_dependencies.rb +0 -27
- data/lib/dapp/cli/smartpush.rb +0 -19
- data/lib/dapp/controller.rb +0 -119
- data/lib/dapp/error/controller.rb +0 -6
- data/lib/dapp/helper/log.rb +0 -73
data/lib/dapp/helper/shellout.rb
CHANGED
@@ -5,12 +5,24 @@ module Dapp
|
|
5
5
|
include Streaming
|
6
6
|
|
7
7
|
def shellout(*args, log_verbose: false, **kwargs)
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
log_verbose = (log_verbose && cli_options[:log_verbose]) if defined? cli_options
|
9
|
+
kwargs[:live_stream] ||= STDOUT if log_verbose
|
10
|
+
|
11
|
+
env = nil
|
12
|
+
|
13
|
+
Shellout.default_env_keys.each do |env_key|
|
14
|
+
env_key = env_key.to_s.upcase
|
15
|
+
env ||= {}
|
16
|
+
env[env_key] = ENV[env_key]
|
12
17
|
end
|
13
18
|
|
19
|
+
param_env = (kwargs.delete(:env) || kwargs.delete(:environment))
|
20
|
+
param_env = param_env.map { |key, value| [key.to_s.upcase, value.to_s] }.to_h if param_env
|
21
|
+
|
22
|
+
env = (env || {}).merge(param_env) if param_env
|
23
|
+
kwargs[:env] = env if env
|
24
|
+
|
25
|
+
do_shellout = -> { ::Mixlib::ShellOut.new(*args, timeout: 3600, **kwargs).run_command }
|
14
26
|
if defined? ::Bundler
|
15
27
|
::Bundler.with_clean_env { do_shellout.call }
|
16
28
|
else
|
@@ -37,9 +49,15 @@ module Dapp
|
|
37
49
|
"eval $(echo #{Base64.strict_encode64(command)} | base64 --decode)"
|
38
50
|
end
|
39
51
|
|
40
|
-
|
41
|
-
base
|
42
|
-
|
52
|
+
class << self
|
53
|
+
def included(base)
|
54
|
+
base.extend(self)
|
55
|
+
end
|
56
|
+
|
57
|
+
def default_env_keys
|
58
|
+
@default_env_keys ||= []
|
59
|
+
end
|
60
|
+
end # << self
|
43
61
|
end
|
44
62
|
end # Helper
|
45
63
|
end # Dapp
|
@@ -21,8 +21,6 @@ module Dapp
|
|
21
21
|
module Proxy
|
22
22
|
# Base
|
23
23
|
class Base
|
24
|
-
include Helper::Log
|
25
|
-
|
26
24
|
def initialize(*streams, with_time: false)
|
27
25
|
@streams = streams
|
28
26
|
@with_time = with_time
|
@@ -33,7 +31,7 @@ module Dapp
|
|
33
31
|
end
|
34
32
|
|
35
33
|
def format_string(str)
|
36
|
-
str.lines.map { |l| "#{log_time if @with_time}#{l.strip}\n" }.join
|
34
|
+
str.lines.map { |l| "#{Project::Logging.log_time if @with_time}#{l.strip}\n" }.join
|
37
35
|
end
|
38
36
|
end
|
39
37
|
|
data/lib/dapp/image/argument.rb
CHANGED
@@ -38,8 +38,8 @@ module Dapp
|
|
38
38
|
add_change_option(:user, value)
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
42
|
-
|
41
|
+
def add_service_change_label(**options)
|
42
|
+
add_service_change_option(:label, options)
|
43
43
|
end
|
44
44
|
|
45
45
|
def add_volume(value)
|
@@ -50,18 +50,25 @@ module Dapp
|
|
50
50
|
add_option(:'volumes-from', value)
|
51
51
|
end
|
52
52
|
|
53
|
-
def add_entrypoint(value)
|
54
|
-
add_option(:entrypoint, value)
|
55
|
-
end
|
56
|
-
|
57
53
|
def add_command(*commands)
|
58
54
|
@bash_commands.concat(commands.flatten)
|
59
55
|
end
|
60
56
|
|
57
|
+
def prepare_instructions(options)
|
58
|
+
options.map do |key, vals|
|
59
|
+
case key
|
60
|
+
when :cmd, :entrypoint then [vals]
|
61
|
+
when :env, :label then vals.map(&method(:options_to_args)).flatten
|
62
|
+
else vals
|
63
|
+
end.map { |val| %(#{key.to_s.upcase} #{val}) }
|
64
|
+
end.flatten
|
65
|
+
end
|
66
|
+
|
61
67
|
protected
|
62
68
|
|
63
69
|
attr_reader :bash_commands
|
64
|
-
attr_reader :
|
70
|
+
attr_reader :change_options, :service_change_options
|
71
|
+
attr_reader :options
|
65
72
|
|
66
73
|
def add_option(key, value)
|
67
74
|
add_option_default(options, key, value)
|
@@ -71,11 +78,15 @@ module Dapp
|
|
71
78
|
add_option_default(change_options, key, value)
|
72
79
|
end
|
73
80
|
|
81
|
+
def add_service_change_option(key, value)
|
82
|
+
add_option_default(service_change_options, key, value)
|
83
|
+
end
|
84
|
+
|
74
85
|
def add_option_default(hash, key, value)
|
75
86
|
hash[key] = (hash[key].nil? ? [value] : (hash[key] << value)).flatten
|
76
87
|
end
|
77
88
|
|
78
|
-
def
|
89
|
+
def from_change_options
|
79
90
|
return {} if from.nil?
|
80
91
|
[:entrypoint, :cmd].each_with_object({}) do |option, options|
|
81
92
|
options[option] = self.class.image_config_option(image_id: from.built_id, option: option)
|
@@ -87,21 +98,23 @@ module Dapp
|
|
87
98
|
end
|
88
99
|
|
89
100
|
def prepared_options
|
90
|
-
|
101
|
+
all_options.map { |key, vals| Array(vals).map { |val| "--#{key}=#{val}" } }.flatten.join(' ')
|
102
|
+
end
|
103
|
+
|
104
|
+
def all_options
|
105
|
+
service_options.merge(options)
|
106
|
+
end
|
107
|
+
|
108
|
+
def service_options
|
109
|
+
{ entrypoint: '/bin/bash', name: container_name }
|
91
110
|
end
|
92
111
|
|
93
112
|
def prepared_change
|
94
|
-
|
95
|
-
case key
|
96
|
-
when :cmd, :entrypoint then [vals]
|
97
|
-
when :env, :label then vals.map(&method(:options_to_args)).flatten
|
98
|
-
else vals
|
99
|
-
end.map { |val| %(-c '#{key.to_s.upcase} #{val}') }.join(' ')
|
100
|
-
end
|
113
|
+
prepare_instructions(all_change_options).map { |instruction| %(-c '#{instruction}') }.join(' ')
|
101
114
|
end
|
102
115
|
|
103
|
-
def
|
104
|
-
|
116
|
+
def all_change_options
|
117
|
+
from_change_options.merge(change_options.merge(service_change_options) { |_, v1, v2| [v1, v2].flatten })
|
105
118
|
end
|
106
119
|
|
107
120
|
def prepared_bash_command
|
data/lib/dapp/image/docker.rb
CHANGED
@@ -7,10 +7,12 @@ module Dapp
|
|
7
7
|
|
8
8
|
attr_reader :from
|
9
9
|
attr_reader :name
|
10
|
+
attr_reader :project
|
10
11
|
|
11
|
-
def initialize(name:, from: nil)
|
12
|
+
def initialize(name:, project:, from: nil)
|
12
13
|
@from = from
|
13
14
|
@name = name
|
15
|
+
@project = project
|
14
16
|
end
|
15
17
|
|
16
18
|
def id
|
@@ -43,9 +45,14 @@ module Dapp
|
|
43
45
|
!!@pulled
|
44
46
|
end
|
45
47
|
|
46
|
-
def
|
48
|
+
def created_at
|
47
49
|
raise Error::Build, code: :image_not_exist, data: { name: name } unless tagged?
|
48
|
-
|
50
|
+
cache[:created_at]
|
51
|
+
end
|
52
|
+
|
53
|
+
def size
|
54
|
+
raise Error::Build, code: :image_not_exist, data: { name: name } unless tagged?
|
55
|
+
cache[:size]
|
49
56
|
end
|
50
57
|
|
51
58
|
def self.image_config_option(image_id:, option:)
|
@@ -53,23 +60,23 @@ module Dapp
|
|
53
60
|
output == 'null' ? [] : JSON.parse(output)
|
54
61
|
end
|
55
62
|
|
63
|
+
def cache_reset
|
64
|
+
self.class.cache_reset(name)
|
65
|
+
end
|
66
|
+
|
56
67
|
protected
|
57
68
|
|
58
69
|
def cache
|
59
70
|
self.class.cache[name.to_s] || {}
|
60
71
|
end
|
61
72
|
|
62
|
-
def cache_reset
|
63
|
-
self.class.cache.delete(name)
|
64
|
-
self.class.cache_reset(name)
|
65
|
-
end
|
66
|
-
|
67
73
|
class << self
|
68
74
|
def cache
|
69
75
|
@cache ||= (@cache = {}).tap { cache_reset }
|
70
76
|
end
|
71
77
|
|
72
78
|
def cache_reset(name = '')
|
79
|
+
cache.delete(name)
|
73
80
|
shellout!("docker images --format='{{.Repository}}:{{.Tag}};{{.ID}};{{.CreatedAt}};{{.Size}}' #{name}").stdout.lines.each do |line|
|
74
81
|
name, id, created_at, size = line.split(';')
|
75
82
|
cache[name] = { id: id, created_at: created_at, size: size }
|
data/lib/dapp/image/stage.rb
CHANGED
@@ -5,13 +5,14 @@ module Dapp
|
|
5
5
|
class Stage < Docker
|
6
6
|
include Argument
|
7
7
|
|
8
|
-
def initialize(name:, built_id: nil, from: nil)
|
8
|
+
def initialize(name:, project:, built_id: nil, from: nil)
|
9
9
|
@bash_commands = []
|
10
10
|
@options = {}
|
11
11
|
@change_options = {}
|
12
|
-
@
|
12
|
+
@service_change_options = {}
|
13
|
+
@container_name = "#{name[/[[^:].]*/]}.#{SecureRandom.hex(4)}"
|
13
14
|
@built_id = built_id
|
14
|
-
super(name: name, from: from)
|
15
|
+
super(name: name, project: project, from: from)
|
15
16
|
end
|
16
17
|
|
17
18
|
def labels
|
@@ -29,18 +30,15 @@ module Dapp
|
|
29
30
|
shellout("docker rm #{container_name}")
|
30
31
|
end
|
31
32
|
|
32
|
-
def export!(name, log_verbose: false, log_time: false
|
33
|
-
image = self.class.new(
|
34
|
-
image.tag!(log_verbose: log_verbose, log_time: log_time
|
33
|
+
def export!(name, log_verbose: false, log_time: false)
|
34
|
+
image = self.class.new(name: name, project: project, built_id: built_id)
|
35
|
+
image.tag!(log_verbose: log_verbose, log_time: log_time)
|
35
36
|
image.push!(log_verbose: log_verbose, log_time: log_time)
|
36
37
|
image.untag!
|
37
38
|
end
|
38
39
|
|
39
|
-
def tag!(log_verbose: false, log_time: false
|
40
|
-
if !(existed_id = id).nil? &&
|
41
|
-
raise Error::Build, code: :another_image_already_tagged if built_id != existed_id
|
42
|
-
return
|
43
|
-
end
|
40
|
+
def tag!(log_verbose: false, log_time: false)
|
41
|
+
project.log_warning(desc: { code: :another_image_already_tagged, context: 'warning' }) if !(existed_id = id).nil? && built_id != existed_id
|
44
42
|
shellout!("docker tag #{built_id} #{name}", log_verbose: log_verbose, log_time: log_time)
|
45
43
|
cache_reset
|
46
44
|
end
|
@@ -51,7 +49,7 @@ module Dapp
|
|
51
49
|
|
52
50
|
def run!(log_verbose: false, log_time: false, introspect_error: false, introspect_before_error: false)
|
53
51
|
raise Error::Build, code: :built_id_not_defined if from.built_id.nil?
|
54
|
-
shellout!("docker run #{prepared_options}
|
52
|
+
shellout!("docker run #{prepared_options} #{from.built_id} -ec '#{prepared_bash_command}'",
|
55
53
|
log_verbose: log_verbose, log_time: log_time)
|
56
54
|
rescue Error::Shellout => _e
|
57
55
|
raise unless introspect_error || introspect_before_error
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Lock
|
3
|
+
module Lock
|
4
|
+
# Base
|
5
|
+
class Base
|
6
|
+
attr_reader :name
|
7
|
+
attr_reader :on_wait
|
8
|
+
attr_reader :timeout
|
9
|
+
|
10
|
+
def initialize(name, timeout: 60, on_wait: nil)
|
11
|
+
@name = name
|
12
|
+
@on_wait = on_wait
|
13
|
+
@timeout = timeout
|
14
|
+
end
|
15
|
+
|
16
|
+
def lock(shared: false)
|
17
|
+
raise
|
18
|
+
end
|
19
|
+
|
20
|
+
def unlock
|
21
|
+
raise
|
22
|
+
end
|
23
|
+
|
24
|
+
def synchronize(*args)
|
25
|
+
lock(*args)
|
26
|
+
begin
|
27
|
+
yield if block_given?
|
28
|
+
ensure
|
29
|
+
unlock
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
protected
|
34
|
+
|
35
|
+
def _waiting(&blk)
|
36
|
+
if @on_wait
|
37
|
+
@on_wait.call { ::Timeout.timeout(timeout, &blk) }
|
38
|
+
else
|
39
|
+
::Timeout.timeout(timeout, &blk)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end # Base
|
43
|
+
end # Lock
|
44
|
+
end # Dapp
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Lock
|
3
|
+
module Lock
|
4
|
+
# File
|
5
|
+
class File < Base
|
6
|
+
attr_reader :lock_path
|
7
|
+
|
8
|
+
def initialize(lock_path, name, **kwargs)
|
9
|
+
super(name, **kwargs)
|
10
|
+
@lock_path = Pathname.new(lock_path).tap(&:mkpath)
|
11
|
+
end
|
12
|
+
|
13
|
+
def lock(shared: false)
|
14
|
+
return if @file
|
15
|
+
@file = ::File.open(lock_path.join(name), ::File::RDWR | ::File::CREAT, 0644)
|
16
|
+
|
17
|
+
begin
|
18
|
+
mode = (shared ? ::File::LOCK_SH : ::File::LOCK_EX)
|
19
|
+
_waiting { @file.flock(mode) } unless @file.flock(mode | ::File::LOCK_NB)
|
20
|
+
rescue ::Timeout::Error
|
21
|
+
raise Dapp::Lock::Error::Timeout, code: :timeout,
|
22
|
+
data: { name: name, timeout: timeout }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def unlock
|
27
|
+
@file.flock(::File::LOCK_UN)
|
28
|
+
@file.close
|
29
|
+
@file = nil
|
30
|
+
end
|
31
|
+
end # File
|
32
|
+
end # Lock
|
33
|
+
end # Dapp
|
data/lib/dapp/prctl.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Prctl
|
2
|
+
PR_SET_PDEATHSIG = 1
|
3
|
+
|
4
|
+
class << self
|
5
|
+
def _fiddle_func
|
6
|
+
require 'fiddle'
|
7
|
+
@_fiddle_func ||= Fiddle::Function.new(
|
8
|
+
Fiddle::Handle['prctl'.freeze], [
|
9
|
+
Fiddle::TYPE_INT,
|
10
|
+
Fiddle::TYPE_LONG,
|
11
|
+
Fiddle::TYPE_LONG,
|
12
|
+
Fiddle::TYPE_LONG,
|
13
|
+
Fiddle::TYPE_LONG
|
14
|
+
], Fiddle::TYPE_INT
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(*a)
|
19
|
+
_fiddle_func.call(*a)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/dapp/project.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
include Lock
|
5
|
+
include Dappfile
|
6
|
+
include Paint
|
7
|
+
include Command::Common
|
8
|
+
include Command::Run
|
9
|
+
include Command::Build
|
10
|
+
include Command::Bp
|
11
|
+
include Command::Push
|
12
|
+
include Command::Spush
|
13
|
+
include Command::List
|
14
|
+
include Command::StagesFlush
|
15
|
+
include Command::StagesCleanup
|
16
|
+
include Command::Cleanup
|
17
|
+
include Logging::Base
|
18
|
+
include Logging::Process
|
19
|
+
|
20
|
+
include SshAgent
|
21
|
+
include Helper::I18n
|
22
|
+
include Helper::Shellout
|
23
|
+
include Helper::Paint
|
24
|
+
include Helper::Sha256
|
25
|
+
|
26
|
+
attr_reader :cli_options
|
27
|
+
attr_reader :apps_patterns
|
28
|
+
|
29
|
+
def initialize(cli_options: {}, apps_patterns: nil)
|
30
|
+
@cli_options = cli_options
|
31
|
+
@apps_patterns = apps_patterns || []
|
32
|
+
@apps_patterns << '*' unless @apps_patterns.any?
|
33
|
+
|
34
|
+
paint_initialize
|
35
|
+
Helper::I18n.initialize
|
36
|
+
end
|
37
|
+
|
38
|
+
def name
|
39
|
+
@name ||= begin
|
40
|
+
shellout!("git -C #{path} config --get remote.origin.url").stdout.strip.split('/').last[/.*(?=.git)/]
|
41
|
+
rescue Error::Shellout
|
42
|
+
File.basename(path)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def path
|
47
|
+
@path ||= begin
|
48
|
+
dappfile_path = dappfiles.first
|
49
|
+
if File.basename(expand_path(dappfile_path, 2)) == '.dapps'
|
50
|
+
expand_path(dappfile_path, 3)
|
51
|
+
else
|
52
|
+
expand_path(dappfile_path)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def build_path
|
58
|
+
@build_path ||= begin
|
59
|
+
if cli_options[:build_dir]
|
60
|
+
Pathname.new(cli_options[:build_dir])
|
61
|
+
else
|
62
|
+
Pathname.new(path).join('.dapps_build')
|
63
|
+
end.expand_path.tap(&:mkpath)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def cache_format
|
68
|
+
"dappstage-#{name}-%{application_name}"
|
69
|
+
end
|
70
|
+
|
71
|
+
def stage_dapp_label_format
|
72
|
+
'%{application_name}'
|
73
|
+
end
|
74
|
+
end # Project
|
75
|
+
end # Dapp
|