rb_sys 0.9.59 → 0.9.60

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d0c1e0630a88954cda754dbb7db45842203cacd6fd265ea75a0424989d66e34
4
- data.tar.gz: 94d12fe7fe913ffb00ac9343a3ab594e3701d82f99fda2ab99a79e654bd4259e
3
+ metadata.gz: 84546ca4af298b39d45c6c8b931d59671a1e04900a8e2b86a852c9921475442d
4
+ data.tar.gz: 6ea6cde3068e5fa49eed2c9fbedc676eb48bb6932922d986f6d691f5a25eb7a4
5
5
  SHA512:
6
- metadata.gz: 618d433d7992df2fab66bdeb03204d0e699a4594881bc48bd61a4c5359b94eb25f26fd0eb9f2cd57038d4130c125383069267e125edc92d5761ef920ae3a6d87
7
- data.tar.gz: 1d6aa9c2039dffc0093bed770be24703f88ec95164ad87d24913e1889e9697206a1ef461e405f57ef1b56e02f505b7dc86e36839d8df7a1f972aa8973b94b186
6
+ metadata.gz: a9f6f0bbe1a74b1bd994217d7d25c89abce2df9b10b44dad0b656d906b02edc3aec1b142c927a57e773ea9e6764cb90f59657700a232775515717c450f42bf7d
7
+ data.tar.gz: c17a3fda12f884ab3577c1b9ee16f1aada070fc2935421b36fa7888cbd521a6c0c5d20848642829fe337e1da88f298941d3ab0409587d778668e175115ec6019
checksums.yaml.gz.sig CHANGED
Binary file
data/exe/rb-sys-dock CHANGED
@@ -4,6 +4,7 @@ require "optparse"
4
4
  require "rb_sys/version"
5
5
  require "rb_sys/toolchain_info"
6
6
  require "fileutils"
7
+ require "tmpdir"
7
8
 
8
9
  options = {
9
10
  version: RbSys::VERSION
@@ -101,6 +102,7 @@ OptionParser.new do |opts|
101
102
  opts.on("--latest", "Use the latest version of the Docker image") do
102
103
  log(:notice, "Using latest version of the Docker image", emoji: "🆕")
103
104
  options[:version] = "latest"
105
+ options[:no_cache] = true
104
106
  end
105
107
 
106
108
  opts.on("--list-platforms", "--list", "List all supported platforms") do
@@ -123,6 +125,10 @@ OptionParser.new do |opts|
123
125
  ENV["VERBOSE"] = "1"
124
126
  options[:verbose] = true
125
127
  end
128
+
129
+ opts.on("--build", "Build the Docker image") do
130
+ options[:build] = true
131
+ end
126
132
  end.parse!
127
133
 
128
134
  def determine_cache_dir
@@ -160,48 +166,113 @@ def mount_cargo_registry
160
166
  "--mount type=bind,source=#{File.join(local_registry_dir, dir)},target=#{File.join("/usr/local/cargo", dir)},readonly=false"
161
167
  end
162
168
 
163
- def mount_bundle_cache(options, extra_env)
164
- dir = File.join(cache_dir, options.fetch(:platform), "bundle")
169
+ def volume(src, dest, mode: "rw")
170
+ "--volume #{src}:#{dest}:rw"
171
+ end
172
+
173
+ def mount_bundle_cache(options)
174
+ unless File.exist?(File.join(Dir.pwd, "Gemfile"))
175
+ log(:trace, "Ignoring bundler config")
176
+ return
177
+ end
178
+
179
+ dir = File.join(cache_dir, options.fetch(:toolchain_info).platform, "bundle")
180
+ bundle_path = File.join(docker_tmp, "bundle")
165
181
  FileUtils.mkdir_p(dir)
166
182
  log(:trace, "Mounting bundle cache: #{dir}")
167
- "-v #{dir}:#{File.join(docker_tmp, "bundle")}"
183
+ bundle_config = gen_bundle_config_file(bundle_path)
184
+ bundle_dir = File.dirname(bundle_config)
185
+
186
+ "#{volume(dir, bundle_path)} -v #{bundle_dir}:#{File.join(Dir.pwd, ".bundle")}"
168
187
  end
169
188
 
170
- def mount_target_dir(options, _extra_env)
171
- tmp_target_dir = File.join(Dir.pwd, "tmp", "rb-sys-dock", options[:platform], "target")
172
- FileUtils.mkdir_p(tmp_target_dir)
173
- "-v #{tmp_target_dir}:#{File.join(Dir.pwd, "target")}"
189
+ def tmp_target_dir(options)
190
+ return @tmp_target_dir if defined?(@tmp_target_dir)
191
+
192
+ dir = File.join(Dir.pwd, "tmp", "rb-sys-dock", options.fetch(:toolchain_info).platform, "target")
193
+ FileUtils.mkdir_p(dir)
194
+ @tmp_target_dir = dir
195
+ end
196
+
197
+ def mount_target_dir(options)
198
+ "-v #{tmp_target_dir(options)}:#{File.join(Dir.pwd, "target")}"
174
199
  end
175
200
 
176
201
  def mount_command_history(options)
177
202
  return unless $stdin.tty?
178
203
 
179
204
  history_dir = File.join(cache_dir, options.fetch(:platform), "commandhistory")
205
+ FileUtils.mkdir_p(history_dir)
180
206
  "-v #{history_dir}:#{File.join(docker_tmp, "commandhistory")}"
181
207
  end
182
208
 
209
+ def default_command_to_run(input_args, options)
210
+ input_cmd = input_args.empty? ? "true" : input_args.join(" ")
211
+
212
+ if options[:build]
213
+ with_bundle = "test -f Gemfile && bundle install && #{input_cmd} && bundle exec rake native:$RUBY_TARGET gem"
214
+ without_bundle = "#{input_cmd} && rake native:$RUBY_TARGET gem"
215
+
216
+ log(:notice, "Running default build command:")
217
+ log(:notice, " $ rake native:#{options[:toolchain_info].platform} gem")
218
+ cargo_env = "export RB_SYS_CARGO_TARGET_DIR=#{tmp_target_dir(options)}"
219
+ "bash -c '#{cargo_env}; (#{with_bundle}) || (#{without_bundle})'"
220
+ else
221
+ input_args.empty? ? "bash" : "bash -c '#{input_args.join(" ")}'"
222
+ end
223
+ end
224
+
225
+ def uid_gid
226
+ if /darwin/.match?(RbConfig::CONFIG["host_os"])
227
+ ["1000", "1000"]
228
+ else
229
+ [Process.uid, Process.gid]
230
+ end
231
+ end
232
+
233
+ def user_mapping
234
+ uid, gid = uid_gid
235
+ "-e UID=#{uid} -e GID=#{gid} -e GROUP=_staff -e USER=rb-sys-dock"
236
+ end
237
+
238
+ def interactive?(input_args)
239
+ $stdin.tty?
240
+ end
241
+
242
+ def gen_bundle_config_file(path)
243
+ dir = Dir.mktmpdir("rb-sys-dock")
244
+ file = File.join(dir, "config")
245
+ File.write(file, <<~YAML)
246
+ ---
247
+ BUNDLE_JOBS: "4"
248
+ BUNDLE_RETRY: "4"
249
+ BUNDLE_PATH: #{path.inspect}
250
+ YAML
251
+
252
+ file
253
+ end
254
+
255
+ def mount_tmp_dir(options)
256
+ "--mount type=bind,source=#{Dir.mktmpdir},destination=#{Dir.pwd}/tmp/#{options.fetch(:toolchain_info).platform},readonly=false"
257
+ end
258
+
183
259
  def rcd(input_args, options)
184
260
  wrapper_command = []
185
- wrapper_command << "sigfw" unless $stdin.tty?
261
+ wrapper_command << "sigfw" unless interactive?(input_args)
186
262
  wrapper_command << "runas"
187
263
 
188
- extra_env = []
189
-
190
264
  docker_options = []
191
- docker_options << "--tty" if $stdin.tty?
192
- cmd = input_args.empty? ? "bash" : "bash -c '#{input_args.join(" ")}'"
265
+ docker_options << "--tty" if interactive?(input_args)
193
266
 
194
267
  cmd = <<~SH
195
268
  #{default_docker_command} run \
196
269
  -v #{Dir.pwd}:#{Dir.pwd} \
197
- #{mount_target_dir(options, extra_env)} \
270
+ #{mount_tmp_dir(options)} \
271
+ #{mount_target_dir(options)} \
198
272
  #{mount_cargo_registry} \
199
- #{mount_bundle_cache(options, extra_env)} \
273
+ #{mount_bundle_cache(options)} \
200
274
  #{mount_command_history(options)} \
201
- -e UID=#{ENV.fetch("RB_SYS_DOCK_UID", "1000")} \
202
- -e GID=#{ENV.fetch("RB_SYS_DOCK_GID", "1000")} \
203
- -e USER=rb-sys-dock \
204
- -e GROUP=_staff \
275
+ #{user_mapping} \
205
276
  -e GEM_PRIVATE_KEY_PASSPHRASE \
206
277
  -e ftp_proxy \
207
278
  -e http_proxy \
@@ -216,7 +287,7 @@ def rcd(input_args, options)
216
287
  #{docker_options.join(" ")} \
217
288
  #{ENV.fetch("RCD_IMAGE")} \
218
289
  #{wrapper_command.join(" ")} \
219
- #{cmd}
290
+ #{default_command_to_run(input_args, options)}
220
291
  SH
221
292
 
222
293
  log(:trace, "Running command: $ #{cmd}")
@@ -224,10 +295,10 @@ def rcd(input_args, options)
224
295
  exec(cmd)
225
296
  end
226
297
 
227
- def download_image(_options)
298
+ def download_image(options)
228
299
  image = ENV.fetch("RCD_IMAGE")
229
300
 
230
- if docker("images -q #{image}").strip.empty?
301
+ if docker("images -q #{image}").strip.empty? || options[:no_cache]
231
302
  # Nicely formatted message that we are downloading the image which might take awhile
232
303
  log(:notice, "Downloading container #{image.inspect}, this might take awhile...")
233
304
  docker("pull #{image} --quiet > /dev/null")
@@ -59,10 +59,9 @@ module RbSys
59
59
 
60
60
  def cargo_command(dest_path, args = [])
61
61
  manifest = File.join(ext_dir, "Cargo.toml")
62
- cargo = ENV.fetch("CARGO", "cargo")
63
62
 
64
63
  cmd = []
65
- cmd += [cargo, "rustc"]
64
+ cmd += ["cargo", "rustc"]
66
65
  cmd += ["--target", target] if target
67
66
  cmd += ["--target-dir", dest_path]
68
67
  cmd += ["--features", features.join(",")] unless features.empty?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RbSys
4
- VERSION = "0.9.59"
4
+ VERSION = "0.9.60"
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.59
4
+ version: 0.9.60
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: 2023-02-01 00:00:00.000000000 Z
33
+ date: 2023-02-02 00:00:00.000000000 Z
34
34
  dependencies: []
35
35
  description:
36
36
  email:
metadata.gz.sig CHANGED
Binary file