dapp 0.7.28 → 0.7.29
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/en/net_status.yml +1 -0
- data/lib/dapp/build/stage/artifact_default.rb +35 -23
- data/lib/dapp/image/docker.rb +11 -5
- data/lib/dapp/version.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27f41edc93f675eb3cb343639e176e7ed7163643
|
4
|
+
data.tar.gz: dd34396d0d2f76e0bf83ec0a51e5744655be40e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f743206bfe53fbc9a01adfd730a58d0533cf5c8aa1819b719fc6adaf6b7e551733bb1b52e1f6d9693fee02b5cd92bb3c9694a556ecbd28561e51ce98cb947df3
|
7
|
+
data.tar.gz: 358972edf1f1293639ea69a26a0d1ddb1338e425c2dd1431ce79ffaddefb9ffdca0e8292050993427f3daf7cb171d8293a8224aa756c5494399d2414e5c06172
|
data/config/en/net_status.yml
CHANGED
@@ -17,6 +17,7 @@ en:
|
|
17
17
|
image_not_exist: "Image `%{name}` not exist!"
|
18
18
|
built_id_not_defined: '`from.built_id` not defined!'
|
19
19
|
from_image_not_found: 'Image `%{name}` not found!'
|
20
|
+
unsupported_docker_image_size_format: "Unsupported docker image size format `%{value}`"
|
20
21
|
project:
|
21
22
|
command_unexpected_dimgs_number: "Command can process only one dimg!\nAmbiguous dimg pattern: `%{dimgs_names}`!"
|
22
23
|
no_such_dimg: "No such dimg: `%{dimgs_patterns}`!"
|
@@ -31,32 +31,44 @@ module Dapp
|
|
31
31
|
|
32
32
|
# rubocop:disable Metrics/ParameterLists, Metrics/AbcSize, Metrics/MethodLength
|
33
33
|
def safe_cp(from, to, owner, group, include_paths = [], exclude_paths = [])
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
copy_files = proc do |from_, path_ = ''|
|
40
|
-
"if [[ -d #{File.join(from_, path_)} ]] || [[ -f #{File.join(from_, path_)} ]]; then " \
|
41
|
-
"#{dimg.project.find_bin} #{File.join(from_, path_)} #{excludes} -type f -exec " \
|
42
|
-
"#{dimg.project.bash_bin} -ec '#{dimg.project.install_bin} -D #{credentials} \"{}\" " \
|
43
|
-
"\"#{File.join(to, "$(echo \"{}\" | " \
|
44
|
-
"#{dimg.project.sed_bin} -e \"s/^#{from_.gsub('/', '\\/')}\\///g\")")}\"' \\; ;" \
|
45
|
-
'fi'
|
46
|
-
end
|
34
|
+
''.tap do |cmd|
|
35
|
+
cmd << dimg.project.rsync_bin
|
36
|
+
cmd << ' --archive --links'
|
37
|
+
cmd << " --chown=#{owner}:#{group}" if owner or group
|
47
38
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
39
|
+
if include_paths.any?
|
40
|
+
# Если указали include_paths — это означает, что надо копировать
|
41
|
+
# только указанные пути. Поэтому exclude_paths в приоритете, т.к. в данном режиме
|
42
|
+
# exclude_paths может относится только к путям, указанным в include_paths.
|
43
|
+
# При этом случай, когда в include_paths указали более специальный путь, чем в exclude_paths,
|
44
|
+
# будет обрабатываться в пользу exclude, этот путь не скопируется.
|
45
|
+
exclude_paths.each do |p|
|
46
|
+
cmd << " --filter='-/ #{File.join(from, p)}'"
|
47
|
+
end
|
48
|
+
|
49
|
+
include_paths.each do |p|
|
50
|
+
# * На данный момент не знаем директорию или файл имел в виду пользователь,
|
51
|
+
# поэтому подставляем фильтры для обоих возможных случаев.
|
52
|
+
# * Автоматом подставляем паттерн ** для включения файлов, содержащихся в
|
53
|
+
# директории, которую пользователь указал в include_paths.
|
54
|
+
cmd << " --filter='+/ #{File.join(from, p)}'"
|
55
|
+
cmd << " --filter='+/ #{File.join(from, p, '**')}'"
|
56
|
+
end
|
56
57
|
|
57
|
-
|
58
|
-
|
58
|
+
# Все что не подошло по include — исключается
|
59
|
+
cmd << " --filter='-/ #{File.join(from, '**')}'"
|
60
|
+
else
|
61
|
+
exclude_paths.each do |p|
|
62
|
+
cmd << " --filter='-/ #{File.join(from, p)}'"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Слэш после from — это инструкция rsync'у для копирования
|
67
|
+
# содержимого директории from, а не самой директории.
|
68
|
+
cmd << " #{from}/ #{to}"
|
69
|
+
end
|
59
70
|
end
|
71
|
+
# rubocop:enable Metrics/ParameterLists, Metrics/AbcSize, Metrics/MethodLength
|
60
72
|
end # ArtifactDefault
|
61
73
|
end # Stage
|
62
74
|
end # Build
|
data/lib/dapp/image/docker.rb
CHANGED
@@ -90,17 +90,23 @@ module Dapp
|
|
90
90
|
def cache_reset(name = '')
|
91
91
|
cache.delete(name)
|
92
92
|
Project.shellout!("docker images --format='{{.Repository}}:{{.Tag}};{{.ID}};{{.CreatedAt}};{{.Size}}' --no-trunc #{name}").stdout.lines.each do |l|
|
93
|
-
name, id, created_at, size_field = l.split(';')
|
93
|
+
name, id, created_at, size_field = l.split(';').map(&:strip)
|
94
94
|
size = begin
|
95
|
-
|
96
|
-
|
97
|
-
|
95
|
+
match = size_field.match(/^(\d+(\.\d+)?)\ ?(b|kb|mb|gb|tb)$/i)
|
96
|
+
raise Error::Build, code: :unsupported_docker_image_size_format, data: {value: size_field} unless match and match[1] and match[3]
|
97
|
+
|
98
|
+
number = match[1].to_f
|
99
|
+
unit = match[3].downcase
|
100
|
+
|
101
|
+
coef = case unit
|
102
|
+
when 'b' then 0
|
98
103
|
when 'kb' then 1
|
99
104
|
when 'mb' then 2
|
100
105
|
when 'gb' then 3
|
101
106
|
when 'tb' then 4
|
102
107
|
end
|
103
|
-
|
108
|
+
|
109
|
+
number * (1000**coef)
|
104
110
|
end
|
105
111
|
cache[name] = { id: id, created_at: created_at, size: size }
|
106
112
|
end
|
data/lib/dapp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Stolyarov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|