docker_core 0.0.7 → 0.0.11

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 +121 -72
  3. metadata +2 -30
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18a1b927ec2c709078daec960fad7bd08f003333be2e76f7367c33aa24511c23
4
- data.tar.gz: a9020d2876c4bf326e40cdee982f88e658a870b5f2f0472e74820d1ed74c1f3d
3
+ metadata.gz: 07652f554831c30520e7d9d2c0c5b596d86bc59a9c6f036135aa01dc7827efb6
4
+ data.tar.gz: c959b71d67090e58b04ae12339820d02d9cb25423ef9dbab3f8fc5fb9edb3901
5
5
  SHA512:
6
- metadata.gz: e0c4455fea8ace38ffd9bd7843143cafd6d9e8c48de8e3e61d04ea75ecd035142ecb68f09dd4f1fe4c0ea5ecc8fb1ffd64396f69734b5fe24160cafed3cfacc6
7
- data.tar.gz: '02852c9ea649dce1b521d927fd28f2e31438646955b6d88e81e6fc1fe89b2f931c00dcf329ea9b36226ddf1aeed367a7e8122d70524ca81e90901638bd541bc5'
6
+ metadata.gz: 72d58e8f2681e6b627910ddc3851c3edd5df5e181f999b68b2f6ae1d6bc4b8403a6f2eebc2339bdbbf346bb5b82ecfcd872a141e9fb9dfbb8c30235e7f22bbdc
7
+ data.tar.gz: ba790d7e31586ef043a04c287d4517f1bce071a26518748d1d75623f7e3ef56b55f82ecc8803367a32237ac42b88ee4989f28196a72f0c3eedb46b37c124a207
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,91 @@ 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[*arguments].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
+ self.path(*arguments).each do |path|
80
+ if File.exist?(path) && false == File.directory?(path)
81
+ File.delete(path)
82
+ end
83
+
84
+ FileUtils.mkdir_p(path, mode: mode)
85
+ end
86
+ end
87
+
88
+ # @param [Array<String>] arguments
89
+ def self.rm(*arguments)
90
+ self.path(*arguments).each do |path|
91
+ FileUtils.rm_rf(path)
76
92
  end
77
- self.chown(*arguments)
78
93
  end
79
94
 
80
95
  # @param [String] value
81
96
  def self.to_boolean(value)
82
- return %w[true yes on].include?(value.strip.downcase)
97
+ return %w[true yes on].include?("#{value}".strip.downcase)
83
98
  end
84
99
 
85
100
  # @param [String] stdout
86
101
  # @param [String] stderr
87
- def self.link_log(stdout = '', stderr = '')
102
+ def self.link_log(stdout: '', stderr: '')
88
103
  if '' != stdout
89
- File.symlink('/dev/stdout', stdout)
104
+ File.symlink('/dev/stdout', File.path(stdout))
90
105
  end
91
106
 
92
107
  if '' != stderr
93
- File.symlink('/dev/stderr', stderr)
108
+ File.symlink('/dev/stderr', File.path(stderr))
94
109
  end
95
- return
96
110
  end
97
111
 
98
112
  # @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)
113
+ def self.clear_path(*arguments, mode: nil)
114
+ self.rm(*arguments)
115
+ self.mkdir(*arguments, mode: mode)
105
116
  end
106
117
 
107
118
  def self.arch_suffix
@@ -111,8 +122,8 @@ module DockerCore
111
122
 
112
123
  # @param [String] repository
113
124
  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']
125
+ uri = URI("https://api.github.com/repos/#{repository}/releases/latest")
126
+ return JSON.parse(Net::HTTP.get(uri))['tag_name']
116
127
  end
117
128
 
118
129
  # @param [String] uri
@@ -128,8 +139,9 @@ module DockerCore
128
139
 
129
140
  if 0 == max_redirect
130
141
  raise('maximum redirect reached')
131
- else return self.uri_resolve(response['location'], max_redirect)
132
142
  end
143
+
144
+ return self.uri_resolve(response['location'], max_redirect)
133
145
  end
134
146
 
135
147
  # @param [String] uri
@@ -140,53 +152,90 @@ module DockerCore
140
152
  return File.binwrite(file, content)
141
153
  end
142
154
 
143
- # @param [String] file
144
155
  # @param [String] path
145
- def self.ungzip(file, path)
146
- longlink = '././@LongLink'
156
+ # @param [Boolean] verbose
157
+ def self.untar(io, path, verbose: false)
158
+ # @type [Gem::Package::TarReader] reader
159
+ Gem::Package::TarReader.new(io) do |reader|
160
+ reader.rewind
161
+ reader.each do |entry|
162
+ # @type [Gem::Package::TarHeader] header
163
+ header = entry.header
164
+ mode = header.mode
165
+ file = File.join(path, entry.full_name)
147
166
 
148
- # @type [Gem::Package::TarReader] tar
149
- Gem::Package::TarReader.new(Zlib::GzipReader.open(file)) do |tar|
150
- target = nil
151
- tar.rewind
167
+ if verbose
168
+ self.echo(": #{file}")
169
+ end
152
170
 
153
- tar.each do |entry|
154
- name = entry.full_name
171
+ if entry.directory?
172
+ self.mkdir(file, mode: mode)
173
+ next
174
+ end
155
175
 
156
- if name == longlink
157
- target = File.join(path, "#{entry.read}".strip)
176
+ if entry.file?
177
+ self.mkdir(File.dirname(file))
178
+ File.binwrite(file, entry.read)
179
+ FileUtils.chmod(mode, file)
158
180
  next
159
181
  end
182
+ end
183
+ end
184
+ end
160
185
 
161
- target ||= File.join(path, name)
186
+ # @param [String] file
187
+ # @param [String] path
188
+ # @param [Boolean] verbose
189
+ def self.ungzip(file, path, verbose: false)
190
+ # @type [Zlib::GzipReader] reader
191
+ Zlib::GzipReader.open(file) do |reader|
192
+ self.untar(reader, path, verbose: verbose)
193
+ end
194
+ end
162
195
 
163
- # @type [Gem::Package::TarHeader] header
164
- header = entry.header
165
- typeflag = header.typeflag
166
- end_slash = name.end_with?('/')
196
+ # @param [String] path
197
+ # @param [Boolean] verbose
198
+ def self.tar(path, verbose: false)
199
+ io = StringIO.new('')
200
+ offset = path.size + 1
201
+
202
+ # @type [Gem::Package::TarWriter] writer
203
+ Gem::Package::TarWriter.new(io) do |writer|
204
+ # @type [String] file
205
+ Dir[File.join(path, '**/*')].each do |name|
206
+ mode = File.stat(name).mode
207
+ file = name.slice(offset ..)
208
+
209
+ if verbose
210
+ self.echo(": #{file}")
211
+ end
167
212
 
168
- if entry.directory? || ('' == typeflag && end_slash)
169
- if File.file?(target)
170
- File.delete(target)
171
- end
213
+ if File.directory?(name)
214
+ writer.mkdir(file, mode)
215
+ next
216
+ end
172
217
 
173
- FileUtils.mkdir_p(target, header.mode)
174
- elsif entry.file? || ('' == typeflag && !end_slash)
175
- if File.directory?(target)
176
- FileUtils.rm_rf(target)
218
+ if File.file?(name)
219
+ writer.add_file(file, mode) do |stream|
220
+ stream.write(File.binread(name))
177
221
  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}.")
222
+ next
185
223
  end
186
-
187
- target = nil
188
224
  end
189
225
  end
226
+
227
+ io.rewind
228
+ return io.string
229
+ end
230
+
231
+ # @param [String] file
232
+ # @param [String] path
233
+ # @param [Boolean] verbose
234
+ def self.gzip(file, path, verbose: false)
235
+ # @type [Zlib::GzipWriter] writer
236
+ Zlib::GzipWriter.open(file, Zlib::BEST_COMPRESSION) do |writer|
237
+ writer.write(self.tar(path, verbose: verbose))
238
+ end
190
239
  end
191
240
 
192
241
  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.7
4
+ version: 0.0.11
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
@@ -38,34 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: net/http
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rubygems/package
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: zlib
71
43
  requirement: !ruby/object:Gem::Requirement