docker_core 0.0.6 → 0.0.7

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 +90 -7
  3. metadata +46 -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: 18a1b927ec2c709078daec960fad7bd08f003333be2e76f7367c33aa24511c23
4
+ data.tar.gz: a9020d2876c4bf326e40cdee982f88e658a870b5f2f0472e74820d1ed74c1f3d
5
5
  SHA512:
6
- metadata.gz: dfb32fd0c0f6893dc79cbb37ad8b644d112d032a2183def70b903418346399369be0f1169ed4cb646bf1807f55f6fdadf6a4850916dd7cb3940977e21a0258c0
7
- data.tar.gz: fdc17291808d10147b1b67aabd1ae202b12174fdb02bc661585e12cf9e8972a5a78be678e0c2393c97e9fa7ae4a44a470a2d14f6dc1ce3ef878f877807d82a27
6
+ metadata.gz: e0c4455fea8ace38ffd9bd7843143cafd6d9e8c48de8e3e61d04ea75ecd035142ecb68f09dd4f1fe4c0ea5ecc8fb1ffd64396f69734b5fe24160cafed3cfacc6
7
+ data.tar.gz: '02852c9ea649dce1b521d927fd28f2e31438646955b6d88e81e6fc1fe89b2f931c00dcf329ea9b36226ddf1aeed367a7e8122d70524ca81e90901638bd541bc5'
data/lib/docker_core.rb CHANGED
@@ -1,8 +1,12 @@
1
1
  require('fileutils')
2
- require('open-uri')
2
+ require('net/http')
3
+ require('json')
4
+ require('zlib')
5
+ require('rubygems/package')
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
@@ -91,12 +95,6 @@ module DockerCore
91
95
  return
92
96
  end
93
97
 
94
- # @param [String] uri
95
- # @param [String] file
96
- def self.download(uri, file)
97
- IO.copy_stream(URI.open(uri), file)
98
- end
99
-
100
98
  # @param [Array<String>] arguments
101
99
  def self.clear_path(*arguments)
102
100
  arguments.each do |list|
@@ -106,4 +104,89 @@ module DockerCore
106
104
  self.mkdir(*arguments)
107
105
  end
108
106
 
107
+ def self.arch_suffix
108
+ arch = "#{`apk --print-arch`}".strip
109
+ return ARCH_SUFFIX.fetch(arch.to_sym, arch)
110
+ end
111
+
112
+ # @param [String] repository
113
+ 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']
116
+ end
117
+
118
+ # @param [String] uri
119
+ # @param [Integer] max_redirect
120
+ def self.uri_resolve(uri, max_redirect = 10)
121
+ response = Net::HTTP.get_response(URI.parse(uri))
122
+
123
+ if false == response.is_a?(Net::HTTPRedirection)
124
+ return uri
125
+ end
126
+
127
+ max_redirect = max_redirect - 1
128
+
129
+ if 0 == max_redirect
130
+ raise('maximum redirect reached')
131
+ else return self.uri_resolve(response['location'], max_redirect)
132
+ end
133
+ end
134
+
135
+ # @param [String] uri
136
+ # @param [String] file
137
+ def self.download_file(uri, file)
138
+ uri = self.uri_resolve(uri)
139
+ content = Net::HTTP.get(URI(uri))
140
+ return File.binwrite(file, content)
141
+ end
142
+
143
+ # @param [String] file
144
+ # @param [String] path
145
+ def self.ungzip(file, path)
146
+ longlink = '././@LongLink'
147
+
148
+ # @type [Gem::Package::TarReader] tar
149
+ Gem::Package::TarReader.new(Zlib::GzipReader.open(file)) do |tar|
150
+ target = nil
151
+ tar.rewind
152
+
153
+ tar.each do |entry|
154
+ name = entry.full_name
155
+
156
+ if name == longlink
157
+ target = File.join(path, "#{entry.read}".strip)
158
+ next
159
+ end
160
+
161
+ target ||= File.join(path, name)
162
+
163
+ # @type [Gem::Package::TarHeader] header
164
+ header = entry.header
165
+ typeflag = header.typeflag
166
+ end_slash = name.end_with?('/')
167
+
168
+ if entry.directory? || ('' == typeflag && end_slash)
169
+ if File.file?(target)
170
+ File.delete(target)
171
+ end
172
+
173
+ FileUtils.mkdir_p(target, header.mode)
174
+ elsif entry.file? || ('' == typeflag && !end_slash)
175
+ if File.directory?(target)
176
+ FileUtils.rm_rf(target)
177
+ 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}.")
185
+ end
186
+
187
+ target = nil
188
+ end
189
+ end
190
+ end
191
+
109
192
  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.7
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-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fileutils
@@ -25,7 +25,49 @@ 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: 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
+ - !ruby/object:Gem::Dependency
70
+ name: zlib
29
71
  requirement: !ruby/object:Gem::Requirement
30
72
  requirements:
31
73
  - - ">="
@@ -63,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
105
  - !ruby/object:Gem::Version
64
106
  version: '0'
65
107
  requirements: []
66
- rubygems_version: 3.2.15
108
+ rubygems_version: 3.1.6
67
109
  signing_key:
68
110
  specification_version: 4
69
111
  summary: some functions for docker build / run