docker_core 0.0.9 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docker_core.rb +131 -72
  3. metadata +16 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f70d7fa0c2f973490e37183f8b2af082d3ae23c01182982030806442da8b057
4
- data.tar.gz: 2d079bfee65ce10d1d73fab1565841aa6f46337891a0057c6af1dbcc1e9978f7
3
+ metadata.gz: 5ec6404e35be53e394d3ec7d1b46f01a3f657b753502b78a2614207e393bfc7b
4
+ data.tar.gz: 73ba6004a05843c13882bec32dc3d959e53f0f740f04cd49a51994c5a8154574
5
5
  SHA512:
6
- metadata.gz: 6d3326c261ce7ebb72226eba403c5e46a1d1a500eda84c530a368c868758717763ed51d1744b3f8cb6b03dd1321105d5fa2296b2c0ef2851d0b59afcbe0c0ed3
7
- data.tar.gz: 38fd0d39ac645253844533f1f80c2a95c82efaa8822e0d9a3d88a6b539b2f7eb2809311b292cf9c37fa661beed9edd4d4ce6b004291c8483ddad237b33cac939
6
+ metadata.gz: 42065ac773e44fc3133149faabf835a339e4f71640db12d696b6f2ed57356cd77ffa3d73db2b3a4c41fea3ca46a59d3e1251990567bea9cefd061d7342163b20
7
+ data.tar.gz: f64554684ae49cfd29ac58c345a12f291d3b467e1596d6ef9bb74b766a2bb00a18b180ecdc201dcff60872d57632e823fa52d32686b890b0269910728a08cfe1
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, mode: 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,57 +1,57 @@
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.13
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
- version: '0'
19
+ version: '1'
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
- version: '0'
26
+ version: '1'
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
- version: '0'
33
+ version: '2'
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
- version: '0'
40
+ version: '2'
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
- version: '0'
47
+ version: '1'
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
- version: '0'
54
+ version: '1'
55
55
  description:
56
56
  email:
57
57
  executables: []
@@ -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: []