docker_core 0.0.6 → 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 +160 -29
  3. metadata +18 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 371e1413099d4658b296b5714e83e06812fe15afaf01cbbe7d01f5ed24268a21
4
- data.tar.gz: afc6b37af0efa2efcba144acd5da64e8cdb2713e9b35c915103c5de73fa54793
3
+ metadata.gz: ad11481b8c2d460b9685c4022b1805220b64bf1db62bbf7faca9a0733d568169
4
+ data.tar.gz: aa21c991bfa072b42b378b7f569bbd55f54b7bd98b10b73a8b01a56a765bd8bd
5
5
  SHA512:
6
- metadata.gz: dfb32fd0c0f6893dc79cbb37ad8b644d112d032a2183def70b903418346399369be0f1169ed4cb646bf1807f55f6fdadf6a4850916dd7cb3940977e21a0258c0
7
- data.tar.gz: fdc17291808d10147b1b67aabd1ae202b12174fdb02bc661585e12cf9e8972a5a78be678e0c2393c97e9fa7ae4a44a470a2d14f6dc1ce3ef878f877807d82a27
6
+ metadata.gz: c6b657275d527d98b636106b41f524ecf380743d525089affc0369240c6c93f243e0f9b646efea7195462c030e7f1813153b8a23a9e7551364b77ec5004eaf5e
7
+ data.tar.gz: 67897ef4a150344583d759fc9a89d333cf414c65496bd13cffaa2a6be3ccd644ed9fa3f0850cf0bc8b4646ed0643d6633df02bedc51c9e8ebafa4038bef27909
data/lib/docker_core.rb CHANGED
@@ -1,8 +1,12 @@
1
1
  require('fileutils')
2
- require('open-uri')
2
+ require('json')
3
+ require('net/http')
4
+ require('rubygems/package')
5
+ require('zlib')
3
6
 
4
7
  module DockerCore
5
8
  COLOR_CODE = { error: 31, info: 32, warn: 33 }
9
+ ARCH_SUFFIX = { x86: '386', x86_64: 'amd64', armhf: 'armv6', aarch64: 'arm64' }
6
10
 
7
11
  # @param [String] text
8
12
  # @param [Integer] code
@@ -15,7 +19,7 @@ module DockerCore
15
19
 
16
20
  # @param [String] text
17
21
  # @param [Integer] code
18
- def self.echo(text, code = self::COLOR_CODE[:info])
22
+ def self.echo(text, code: self::COLOR_CODE[:info])
19
23
  puts(self.color(text, code))
20
24
  end
21
25
 
@@ -24,16 +28,16 @@ module DockerCore
24
28
  # @param [Array] argumets
25
29
  def self.execute(title, run, *argumets)
26
30
  code = self::COLOR_CODE[:warn]
27
- self.echo("> #{title}", code)
31
+ self.echo("> #{title}", code: code)
28
32
  run.call(*argumets)
29
- self.echo("< #{title}", code)
33
+ self.echo("< #{title}", code: code)
30
34
  end
31
35
 
32
36
  # @param [String] command
33
- # @param [Boolean] echo
37
+ # @param [Boolean] verbose
34
38
  # @param [Boolean] throw
35
- def self.run(command, echo = true, throw = true)
36
- if echo
39
+ def self.run(command, verbose: true, throw: true)
40
+ if verbose
37
41
  self.echo("+ #{command}")
38
42
  end
39
43
 
@@ -48,62 +52,189 @@ module DockerCore
48
52
 
49
53
  # @param [Integer] uid
50
54
  # @param [Integer] gid
51
- def self.update_user(uid = 500, gid = 500)
55
+ def self.update_user(uid: 500, gid: 500)
52
56
  uid = ENV.fetch('DOCKER_CORE_UID', uid)
53
57
  gid = ENV.fetch('DOCKER_CORE_GID', gid)
54
- self.run('deluser core')
55
- self.run('delgroup core')
58
+ self.run('deluser core', throw: false)
59
+ self.run('delgroup core', throw: false)
56
60
  self.run("addgroup --system --gid=#{gid} core")
57
61
  self.run("adduser --system --disabled-password --no-create-home --ingroup=core --gecos=core --shell=/bin/bash --uid=#{uid} core")
58
62
  end
59
63
 
64
+ # @param [Array<String>] arguments
65
+ def self.path(*arguments)
66
+ return Dir[*arguments].map { |item| File.path(item) }.uniq
67
+ end
68
+
60
69
  # @param [Array<String>] arguments
61
70
  def self.chown(*arguments)
62
- arguments.each do |list|
63
- FileUtils.chown_R('core', 'core', list)
71
+ self.path(*arguments).each do |path|
72
+ FileUtils.chown_R('core', 'core', path, force: true)
73
+ end
74
+ end
75
+
76
+ # @param [Array<String>] arguments
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)
64
84
  end
65
- return
66
85
  end
67
86
 
68
87
  # @param [Array<String>] arguments
69
- def self.mkdir(*arguments)
70
- arguments.each do |list|
71
- FileUtils.mkdir_p(list)
88
+ def self.rm(*arguments)
89
+ self.path(*arguments).each do |path|
90
+ FileUtils.rm_rf(path)
72
91
  end
73
- self.chown(*arguments)
74
92
  end
75
93
 
76
94
  # @param [String] value
77
95
  def self.to_boolean(value)
78
- return %w[true yes on].include?(value.strip.downcase)
96
+ return %w[true yes on].include?("#{value}".strip.downcase)
79
97
  end
80
98
 
81
99
  # @param [String] stdout
82
100
  # @param [String] stderr
83
- def self.link_log(stdout = '', stderr = '')
101
+ def self.link_log(stdout: '', stderr: '')
84
102
  if '' != stdout
85
- File.symlink('/dev/stdout', stdout)
103
+ File.symlink('/dev/stdout', File.path(stdout))
86
104
  end
87
105
 
88
106
  if '' != stderr
89
- File.symlink('/dev/stderr', stderr)
107
+ File.symlink('/dev/stderr', File.path(stderr))
90
108
  end
91
- return
109
+ end
110
+
111
+ # @param [Array<String>] arguments
112
+ def self.clear_path(*arguments, mode: nil)
113
+ self.rm(*arguments)
114
+ self.mkdir(*arguments, mode: mode)
115
+ end
116
+
117
+ def self.arch_suffix
118
+ arch = "#{`apk --print-arch`}".strip
119
+ return ARCH_SUFFIX.fetch(arch.to_sym, arch)
120
+ end
121
+
122
+ # @param [String] repository
123
+ def self.github_latest_version(repository)
124
+ uri = URI("https://api.github.com/repos/#{repository}/releases/latest")
125
+ return JSON.parse(Net::HTTP.get(uri))['tag_name']
126
+ end
127
+
128
+ # @param [String] uri
129
+ # @param [Integer] max_redirect
130
+ def self.uri_resolve(uri, max_redirect = 10)
131
+ response = Net::HTTP.get_response(URI.parse(uri))
132
+
133
+ if false == response.is_a?(Net::HTTPRedirection)
134
+ return uri
135
+ end
136
+
137
+ max_redirect = max_redirect - 1
138
+
139
+ if 0 == max_redirect
140
+ raise('maximum redirect reached')
141
+ end
142
+
143
+ return self.uri_resolve(response['location'], max_redirect)
92
144
  end
93
145
 
94
146
  # @param [String] uri
95
147
  # @param [String] file
96
- def self.download(uri, file)
97
- IO.copy_stream(URI.open(uri), file)
148
+ def self.download_file(uri, file)
149
+ uri = self.uri_resolve(uri)
150
+ content = Net::HTTP.get(URI(uri))
151
+ return File.binwrite(file, content)
98
152
  end
99
153
 
100
- # @param [Array<String>] arguments
101
- def self.clear_path(*arguments)
102
- arguments.each do |list|
103
- FileUtils.rm_rf(list)
154
+ # @param [String] path
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)
165
+
166
+ if verbose
167
+ self.echo(": #{file}")
168
+ end
169
+
170
+ if entry.directory?
171
+ self.mkdir(file, mode: mode)
172
+ next
173
+ end
174
+
175
+ if entry.file?
176
+ self.mkdir(File.dirname(file))
177
+ File.binwrite(file, entry.read)
178
+ FileUtils.chmod(mode, file)
179
+ next
180
+ end
181
+ end
104
182
  end
183
+ end
105
184
 
106
- self.mkdir(*arguments)
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
194
+
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
211
+
212
+ if File.directory?(name)
213
+ writer.mkdir(file, mode)
214
+ next
215
+ end
216
+
217
+ if File.file?(name)
218
+ writer.add_file(file, mode) do |stream|
219
+ stream.write(File.binread(name))
220
+ end
221
+ next
222
+ end
223
+ end
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
107
238
  end
108
239
 
109
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.6
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-01 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
@@ -25,7 +25,21 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: open-uri
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: zlib
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
@@ -63,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
77
  - !ruby/object:Gem::Version
64
78
  version: '0'
65
79
  requirements: []
66
- rubygems_version: 3.2.15
80
+ rubygems_version: 3.1.6
67
81
  signing_key:
68
82
  specification_version: 4
69
83
  summary: some functions for docker build / run