rb_sys 0.9.48 → 0.9.49

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: 0c20a93e6f901cd93729c524f5637ea642504062393f119c5972ccc198f5c431
4
- data.tar.gz: 7c3ac7ce3e4085eaadbba8a546ce6a8aabbb61ef8f4b79a47604a8876644bfcc
3
+ metadata.gz: d65319f94ce1b79cc27ed5b42a61246d7183cb7f9616fafc6f60ce023fe3b687
4
+ data.tar.gz: 0e3fe62efd6b9f0f8246f182b91d6918b0161b89691f1df8ded5628fa26ad105
5
5
  SHA512:
6
- metadata.gz: a39231d9b950fcc2e5b589ef64e7309c76247cc199feaa4eedaba5137fbdb6cb77daba429990b2a91a5fc3c173c6d677e17a59c573ab680b83d40d4c5c38ede7
7
- data.tar.gz: 21ac41ec59a49f655a12315066f720036bac026ed086fd410a0562cf3f75c1620992346f33d7d106c50b0d7e9b7f7cb001186fe8f8f9425450dfde0687ccc882
6
+ metadata.gz: 307b71b55f1602546201f8380b101824f2b241eb219041f36938c6316d315b0094d1fc5e1fd41412c37be90afdcc42dffa308042e6038f05f187109d80128b0e
7
+ data.tar.gz: 0c7162a722fdfbdfd483f342f7d737284539b5d5b3c8b303a0f55d107c2b32fd5346617a224ed15475326ae2fb474603dfcfbbf6f6840d993b8a093b40a13838
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
- io.puts "#{shellcode}#{emoji_opt}#{message}\e[0m"
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,128 @@ OptionParser.new do |opts|
73
81
  puts opts
74
82
  exit
75
83
  end
76
- end.parse!
77
84
 
78
- def rcd(input_args)
79
- begin
80
- require "rake_compiler_dock"
81
- rescue LoadError
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!
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
84
98
 
85
- args = input_args.empty? ? ["bash"] : input_args.dup
99
+ def cache_dir
100
+ return @cache_dir if defined?(@cache_dir)
86
101
 
87
- if $stdin.tty?
88
- # An interactive session should not leave the container on Ctrl-C
89
- args << {sigfw: false}
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")
90
114
  end
91
115
 
92
- begin
93
- RakeCompilerDock.exec(*args) do |ok, res|
94
- exit(res.exitstatus)
95
- end
96
- rescue RakeCompilerDock::DockerIsNotAvailable
97
- exit(-1)
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)
98
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")
99
197
  end
100
198
 
101
199
  def download_image(_options)
102
200
  image = ENV.fetch("RCD_IMAGE")
103
- if `docker images -q #{image}`.strip.empty?
201
+
202
+ if `#{docker_command} images -q #{image}`.strip.empty?
104
203
  # Nicely formatted message that we are downloading the image which might take awhile
105
204
  log(:notice, "Downloading container #{image.inspect}, this might take awhile...")
106
- system("docker pull #{image} --quiet > /dev/null")
205
+ system("#{docker_command} pull #{image} --quiet > /dev/null")
107
206
  end
108
207
  end
109
208
 
@@ -122,4 +221,4 @@ end
122
221
  set_env(options)
123
222
  download_image(options)
124
223
  log_some_useful_info(options)
125
- rcd(ARGV)
224
+ rcd(ARGV, options)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RbSys
4
- VERSION = "0.9.48"
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.48
4
+ version: 0.9.49
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Ker-Seymer
metadata.gz.sig CHANGED
Binary file