docker_core 0.0.6 → 0.0.10

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 +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