docker_core 0.0.9 → 0.0.10

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 +113 -65
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f70d7fa0c2f973490e37183f8b2af082d3ae23c01182982030806442da8b057
4
- data.tar.gz: 2d079bfee65ce10d1d73fab1565841aa6f46337891a0057c6af1dbcc1e9978f7
3
+ metadata.gz: ad11481b8c2d460b9685c4022b1805220b64bf1db62bbf7faca9a0733d568169
4
+ data.tar.gz: aa21c991bfa072b42b378b7f569bbd55f54b7bd98b10b73a8b01a56a765bd8bd
5
5
  SHA512:
6
- metadata.gz: 6d3326c261ce7ebb72226eba403c5e46a1d1a500eda84c530a368c868758717763ed51d1744b3f8cb6b03dd1321105d5fa2296b2c0ef2851d0b59afcbe0c0ed3
7
- data.tar.gz: 38fd0d39ac645253844533f1f80c2a95c82efaa8822e0d9a3d88a6b539b2f7eb2809311b292cf9c37fa661beed9edd4d4ce6b004291c8483ddad237b33cac939
6
+ metadata.gz: c6b657275d527d98b636106b41f524ecf380743d525089affc0369240c6c93f243e0f9b646efea7195462c030e7f1813153b8a23a9e7551364b77ec5004eaf5e
7
+ data.tar.gz: 67897ef4a150344583d759fc9a89d333cf414c65496bd13cffaa2a6be3ccd644ed9fa3f0850cf0bc8b4646ed0643d6633df02bedc51c9e8ebafa4038bef27909
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,16 +28,16 @@ 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
37
+ # @param [Boolean] verbose
38
38
  # @param [Boolean] throw
39
- def self.run(command, echo = true, throw = true)
40
- if echo
39
+ def self.run(command, verbose: true, throw: true)
40
+ if verbose
41
41
  self.echo("+ #{command}")
42
42
  end
43
43
 
@@ -52,56 +52,66 @@ module DockerCore
52
52
 
53
53
  # @param [Integer] uid
54
54
  # @param [Integer] gid
55
- def self.update_user(uid = 500, gid = 500)
55
+ def self.update_user(uid: 500, gid: 500)
56
56
  uid = ENV.fetch('DOCKER_CORE_UID', uid)
57
57
  gid = ENV.fetch('DOCKER_CORE_GID', gid)
58
- self.run('deluser core')
59
- self.run('delgroup core')
58
+ self.run('deluser core', throw: false)
59
+ self.run('delgroup core', throw: false)
60
60
  self.run("addgroup --system --gid=#{gid} core")
61
61
  self.run("adduser --system --disabled-password --no-create-home --ingroup=core --gecos=core --shell=/bin/bash --uid=#{uid} core")
62
62
  end
63
63
 
64
+ # @param [Array<String>] arguments
65
+ def self.path(*arguments)
66
+ return Dir[*arguments].map { |item| File.path(item) }.uniq
67
+ end
68
+
64
69
  # @param [Array<String>] arguments
65
70
  def self.chown(*arguments)
66
- arguments.each do |list|
67
- FileUtils.chown_R('core', 'core', list)
71
+ self.path(*arguments).each do |path|
72
+ FileUtils.chown_R('core', 'core', path, force: true)
68
73
  end
69
- return
70
74
  end
71
75
 
72
76
  # @param [Array<String>] arguments
73
- def self.mkdir(*arguments)
74
- arguments.each do |list|
75
- FileUtils.mkdir_p(list)
77
+ def self.mkdir(*arguments, mode: nil)
78
+ self.path(*arguments).each do |path|
79
+ if File.exist?(path) && false == File.directory?(path)
80
+ File.delete(path)
81
+ end
82
+
83
+ FileUtils.mkdir_p(path, mode: mode)
84
+ end
85
+ end
86
+
87
+ # @param [Array<String>] arguments
88
+ def self.rm(*arguments)
89
+ self.path(*arguments).each do |path|
90
+ FileUtils.rm_rf(path)
76
91
  end
77
- self.chown(*arguments)
78
92
  end
79
93
 
80
94
  # @param [String] value
81
95
  def self.to_boolean(value)
82
- return %w[true yes on].include?(value.strip.downcase)
96
+ return %w[true yes on].include?("#{value}".strip.downcase)
83
97
  end
84
98
 
85
99
  # @param [String] stdout
86
100
  # @param [String] stderr
87
- def self.link_log(stdout = '', stderr = '')
101
+ def self.link_log(stdout: '', stderr: '')
88
102
  if '' != stdout
89
- File.symlink('/dev/stdout', stdout)
103
+ File.symlink('/dev/stdout', File.path(stdout))
90
104
  end
91
105
 
92
106
  if '' != stderr
93
- File.symlink('/dev/stderr', stderr)
107
+ File.symlink('/dev/stderr', File.path(stderr))
94
108
  end
95
- return
96
109
  end
97
110
 
98
111
  # @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)
112
+ def self.clear_path(*arguments, mode: nil)
113
+ self.rm(*arguments)
114
+ self.mkdir(*arguments, mode: mode)
105
115
  end
106
116
 
107
117
  def self.arch_suffix
@@ -111,8 +121,8 @@ module DockerCore
111
121
 
112
122
  # @param [String] repository
113
123
  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']
124
+ uri = URI("https://api.github.com/repos/#{repository}/releases/latest")
125
+ return JSON.parse(Net::HTTP.get(uri))['tag_name']
116
126
  end
117
127
 
118
128
  # @param [String] uri
@@ -128,8 +138,9 @@ module DockerCore
128
138
 
129
139
  if 0 == max_redirect
130
140
  raise('maximum redirect reached')
131
- else return self.uri_resolve(response['location'], max_redirect)
132
141
  end
142
+
143
+ return self.uri_resolve(response['location'], max_redirect)
133
144
  end
134
145
 
135
146
  # @param [String] uri
@@ -140,53 +151,90 @@ module DockerCore
140
151
  return File.binwrite(file, content)
141
152
  end
142
153
 
143
- # @param [String] file
144
154
  # @param [String] path
145
- def self.ungzip(file, path)
146
- longlink = '././@LongLink'
155
+ # @param [Boolean] verbose
156
+ def self.untar(io, path, verbose: false)
157
+ # @type [Gem::Package::TarReader] reader
158
+ Gem::Package::TarReader.new(io) do |reader|
159
+ reader.rewind
160
+ reader.each do |entry|
161
+ # @type [Gem::Package::TarHeader] header
162
+ header = entry.header
163
+ mode = header.mode
164
+ file = File.join(path, entry.full_name)
147
165
 
148
- # @type [Gem::Package::TarReader] tar
149
- Gem::Package::TarReader.new(Zlib::GzipReader.open(file)) do |tar|
150
- target = nil
151
- tar.rewind
166
+ if verbose
167
+ self.echo(": #{file}")
168
+ end
152
169
 
153
- tar.each do |entry|
154
- name = entry.full_name
170
+ if entry.directory?
171
+ self.mkdir(file, mode: mode)
172
+ next
173
+ end
155
174
 
156
- if name == longlink
157
- target = File.join(path, "#{entry.read}".strip)
175
+ if entry.file?
176
+ self.mkdir(File.dirname(file))
177
+ File.binwrite(file, entry.read)
178
+ FileUtils.chmod(mode, file)
158
179
  next
159
180
  end
181
+ end
182
+ end
183
+ end
160
184
 
161
- target ||= File.join(path, name)
185
+ # @param [String] file
186
+ # @param [String] path
187
+ # @param [Boolean] verbose
188
+ def self.ungzip(file, path, verbose: false)
189
+ # @type [Zlib::GzipReader] reader
190
+ Zlib::GzipReader.open(file) do |reader|
191
+ self.untar(reader, path, verbose: verbose)
192
+ end
193
+ end
162
194
 
163
- # @type [Gem::Package::TarHeader] header
164
- header = entry.header
165
- typeflag = header.typeflag
166
- end_slash = name.end_with?('/')
195
+ # @param [String] path
196
+ # @param [Boolean] verbose
197
+ def self.tar(path, verbose: false)
198
+ io = StringIO.new('')
199
+ offset = path.size + 1
200
+
201
+ # @type [Gem::Package::TarWriter] writer
202
+ Gem::Package::TarWriter.new(io) do |writer|
203
+ # @type [String] file
204
+ Dir[File.join(path, '**/*')].each do |name|
205
+ mode = File.stat(name).mode
206
+ file = name.slice(offset ..)
207
+
208
+ if verbose
209
+ self.echo(": #{file}")
210
+ end
167
211
 
168
- if entry.directory? || ('' == typeflag && end_slash)
169
- if File.file?(target)
170
- File.delete(target)
171
- end
212
+ if File.directory?(name)
213
+ writer.mkdir(file, mode)
214
+ next
215
+ end
172
216
 
173
- FileUtils.mkdir_p(target, mode: header.mode)
174
- elsif entry.file? || ('' == typeflag && !end_slash)
175
- if File.directory?(target)
176
- FileUtils.rm_rf(target)
217
+ if File.file?(name)
218
+ writer.add_file(file, mode) do |stream|
219
+ stream.write(File.binread(name))
177
220
  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}.")
221
+ next
185
222
  end
186
-
187
- target = nil
188
223
  end
189
224
  end
225
+
226
+ io.rewind
227
+ return io.string
228
+ end
229
+
230
+ # @param [String] file
231
+ # @param [String] path
232
+ # @param [Boolean] verbose
233
+ def self.gzip(file, path, verbose: false)
234
+ # @type [Zlib::GzipWriter] writer
235
+ Zlib::GzipWriter.open(file, Zlib::BEST_COMPRESSION) do |writer|
236
+ writer.write(self.tar(path, verbose: verbose))
237
+ end
190
238
  end
191
239
 
192
240
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
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