rb_sys 0.9.48 → 0.9.50
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/exe/rb-sys-dock +119 -22
- data/lib/rb_sys/cargo_builder/link_flag_converter.rb +14 -2
- data/lib/rb_sys/cargo_builder.rb +2 -0
- data/lib/rb_sys/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b74d52f8db6d2d17f777a1eda0222ea8ad9960475fed697afacdd35f8e7ae79
|
4
|
+
data.tar.gz: fb24cccae1c2a1ae04e1dad6764c7c454e8e87e5f3d1cddbc118fd9d28281447
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6273e7a26eaff960d8e0f95f8d2d3601b70a438ac48969588299336f97fae8a8d80c7be2de4d4b32e8054b048da608f397c32e2b0bc810adec4c05b65b7a967
|
7
|
+
data.tar.gz: 111dc76d283d514786da3661ec73753c6cabf9aaf6e62e14b8b9b27d5e93943c7b1881457adf2058227cb17cfda0ed4066344b87a51c6d2ff42eaa60d3acea41
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/exe/rb-sys-dock
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require "optparse"
|
4
4
|
require "rb_sys/version"
|
5
5
|
require "rb_sys/toolchain_info"
|
6
|
+
require "fileutils"
|
6
7
|
|
7
8
|
options = {
|
8
9
|
version: RbSys::VERSION
|
@@ -18,6 +19,10 @@ def log(level, message, emoji: true, io: $stderr)
|
|
18
19
|
["ℹ️", "\e[1;37m"]
|
19
20
|
when :notice
|
20
21
|
["🐳", "\e[1;34m"]
|
22
|
+
when :trace
|
23
|
+
return unless ENV["LOG_LEVEL"] == "trace"
|
24
|
+
|
25
|
+
["🔍", "\e[1;2m"]
|
21
26
|
else raise "Unknown log level: #{level.inspect}"
|
22
27
|
end
|
23
28
|
|
@@ -27,7 +32,10 @@ def log(level, message, emoji: true, io: $stderr)
|
|
27
32
|
emoji_opt + " "
|
28
33
|
end
|
29
34
|
|
30
|
-
|
35
|
+
# Escape the message for bash shell codes (e.g. \e[1;31m)
|
36
|
+
escaped = message.gsub("\\", "\\\\\\").gsub("\e", "\\e")
|
37
|
+
|
38
|
+
io.puts "#{shellcode}#{emoji_opt}#{escaped}\e[0m"
|
31
39
|
end
|
32
40
|
|
33
41
|
OptionParser.new do |opts|
|
@@ -73,37 +81,126 @@ OptionParser.new do |opts|
|
|
73
81
|
puts opts
|
74
82
|
exit
|
75
83
|
end
|
76
|
-
end.parse!
|
77
84
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
abort "rake-compiler-dock is not installed. Please run `gem install rake-compiler-dock` to use this command."
|
85
|
+
opts.on("-V", "--verbose", "Prints verbose output") do
|
86
|
+
ENV["LOG_LEVEL"] = "trace"
|
87
|
+
ENV["VERBOSE"] = "1"
|
88
|
+
options[:verbose] = true
|
83
89
|
end
|
90
|
+
end.parse!
|
84
91
|
|
85
|
-
|
92
|
+
def determine_cache_dir
|
93
|
+
return ENV["RB_SYS_DOCK_CACHE_DIR"] if ENV["RB_SYS_DOCK_CACHE_DIR"]
|
94
|
+
return File.join(ENV["XDG_CACHE_HOME"], "rb-sys-dock") if ENV["XDG_CACHE_HOME"]
|
86
95
|
|
87
|
-
|
88
|
-
|
89
|
-
args << {sigfw: false}
|
90
|
-
end
|
96
|
+
File.join(ENV["HOME"], ".cache", "rb-sys-dock")
|
97
|
+
end
|
91
98
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
99
|
+
def docker_tmp
|
100
|
+
@docker_tmp ||= "/tmp/rb-sys-dock"
|
101
|
+
end
|
102
|
+
|
103
|
+
def cache_dir
|
104
|
+
return @cache_dir if defined?(@cache_dir)
|
105
|
+
|
106
|
+
@cache_dir = determine_cache_dir
|
107
|
+
FileUtils.mkdir_p(@cache_dir)
|
108
|
+
@cache_dir
|
109
|
+
end
|
110
|
+
|
111
|
+
def mount_cargo_registry
|
112
|
+
local_registry_dir = if ENV["CARGO_HOME"]
|
113
|
+
ENV["CARGO_HOME"]
|
114
|
+
elsif File.exist?(cargo_home = File.join(ENV["HOME"], ".cargo"))
|
115
|
+
cargo_home
|
116
|
+
else
|
117
|
+
File.join(cache_dir, "cargo")
|
98
118
|
end
|
119
|
+
|
120
|
+
dir = File.join("registry")
|
121
|
+
log(:trace, "Mounting cargo registry dir: #{dir}")
|
122
|
+
FileUtils.mkdir_p(dir)
|
123
|
+
|
124
|
+
"--mount type=bind,source=#{File.join(local_registry_dir, dir)},target=#{File.join("/usr/local/cargo", dir)},readonly=false"
|
125
|
+
end
|
126
|
+
|
127
|
+
def mount_bundle_cache(options, extra_env)
|
128
|
+
dir = File.join(cache_dir, options.fetch(:platform), "bundle")
|
129
|
+
FileUtils.mkdir_p(dir)
|
130
|
+
log(:trace, "Mounting bundle cache: #{dir}")
|
131
|
+
"-v #{dir}:#{File.join(docker_tmp, "bundle")}"
|
132
|
+
end
|
133
|
+
|
134
|
+
def mount_target_dir(options, _extra_env)
|
135
|
+
tmp_target_dir = File.join(Dir.pwd, "tmp", "rb-sys-dock", options[:platform], "target")
|
136
|
+
FileUtils.mkdir_p(tmp_target_dir)
|
137
|
+
"-v #{tmp_target_dir}:#{File.join(Dir.pwd, "target")}"
|
138
|
+
end
|
139
|
+
|
140
|
+
def mount_command_history(options)
|
141
|
+
return unless $stdin.tty?
|
142
|
+
|
143
|
+
history_dir = File.join(cache_dir, options.fetch(:platform), "commandhistory")
|
144
|
+
"-v #{history_dir}:#{File.join(docker_tmp, "commandhistory")}"
|
145
|
+
end
|
146
|
+
|
147
|
+
def rcd(input_args, options)
|
148
|
+
wrapper_command = []
|
149
|
+
wrapper_command << "sigfw" unless $stdin.tty?
|
150
|
+
wrapper_command << "runas"
|
151
|
+
|
152
|
+
extra_env = []
|
153
|
+
|
154
|
+
docker_options = []
|
155
|
+
docker_options << "--tty" if $stdin.tty?
|
156
|
+
run_command = input_args.empty? ? "bash" : input_args.join(" ")
|
157
|
+
|
158
|
+
cmd = <<~SH
|
159
|
+
#{docker_command} run \
|
160
|
+
-v #{Dir.pwd}:#{Dir.pwd} \
|
161
|
+
#{mount_target_dir(options, extra_env)} \
|
162
|
+
#{mount_cargo_registry} \
|
163
|
+
#{mount_bundle_cache(options, extra_env)} \
|
164
|
+
#{mount_command_history(options)} \
|
165
|
+
-e UID=#{ENV.fetch("RB_SYS_DOCK_UID", "1000")} \
|
166
|
+
-e GID=#{ENV.fetch("RB_SYS_DOCK_GID", "1000")} \
|
167
|
+
-e USER=rb-sys-dock \
|
168
|
+
-e GROUP=_staff \
|
169
|
+
-e GEM_PRIVATE_KEY_PASSPHRASE \
|
170
|
+
-e ftp_proxy \
|
171
|
+
-e http_proxy \
|
172
|
+
-e https_proxy \
|
173
|
+
-e RCD_HOST_RUBY_PLATFORM=#{RbConfig::CONFIG["arch"]} \
|
174
|
+
-e RCD_HOST_RUBY_VERSION=#{RUBY_VERSION} \
|
175
|
+
-e RCD_IMAGE \
|
176
|
+
-e TERM \
|
177
|
+
-w #{Dir.pwd} \
|
178
|
+
--rm \
|
179
|
+
--interactive \
|
180
|
+
#{docker_options.join(" ")} \
|
181
|
+
#{ENV.fetch("RCD_IMAGE")} \
|
182
|
+
#{wrapper_command.join(" ")} \
|
183
|
+
#{run_command}
|
184
|
+
SH
|
185
|
+
|
186
|
+
log(:trace, "Running command: \n$ #{cmd}")
|
187
|
+
|
188
|
+
exec(cmd)
|
189
|
+
end
|
190
|
+
|
191
|
+
def docker_command
|
192
|
+
return @docker_command if defined?(@docker_command)
|
193
|
+
|
194
|
+
@docker_command = ENV.fetch("DOCKER", "docker")
|
99
195
|
end
|
100
196
|
|
101
197
|
def download_image(_options)
|
102
198
|
image = ENV.fetch("RCD_IMAGE")
|
103
|
-
|
199
|
+
|
200
|
+
if `#{docker_command} images -q #{image}`.strip.empty?
|
104
201
|
# Nicely formatted message that we are downloading the image which might take awhile
|
105
202
|
log(:notice, "Downloading container #{image.inspect}, this might take awhile...")
|
106
|
-
system("
|
203
|
+
system("#{docker_command} pull #{image} --quiet > /dev/null")
|
107
204
|
end
|
108
205
|
end
|
109
206
|
|
@@ -116,10 +213,10 @@ def log_some_useful_info(_options)
|
|
116
213
|
end
|
117
214
|
|
118
215
|
def set_env(options)
|
119
|
-
ENV["RCD_IMAGE"]
|
216
|
+
ENV["RCD_IMAGE"] ||= "rbsys/#{options[:toolchain_info].platform}:#{options[:version]}"
|
120
217
|
end
|
121
218
|
|
122
219
|
set_env(options)
|
123
220
|
download_image(options)
|
124
221
|
log_some_useful_info(options)
|
125
|
-
rcd(ARGV)
|
222
|
+
rcd(ARGV, options)
|
@@ -1,10 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "shellwords"
|
4
|
+
|
3
5
|
module RbSys
|
4
|
-
class CargoBuilder
|
6
|
+
class CargoBuilder < Gem::Ext::Builder
|
5
7
|
# Converts Ruby link flags into something cargo understands
|
6
8
|
class LinkFlagConverter
|
7
|
-
|
9
|
+
FILTERED_PATTERNS = [
|
10
|
+
/compress-debug-sections/ # Not supported by all linkers, and not required for Rust
|
11
|
+
]
|
12
|
+
|
13
|
+
def self.convert(args)
|
14
|
+
Shellwords.split(args).flat_map { |arg| convert_arg(arg) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.convert_arg(arg)
|
18
|
+
return [] if FILTERED_PATTERNS.any? { |p| p.match?(arg) }
|
19
|
+
|
8
20
|
case arg.chomp
|
9
21
|
when /^-L\s*(.+)$/
|
10
22
|
["-L", "native=#{$1}"]
|
data/lib/rb_sys/cargo_builder.rb
CHANGED
data/lib/rb_sys/version.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rb_sys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.50
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Ker-Seymer
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
Rl+ASkq2/1i07TkBpCf+2hq66+h/hx+/Y/KrUzXfe0jtvil0WESkJT2kqRqHWNhD
|
31
31
|
9GKBxaQlXokNDtWCm1/gl6cD8WRZ0N5S4ZGJT1FLLsA=
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2022-12-
|
33
|
+
date: 2022-12-13 00:00:00.000000000 Z
|
34
34
|
dependencies: []
|
35
35
|
description:
|
36
36
|
email:
|
metadata.gz.sig
CHANGED
Binary file
|