docker_core 0.0.3 → 0.0.8

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 -5
  3. metadata +33 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 23920bae7b894844cc279a3ef67e29f30ccbdb63abd2c7c357b9d4489afc478f
4
- data.tar.gz: 756fb6475c66e40428cbb1d197a3881dd94d90d6b00bc8f0453022ea334fbaaa
3
+ metadata.gz: 417a44472031d3acce9a599d7cd6873deced890dcdbc3ea5993d935d8e74f874
4
+ data.tar.gz: 2914b35b4ee999f8fd8e677a55125ebfa07f835da3dc957c8204cb9f09c7810f
5
5
  SHA512:
6
- metadata.gz: 38bb74b325f9824f2b86abbb51c7ddfc11a53b20111393c928f357456630a84d5081e77623de58a10c75c745711adbf7eba1dcdf7d855ccb7540bcc0b2db2178
7
- data.tar.gz: e134335d05e69127883a4d4f4f9e3f79464e91cf262a222dca1bb385c9e5872aa77dc92d232dc3e8f5260ceb3e1e16f8d130ce53dfdccdaeaea9f1719415e18b
6
+ metadata.gz: 796f1c189d39e0d5e9bcf042325203fc89082522a4d1a73b13355ea4dbd7ae9166a1c7a78c59d41ca657a2548c02fb5057ef0c4fd055a5594cc0ce0d86aacbec
7
+ data.tar.gz: ef6b8b6ea7072330800830db4d84e1ade2b49ac76f0ec2c46d5354156fe738872826d1a963b9f32a9d40ddcd27728c9ba2fe6a04da8648c52def7be867e59716
data/lib/docker_core.rb CHANGED
@@ -1,7 +1,12 @@
1
- require 'fileutils'
1
+ require('fileutils')
2
+ require('net/http')
3
+ require('json')
4
+ require('zlib')
5
+ require('rubygems/package')
2
6
 
3
7
  module DockerCore
4
8
  COLOR_CODE = { error: 31, info: 32, warn: 33 }
9
+ ARCH_SUFFIX = { x86: '386', x86_64: 'amd64', armhf: 'armv6', aarch64: 'arm64' }
5
10
 
6
11
  # @param [String] text
7
12
  # @param [Integer] code
@@ -23,9 +28,9 @@ module DockerCore
23
28
  # @param [Array] argumets
24
29
  def self.execute(title, run, *argumets)
25
30
  code = self::COLOR_CODE[:warn]
26
- self.echo(">> #{title}", code)
31
+ self.echo("> #{title}", code)
27
32
  run.call(*argumets)
28
- self.echo("<< #{title}", code)
33
+ self.echo("< #{title}", code)
29
34
  end
30
35
 
31
36
  # @param [String] command
@@ -56,11 +61,132 @@ module DockerCore
56
61
  self.run("adduser --system --disabled-password --no-create-home --ingroup=core --gecos=core --shell=/bin/bash --uid=#{uid} core")
57
62
  end
58
63
 
59
- # @param [Array] arguments
64
+ # @param [Array<String>] arguments
65
+ def self.chown(*arguments)
66
+ arguments.each do |list|
67
+ FileUtils.chown_R('core', 'core', list)
68
+ end
69
+ return
70
+ end
71
+
72
+ # @param [Array<String>] arguments
60
73
  def self.mkdir(*arguments)
61
74
  arguments.each do |list|
62
75
  FileUtils.mkdir_p(list)
63
- FileUtils.chown_R('core', 'core', list)
64
76
  end
77
+ self.chown(*arguments)
65
78
  end
79
+
80
+ # @param [String] value
81
+ def self.to_boolean(value)
82
+ return %w[true yes on].include?(value.strip.downcase)
83
+ end
84
+
85
+ # @param [String] stdout
86
+ # @param [String] stderr
87
+ def self.link_log(stdout = '', stderr = '')
88
+ if '' != stdout
89
+ File.symlink('/dev/stdout', stdout)
90
+ end
91
+
92
+ if '' != stderr
93
+ File.symlink('/dev/stderr', stderr)
94
+ end
95
+ return
96
+ end
97
+
98
+ # @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)
105
+ end
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
+
66
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.3
4
+ version: 0.0.8
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
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
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
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'
27
55
  description:
28
56
  email:
29
57
  executables: []
@@ -31,7 +59,7 @@ extensions: []
31
59
  extra_rdoc_files: []
32
60
  files:
33
61
  - lib/docker_core.rb
34
- homepage:
62
+ homepage: https://gitlab.com/agrozyme-package/ruby/docker_core
35
63
  licenses: []
36
64
  metadata: {}
37
65
  post_install_message:
@@ -42,14 +70,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
42
70
  requirements:
43
71
  - - ">="
44
72
  - !ruby/object:Gem::Version
45
- version: '0'
73
+ version: 2.5.0
46
74
  required_rubygems_version: !ruby/object:Gem::Requirement
47
75
  requirements:
48
76
  - - ">="
49
77
  - !ruby/object:Gem::Version
50
78
  version: '0'
51
79
  requirements: []
52
- rubygems_version: 3.2.15
80
+ rubygems_version: 3.1.6
53
81
  signing_key:
54
82
  specification_version: 4
55
83
  summary: some functions for docker build / run