docker_core 0.0.8 → 0.0.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docker_core.rb +131 -72
  3. metadata +10 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 417a44472031d3acce9a599d7cd6873deced890dcdbc3ea5993d935d8e74f874
4
- data.tar.gz: 2914b35b4ee999f8fd8e677a55125ebfa07f835da3dc957c8204cb9f09c7810f
3
+ metadata.gz: 00fb52a4f5555896a6adf120e8423042a5f8df909273d35408af69403fb3207d
4
+ data.tar.gz: 5f01c694a7d100579184691c91619a036b1e4113a124d003c6994b554c1f7f02
5
5
  SHA512:
6
- metadata.gz: 796f1c189d39e0d5e9bcf042325203fc89082522a4d1a73b13355ea4dbd7ae9166a1c7a78c59d41ca657a2548c02fb5057ef0c4fd055a5594cc0ce0d86aacbec
7
- data.tar.gz: ef6b8b6ea7072330800830db4d84e1ade2b49ac76f0ec2c46d5354156fe738872826d1a963b9f32a9d40ddcd27728c9ba2fe6a04da8648c52def7be867e59716
6
+ metadata.gz: 34db7cd225b362b0b84e2a1101c14b731185157f116b964e65f5b38c57167e4849da7f941b85c21856deb3cc2ebc08e218cf7fb51153c5c80f60cdb00756cd0d
7
+ data.tar.gz: 05245c8caa1f40b009c52456d450145a61bd3713ecddab8e3bd94e1a2089bdf1c301d2e38177273076767c994ec912c1b96f2d57ab23f0b461ef3e1973aa5819
data/lib/docker_core.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require('fileutils')
2
- require('net/http')
3
2
  require('json')
4
- require('zlib')
3
+ require('net/http')
5
4
  require('rubygems/package')
5
+ require('zlib')
6
6
 
7
7
  module DockerCore
8
8
  COLOR_CODE = { error: 31, info: 32, warn: 33 }
@@ -19,7 +19,7 @@ module DockerCore
19
19
 
20
20
  # @param [String] text
21
21
  # @param [Integer] code
22
- def self.echo(text, code = self::COLOR_CODE[:info])
22
+ def self.echo(text, code: self::COLOR_CODE[:info])
23
23
  puts(self.color(text, code))
24
24
  end
25
25
 
@@ -28,80 +28,101 @@ module DockerCore
28
28
  # @param [Array] argumets
29
29
  def self.execute(title, run, *argumets)
30
30
  code = self::COLOR_CODE[:warn]
31
- self.echo("> #{title}", code)
31
+ self.echo("> #{title}", code: code)
32
32
  run.call(*argumets)
33
- self.echo("< #{title}", code)
33
+ self.echo("< #{title}", code: code)
34
34
  end
35
35
 
36
36
  # @param [String] command
37
- # @param [Boolean] echo
38
- # @param [Boolean] throw
39
- def self.run(command, echo = true, throw = true)
40
- if echo
41
- self.echo("+ #{command}")
42
- end
43
-
37
+ # @param [Boolean] force
38
+ def self.run(command, force: false)
44
39
  begin
40
+ self.echo("+ #{command}")
45
41
  print(`#{command}`)
46
42
  rescue
47
- if throw
48
- raise $!
49
- end
43
+ raise unless force
50
44
  end
51
45
  end
52
46
 
53
47
  # @param [Integer] uid
54
48
  # @param [Integer] gid
55
- def self.update_user(uid = 500, gid = 500)
49
+ def self.update_user(uid: 500, gid: 500)
56
50
  uid = ENV.fetch('DOCKER_CORE_UID', uid)
57
51
  gid = ENV.fetch('DOCKER_CORE_GID', gid)
58
- self.run('deluser core')
59
- self.run('delgroup core')
52
+ self.run('deluser core', force: true)
53
+ self.run('delgroup core', force: true)
60
54
  self.run("addgroup --system --gid=#{gid} core")
61
55
  self.run("adduser --system --disabled-password --no-create-home --ingroup=core --gecos=core --shell=/bin/bash --uid=#{uid} core")
62
56
  end
63
57
 
58
+ # @param [Array<String>] arguments
59
+ def self.path(*arguments)
60
+ return Dir.glob(arguments.flatten, File::FNM_DOTMATCH).map { |item| File.path(item) }.uniq
61
+ end
62
+
64
63
  # @param [Array<String>] arguments
65
64
  def self.chown(*arguments)
66
- arguments.each do |list|
67
- FileUtils.chown_R('core', 'core', list)
65
+ self.path(*arguments).each do |path|
66
+ FileUtils.chown_R('core', 'core', path, force: true)
68
67
  end
69
- return
70
68
  end
71
69
 
72
70
  # @param [Array<String>] arguments
73
- def self.mkdir(*arguments)
74
- arguments.each do |list|
75
- FileUtils.mkdir_p(list)
71
+ def self.chmod(mode, *arguments)
72
+ self.path(*arguments).each do |path|
73
+ FileUtils.chmod_R(mode, path, force: true)
74
+ end
75
+ end
76
+
77
+ # @param [Array<String>] arguments
78
+ def self.mkdir(*arguments, mode: nil)
79
+ stack = []
80
+ paths = arguments.map { |path| File.path(path) }.uniq
81
+
82
+ paths.each do |path|
83
+ until path == stack.last
84
+ stack << path
85
+ path = File.dirname(path)
86
+ end
87
+ end
88
+
89
+ stack.uniq.each do |path|
90
+ if File.exist?(path) && false == File.directory?(path)
91
+ File.delete(path)
92
+ end
93
+ end
94
+
95
+ FileUtils.mkdir_p(paths, mode: mode)
96
+ end
97
+
98
+ # @param [Array<String>] arguments
99
+ def self.rm(*arguments)
100
+ self.path(*arguments).each do |path|
101
+ FileUtils.rm_rf(path)
76
102
  end
77
- self.chown(*arguments)
78
103
  end
79
104
 
80
105
  # @param [String] value
81
106
  def self.to_boolean(value)
82
- return %w[true yes on].include?(value.strip.downcase)
107
+ return %w[true yes on].include?("#{value}".strip.downcase)
83
108
  end
84
109
 
85
110
  # @param [String] stdout
86
111
  # @param [String] stderr
87
- def self.link_log(stdout = '', stderr = '')
112
+ def self.link_log(stdout: '', stderr: '')
88
113
  if '' != stdout
89
- File.symlink('/dev/stdout', stdout)
114
+ File.symlink('/dev/stdout', File.path(stdout))
90
115
  end
91
116
 
92
117
  if '' != stderr
93
- File.symlink('/dev/stderr', stderr)
118
+ File.symlink('/dev/stderr', File.path(stderr))
94
119
  end
95
- return
96
120
  end
97
121
 
98
122
  # @param [Array<String>] arguments
99
- def self.clear_path(*arguments)
100
- arguments.each do |list|
101
- FileUtils.rm_rf(list)
102
- end
103
-
104
- self.mkdir(*arguments)
123
+ def self.clear_path(*arguments, mode: nil)
124
+ self.rm(*arguments)
125
+ self.mkdir(*arguments, mode: mode)
105
126
  end
106
127
 
107
128
  def self.arch_suffix
@@ -111,8 +132,8 @@ module DockerCore
111
132
 
112
133
  # @param [String] repository
113
134
  def self.github_latest_version(repository)
114
- body = Net::HTTP.get(URI("https://api.github.com/repos/#{repository}/releases/latest"))
115
- return JSON.parse(body)['tag_name']
135
+ uri = URI("https://api.github.com/repos/#{repository}/releases/latest")
136
+ return JSON.parse(Net::HTTP.get(uri))['tag_name']
116
137
  end
117
138
 
118
139
  # @param [String] uri
@@ -128,8 +149,9 @@ module DockerCore
128
149
 
129
150
  if 0 == max_redirect
130
151
  raise('maximum redirect reached')
131
- else return self.uri_resolve(response['location'], max_redirect)
132
152
  end
153
+
154
+ return self.uri_resolve(response['location'], max_redirect)
133
155
  end
134
156
 
135
157
  # @param [String] uri
@@ -140,53 +162,90 @@ module DockerCore
140
162
  return File.binwrite(file, content)
141
163
  end
142
164
 
143
- # @param [String] file
144
165
  # @param [String] path
145
- def self.ungzip(file, path)
146
- longlink = '././@LongLink'
166
+ # @param [Boolean] verbose
167
+ def self.untar(io, path, verbose: false)
168
+ # @type [Gem::Package::TarReader] reader
169
+ Gem::Package::TarReader.new(io) do |reader|
170
+ reader.rewind
171
+ reader.each do |entry|
172
+ # @type [Gem::Package::TarHeader] header
173
+ header = entry.header
174
+ mode = header.mode
175
+ file = File.join(path, entry.full_name)
147
176
 
148
- # @type [Gem::Package::TarReader] tar
149
- Gem::Package::TarReader.new(Zlib::GzipReader.open(file)) do |tar|
150
- target = nil
151
- tar.rewind
177
+ if verbose
178
+ self.echo(": #{file}")
179
+ end
152
180
 
153
- tar.each do |entry|
154
- name = entry.full_name
181
+ if entry.directory?
182
+ self.mkdir(file, mode: mode)
183
+ next
184
+ end
155
185
 
156
- if name == longlink
157
- target = File.join(path, "#{entry.read}".strip)
186
+ if entry.file?
187
+ self.mkdir(File.dirname(file))
188
+ File.binwrite(file, entry.read)
189
+ self.chmod(mode, file)
158
190
  next
159
191
  end
192
+ end
193
+ end
194
+ end
160
195
 
161
- target ||= File.join(path, name)
196
+ # @param [String] file
197
+ # @param [String] path
198
+ # @param [Boolean] verbose
199
+ def self.ungzip(file, path, verbose: false)
200
+ # @type [Zlib::GzipReader] reader
201
+ Zlib::GzipReader.open(file) do |reader|
202
+ self.untar(reader, path, verbose: verbose)
203
+ end
204
+ end
162
205
 
163
- # @type [Gem::Package::TarHeader] header
164
- header = entry.header
165
- typeflag = header.typeflag
166
- end_slash = name.end_with?('/')
206
+ # @param [String] path
207
+ # @param [Boolean] verbose
208
+ def self.tar(path, verbose: false)
209
+ io = StringIO.new('')
210
+ offset = path.size + 1
211
+
212
+ # @type [Gem::Package::TarWriter] writer
213
+ Gem::Package::TarWriter.new(io) do |writer|
214
+ # @type [String] file
215
+ self.path(File.join(path, '**/*')).each do |name|
216
+ mode = File.stat(name).mode
217
+ file = name.slice(offset ..)
218
+
219
+ if verbose
220
+ self.echo(": #{file}")
221
+ end
167
222
 
168
- if entry.directory? || ('' == typeflag && end_slash)
169
- if File.file?(target)
170
- File.delete(target)
171
- end
223
+ if File.directory?(name)
224
+ writer.mkdir(file, mode)
225
+ next
226
+ end
172
227
 
173
- FileUtils.mkdir_p(target, header.mode)
174
- elsif entry.file? || ('' == typeflag && !end_slash)
175
- if File.directory?(target)
176
- FileUtils.rm_rf(target)
228
+ if File.file?(name)
229
+ writer.add_file(file, mode) do |stream|
230
+ stream.write(File.binread(name))
177
231
  end
178
-
179
- FileUtils.mkdir_p(File.dirname(target))
180
- File.binwrite(target, entry.read)
181
- FileUtils.chmod(header.mode, target)
182
- elsif '2' == typeflag #Symlink!
183
- File.symlink(header.linkname, target)
184
- else raise("Unkown tar entry: #{name} type: #{typeflag}.")
232
+ next
185
233
  end
186
-
187
- target = nil
188
234
  end
189
235
  end
236
+
237
+ io.rewind
238
+ return io.string
239
+ end
240
+
241
+ # @param [String] file
242
+ # @param [String] path
243
+ # @param [Boolean] verbose
244
+ def self.gzip(file, path, verbose: false)
245
+ # @type [Zlib::GzipWriter] writer
246
+ Zlib::GzipWriter.open(file, Zlib::BEST_COMPRESSION) do |writer|
247
+ writer.write(self.tar(path, verbose: verbose))
248
+ end
190
249
  end
191
250
 
192
251
  end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - agrozyme
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-05 00:00:00.000000000 Z
11
+ date: 2021-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fileutils
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: zlib
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description:
@@ -60,7 +60,8 @@ extra_rdoc_files: []
60
60
  files:
61
61
  - lib/docker_core.rb
62
62
  homepage: https://gitlab.com/agrozyme-package/ruby/docker_core
63
- licenses: []
63
+ licenses:
64
+ - Ruby
64
65
  metadata: {}
65
66
  post_install_message:
66
67
  rdoc_options: []