rb_sys 0.9.47 → 0.9.49

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3ae2921097c7458c637f80561fde9f61a15182e7aae5736b2cf4dd7c619c67be
4
- data.tar.gz: '049dc1c3f7bcc2f96316f86fd2d42ed1a24fcf875b702ad90244ca230670ad92'
3
+ metadata.gz: d65319f94ce1b79cc27ed5b42a61246d7183cb7f9616fafc6f60ce023fe3b687
4
+ data.tar.gz: 0e3fe62efd6b9f0f8246f182b91d6918b0161b89691f1df8ded5628fa26ad105
5
5
  SHA512:
6
- metadata.gz: 3ad7fd0df4ed0432167bc630c31448c4b1105fb4832500ce9367fec5d357c8c84974ee288c7cefb0edacc82152985017df9f886479138cf9fd55eff7e1d3417a
7
- data.tar.gz: 22331676e50887513749d5448a8580d525ef8b930e36804473ce1a8b607d01c4f9d7cdf5a1cbb2f4e96d79fc14f73f22e3fe5a3d6e831734d4a3d0d0c07fc19b
6
+ metadata.gz: 307b71b55f1602546201f8380b101824f2b241eb219041f36938c6316d315b0094d1fc5e1fd41412c37be90afdcc42dffa308042e6038f05f187109d80128b0e
7
+ data.tar.gz: 0c7162a722fdfbdfd483f342f7d737284539b5d5b3c8b303a0f55d107c2b32fd5346617a224ed15475326ae2fb474603dfcfbbf6f6840d993b8a093b40a13838
checksums.yaml.gz.sig CHANGED
Binary file
data/exe/rb-sys-dock ADDED
@@ -0,0 +1,224 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "optparse"
4
+ require "rb_sys/version"
5
+ require "rb_sys/toolchain_info"
6
+ require "fileutils"
7
+
8
+ options = {
9
+ version: RbSys::VERSION
10
+ }
11
+
12
+ def log(level, message, emoji: true, io: $stderr)
13
+ emoji_opt, shellcode = case level
14
+ when :error
15
+ ["❌", "\e[1;31m"]
16
+ when :warn
17
+ ["⚠️", "\e[1;33m"]
18
+ when :info
19
+ ["ℹ️", "\e[1;37m"]
20
+ when :notice
21
+ ["🐳", "\e[1;34m"]
22
+ when :trace
23
+ return unless ENV["LOG_LEVEL"] == "trace"
24
+
25
+ ["🔍", "\e[1;2m"]
26
+ else raise "Unknown log level: #{level.inspect}"
27
+ end
28
+
29
+ emoji_opt = if emoji.is_a?(String)
30
+ emoji + " "
31
+ elsif emoji
32
+ emoji_opt + " "
33
+ end
34
+
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"
39
+ end
40
+
41
+ OptionParser.new do |opts|
42
+ opts.banner = "Usage: rb-sys-dock --platform PLATFORM [COMMAND]"
43
+
44
+ opts.on("-v", "--version", "Prints version") do
45
+ require "rb_sys/version"
46
+ puts RbSys::VERSION
47
+ exit
48
+ end
49
+
50
+ opts.on("-p", "--platform PLATFORM", "Platform to build for (i.e. x86_64-linux)") do |p|
51
+ toolchain_info = begin
52
+ RbSys::ToolchainInfo.new(p)
53
+ rescue
54
+ supported_list = RbSys::ToolchainInfo.all
55
+ supported_list.select!(&:supported?)
56
+ list = supported_list.map { |p| "- #{p} (#{p.rust_target})" }.join("\n")
57
+ log(:error, "Platform #{p} is not supported, please use one of:\n\n#{list}")
58
+ exit(1)
59
+ end
60
+
61
+ options[:platform] = p
62
+ options[:toolchain_info] = toolchain_info
63
+ end
64
+
65
+ opts.on("--latest", "Use the latest version of the Docker image") do
66
+ log(:notice, "Using latest version of the Docker image", emoji: "🆕")
67
+ options[:version] = "latest"
68
+ end
69
+
70
+ opts.on("--list-platforms", "--list", "List all supported platforms") do
71
+ log(:notice, "Supported platforms listed below:")
72
+
73
+ RbSys::ToolchainInfo.supported.each do |p|
74
+ log(:info, "- #{p} (#{p.rust_target})", emoji: false, io: $stdout)
75
+ end
76
+
77
+ exit(0)
78
+ end
79
+
80
+ opts.on("-h", "--help", "Prints this help") do
81
+ puts opts
82
+ exit
83
+ end
84
+
85
+ opts.on("-V", "--verbose", "Prints verbose output") do
86
+ ENV["LOG_LEVEL"] = "trace"
87
+ ENV["VERBOSE"] = "1"
88
+ options[:verbose] = true
89
+ end
90
+ end.parse!
91
+
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"]
95
+
96
+ File.join(ENV["HOME"], ".cache", "rb-sys-dock")
97
+ end
98
+
99
+ def cache_dir
100
+ return @cache_dir if defined?(@cache_dir)
101
+
102
+ @cache_dir = determine_cache_dir
103
+ FileUtils.mkdir_p(@cache_dir)
104
+ @cache_dir
105
+ end
106
+
107
+ def mount_cargo_registry
108
+ local_registry_dir = if ENV["CARGO_HOME"]
109
+ ENV["CARGO_HOME"]
110
+ elsif File.exist?(cargo_home = File.join(ENV["HOME"], ".cargo"))
111
+ cargo_home
112
+ else
113
+ File.join(cache_dir, "cargo")
114
+ end
115
+
116
+ dirs = []
117
+ dirs << File.join(local_registry_dir, "registry", "index")
118
+ dirs << File.join(local_registry_dir, "registry", "cache")
119
+ dirs << File.join(local_registry_dir, "registry", "git", "db")
120
+
121
+ dirs.each do |dir|
122
+ log(:trace, "Mounting cargo registry dir: #{dir}")
123
+ FileUtils.mkdir_p(dir)
124
+ end
125
+ dirs.map { |dir| "-v #{dir}:#{dir}" }.join(" ")
126
+ end
127
+
128
+ def mount_bundle_cache(options, extra_env)
129
+ dir = File.join(cache_dir, options.fetch(:platform), "bundle")
130
+ FileUtils.mkdir_p(dir)
131
+ log(:trace, "Mounting bundle cache: #{dir}")
132
+ extra_env << "BUNDLE_PATH=\"/tmp/bundle\""
133
+ "-v #{dir}:/tmp/bundle"
134
+ end
135
+
136
+ def mount_target_dir(options, _extra_env)
137
+ tmp_target_dir = File.join(Dir.pwd, "tmp", "rb-sys-dock", options[:platform], "target")
138
+ FileUtils.mkdir_p(tmp_target_dir)
139
+ "-v #{tmp_target_dir}:#{File.join(Dir.pwd, "target")}"
140
+ end
141
+
142
+ def mount_command_history(options)
143
+ return unless $stdin.tty?
144
+
145
+ history_dir = File.join(cache_dir, options.fetch(:platform), "commandhistory")
146
+ "-v #{history_dir}:/tmp/commandhistory"
147
+ end
148
+
149
+ def rcd(input_args, options)
150
+ wrapper_command = []
151
+ wrapper_command << "sigfw" unless $stdin.tty?
152
+ wrapper_command << "runas"
153
+
154
+ extra_env = []
155
+
156
+ docker_options = []
157
+ docker_options << "--tty" if $stdin.tty?
158
+ run_command = input_args.empty? ? "bash" : input_args.join(" ")
159
+
160
+ cmd = <<~SH
161
+ #{docker_command} run \
162
+ -v #{Dir.pwd}:#{Dir.pwd} \
163
+ #{mount_target_dir(options, extra_env)} \
164
+ #{mount_cargo_registry} \
165
+ #{mount_bundle_cache(options, extra_env)} \
166
+ #{mount_command_history(options)} \
167
+ -e UID=#{ENV.fetch("RB_SYS_DOCK_UID", "1000")} \
168
+ -e GID=#{ENV.fetch("RB_SYS_DOCK_GID", "1000")} \
169
+ -e USER=rb-sys-dock \
170
+ -e GROUP=_staff \
171
+ -e GEM_PRIVATE_KEY_PASSPHRASE \
172
+ -e ftp_proxy \
173
+ -e http_proxy \
174
+ -e https_proxy \
175
+ -e RCD_HOST_RUBY_PLATFORM=#{RbConfig::CONFIG["arch"]} \
176
+ -e RCD_HOST_RUBY_VERSION=#{RUBY_VERSION} \
177
+ -e RCD_IMAGE \
178
+ -e TERM \
179
+ -w #{Dir.pwd} \
180
+ --rm \
181
+ --interactive \
182
+ #{docker_options.join(" ")} \
183
+ #{ENV.fetch("RCD_IMAGE")} \
184
+ #{wrapper_command.join(" ")} \
185
+ #{run_command}
186
+ SH
187
+
188
+ log(:trace, "Running command: \n$ #{cmd}")
189
+
190
+ exec(cmd)
191
+ end
192
+
193
+ def docker_command
194
+ return @docker_command if defined?(@docker_command)
195
+
196
+ @docker_command = ENV.fetch("DOCKER", "docker")
197
+ end
198
+
199
+ def download_image(_options)
200
+ image = ENV.fetch("RCD_IMAGE")
201
+
202
+ if `#{docker_command} images -q #{image}`.strip.empty?
203
+ # Nicely formatted message that we are downloading the image which might take awhile
204
+ log(:notice, "Downloading container #{image.inspect}, this might take awhile...")
205
+ system("#{docker_command} pull #{image} --quiet > /dev/null")
206
+ end
207
+ end
208
+
209
+ def log_some_useful_info(_options)
210
+ if ARGV.empty?
211
+ log(:notice, "Entering shell in Docker container #{ENV["RCD_IMAGE"].inspect}")
212
+ else
213
+ log(:notice, "Running command #{ARGV.inspect} in Docker container #{ENV["RCD_IMAGE"].inspect}")
214
+ end
215
+ end
216
+
217
+ def set_env(options)
218
+ ENV["RCD_IMAGE"] = "rbsys/#{options[:toolchain_info]}:#{options[:version]}"
219
+ end
220
+
221
+ set_env(options)
222
+ download_image(options)
223
+ log_some_useful_info(options)
224
+ rcd(ARGV, options)
@@ -18,6 +18,10 @@ module RbSys
18
18
  @all ||= DATA.keys.map { |k| new(k) }
19
19
  end
20
20
 
21
+ def supported
22
+ @supported ||= all.select(&:supported?)
23
+ end
24
+
21
25
  def local
22
26
  @current ||= new(RbConfig::CONFIG["arch"])
23
27
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RbSys
4
- VERSION = "0.9.47"
4
+ VERSION = "0.9.49"
5
5
  end
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.47
4
+ version: 0.9.49
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Ker-Seymer
@@ -30,18 +30,20 @@ cert_chain:
30
30
  Rl+ASkq2/1i07TkBpCf+2hq66+h/hx+/Y/KrUzXfe0jtvil0WESkJT2kqRqHWNhD
31
31
  9GKBxaQlXokNDtWCm1/gl6cD8WRZ0N5S4ZGJT1FLLsA=
32
32
  -----END CERTIFICATE-----
33
- date: 2022-12-11 00:00:00.000000000 Z
33
+ date: 2022-12-12 00:00:00.000000000 Z
34
34
  dependencies: []
35
35
  description:
36
36
  email:
37
37
  - i.kerseymer@gmail.com
38
- executables: []
38
+ executables:
39
+ - rb-sys-dock
39
40
  extensions: []
40
41
  extra_rdoc_files: []
41
42
  files:
42
43
  - LICENSE-APACHE
43
44
  - LICENSE-MIT
44
45
  - certs/ianks.pem
46
+ - exe/rb-sys-dock
45
47
  - lib/rb_sys.rb
46
48
  - lib/rb_sys/cargo_builder.rb
47
49
  - lib/rb_sys/cargo_builder/link_flag_converter.rb
metadata.gz.sig CHANGED
Binary file