tebako 0.7.1 → 0.7.2.rc2

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: edab24288967cc4085b927ef069adab649b24282a6cc320a595bc2b20cb636e9
4
- data.tar.gz: 7964a2bcf62cf28d4cd34ee1f1744afe21980e934a4fa1a649f0b854b15b1ca3
3
+ metadata.gz: 12c6393e228f7a9b35f5e4e134145d61d050e043b3f71fd6b7470bc6ae9fe84c
4
+ data.tar.gz: 950729b6f6eeed71c400f114fc45a0820919cbd8ddf22c8682e4d5cc77ed38b5
5
5
  SHA512:
6
- metadata.gz: 1a77dc3a2c810aad7597cab4a3d5a8f3c6378d2f9313e129edf17097700a0210eb9008b73bb5402921af53e5cccf450602865b4cc1518e5f8a2fd0e34e15163c
7
- data.tar.gz: 40b417b5bb8e13e40618015d04f5f3c085bc08325d798bba5fb1cf6c43c0e44daef392755473f2110cb21c95134dcee24c6559933226eee0f41a5f9fc074d602
6
+ metadata.gz: 547a0f3dca568dc52dd40cd0fbca7e09d96ab51de383edfb70e7e1bb16fde23c81135250ba7cdd4bf9c7fe7658e1241e753ef62dea0c96181496fbcf7da06ea3
7
+ data.tar.gz: 9653a599391afb40aed074d456b3d04e779091501223f1d6e41aa4c85ad1071838e6a90a7f4b1c2eb834061e5b9f8d875346c8438c904ac221a05d3a22d0571a
data/Rakefile CHANGED
@@ -35,8 +35,9 @@ task default: %i[rubocop]
35
35
  desc "Generate version.txt"
36
36
  task "generate_version_txt" do
37
37
  require_relative "lib/tebako/version"
38
- File.write(File.join(__dir__, "version.txt"), "#{Tebako::VERSION}\n")
39
- puts "Generating #{File.join(__dir__, "version.txt")}; version = #{Tebako::VERSION}"
38
+ version_without_rc = Tebako::VERSION.gsub(/\.rc\d+/, "")
39
+ File.write(File.join(__dir__, "version.txt"), "#{version_without_rc}\n")
40
+ puts "Generating #{File.join(__dir__, "version.txt")}; version = #{version_without_rc}"
40
41
  end
41
42
 
42
43
  task build: :generate_version_txt
data/exe/tebako-packager CHANGED
@@ -110,7 +110,7 @@ begin
110
110
  Tebako::Packager.create_implib(ARGV[2], ARGV[4], File.basename(ARGV[8]), ARGV[9]) if ARGV[1] =~ /msys/
111
111
  # Assume that "<TARGET_BIN_DIR (TBD)>" is <DATA_SRC_DIR>/bin"
112
112
  # That shall match CMakeLists.txt settings
113
- Tebako::Packager.deploy(ARGV[4], "#{ARGV[4]}/bin", ARGV[7])
113
+ Tebako::Packager.deploy(ARGV[4], ARGV[9], ARGV[7])
114
114
 
115
115
  else
116
116
  raise Tebako::Error, "tebako-packager cannot process #{ARGV[0]} command"
data/lib/tebako/cli.rb CHANGED
@@ -35,6 +35,7 @@ require "yaml"
35
35
  require_relative "cli_helpers"
36
36
  require_relative "cli_rubies"
37
37
  require_relative "error"
38
+ require_relative "version"
38
39
 
39
40
  # Tebako - an executable packager
40
41
  # Implementation of tebako command-line interface
@@ -45,12 +46,12 @@ module Tebako
45
46
  package_name "Tebako"
46
47
  class_option :prefix, type: :string, aliases: "-p", required: false,
47
48
  desc: "A path to tebako packaging environment, '~/.tebako' ('$HOME/.tebako') by default"
49
+ class_option :devmode, type: :boolean, aliases: "-D", required: false,
50
+ desc: "Developer mode, please do not use if unsure"
48
51
 
49
52
  desc "clean", "Clean tebako packaging environment"
50
53
  def clean
51
- puts "Cleaning tebako packaging environment"
52
- # Using File.join(deps, "") to ensure that the slashes are appropriate
53
- FileUtils.rm_rf([File.join(deps, ""), File.join(output, "")], secure: true)
54
+ clean_cache
54
55
  end
55
56
 
56
57
  desc "clean_ruby", "Clean Ruby source from tebako packaging environment"
@@ -68,7 +69,7 @@ module Tebako
68
69
 
69
70
  desc "hash", "Print build script hash (ci cache key)"
70
71
  def hash
71
- print Digest::SHA256.hexdigest File.read File.join(__dir__, "../..", "CMakeLists.txt")
72
+ print Digest::SHA256.hexdigest File.read File.join(source, "CMakeLists.txt")
72
73
  end
73
74
 
74
75
  desc "press", "Press tebako image"
@@ -83,8 +84,11 @@ module Tebako
83
84
  enum: Tebako::CliRubies::RUBY_VERSIONS.keys,
84
85
  desc: "Tebako package Ruby version, #{Tebako::CliRubies::DEFAULT_RUBY_VERSION} by default"
85
86
  def press
87
+ (clean_output unless version_match?) unless options[:devmode]
88
+
86
89
  puts press_announce
87
90
  do_press
91
+ ensure_version_file
88
92
  rescue Tebako::Error => e
89
93
  puts "Tebako script failed: #{e.message} [#{e.error_code}]"
90
94
  exit e.error_code
@@ -95,8 +99,11 @@ module Tebako
95
99
  enum: Tebako::CliRubies::RUBY_VERSIONS.keys,
96
100
  desc: "Tebako package Ruby version, #{Tebako::CliRubies::DEFAULT_RUBY_VERSION} by default."
97
101
  def setup
102
+ (clean_output unless version_match?) unless options[:devmode]
103
+
98
104
  puts "Setting up tebako packaging environment"
99
105
  do_setup
106
+ ensure_version_file
100
107
  rescue Tebako::Error => e
101
108
  puts "Tebako script failed: #{e.message} [#{e.error_code}]"
102
109
  exit e.error_code
@@ -107,6 +114,13 @@ module Tebako
107
114
  end
108
115
 
109
116
  no_commands do
117
+ def initialize(*args)
118
+ super
119
+ return if args[2][:current_command].name.include?("hash")
120
+
121
+ puts "Tebako executable packager version #{Tebako::VERSION}"
122
+ end
123
+
110
124
  def options
111
125
  original_options = super
112
126
 
@@ -37,6 +37,7 @@ require_relative "version"
37
37
  # Tebako - an executable packager
38
38
  # Command-line interface methods
39
39
  module Tebako
40
+ E_VERSION_FILE = ".environment.version"
40
41
  # Cli helpers
41
42
  module CliHelpers
42
43
  def b_env
@@ -57,10 +58,39 @@ module Tebako
57
58
  "-DDEPS:STRING=\"#{deps}\" -G \"#{m_files}\" -B \"#{output}\" -S \"#{source}\""
58
59
  end
59
60
 
61
+ def clean_cache
62
+ puts "Cleaning tebako packaging environment"
63
+ # Using File.join(deps, "") to ensure that the slashes are appropriate
64
+ FileUtils.rm_rf([File.join(deps, ""), File.join(output, "")], secure: true)
65
+ end
66
+
67
+ def clean_output
68
+ puts "Cleaning CMake cache and Ruby build files"
69
+ # Using File.join(output, "") to ensure that the slashes are appropriate
70
+
71
+ nmr = "src/_ruby_*"
72
+ nms = "stash_*"
73
+ FileUtils.rm_rf(Dir.glob(File.join(deps, nmr)), secure: true)
74
+ FileUtils.rm_rf(Dir.glob(File.join(deps, nms)), secure: true)
75
+
76
+ FileUtils.rm_rf(File.join(output, ""), secure: true)
77
+ end
78
+
60
79
  def deps
61
80
  @deps ||= File.join(prefix, "deps")
62
81
  end
63
82
 
83
+ def ensure_version_file
84
+ version_file_path = File.join(prefix, E_VERSION_FILE)
85
+
86
+ begin
87
+ File.write(version_file_path, version_key)
88
+ # puts "Set version information for tebako packaging environment to #{Tebako::VERSION}"
89
+ rescue StandardError => e
90
+ puts "An error occurred while creating or updating #{E_VERSION_FILE}: #{e.message}"
91
+ end
92
+ end
93
+
64
94
  def fs_current
65
95
  fs_current = Dir.pwd
66
96
  if RUBY_PLATFORM =~ /msys|mingw|cygwin/
@@ -169,5 +199,25 @@ module Tebako
169
199
  c_path = Pathname.new(__FILE__).realpath
170
200
  @source ||= File.expand_path("../../..", c_path)
171
201
  end
202
+
203
+ def version_key
204
+ @version_key ||= "#{Tebako::VERSION} at #{source}"
205
+ end
206
+
207
+ def version_match? # rubocop:disable Metrics/MethodLength
208
+ begin
209
+ version_file_path = File.join(prefix, E_VERSION_FILE)
210
+ file_version = File.open(version_file_path, &:readline).strip
211
+ rs = file_version == version_key
212
+ unless rs
213
+ puts "CMake cache was created by a gem version #{file_version} " \
214
+ "and cannot be used for gem version #{version_key}"
215
+ end
216
+ rescue StandardError
217
+ # In case of any error (e.g., file not readable), return false
218
+ rs = false
219
+ end
220
+ rs
221
+ end
172
222
  end
173
223
  end
@@ -59,12 +59,6 @@ module Tebako
59
59
  thread_pthread.c
60
60
  ].freeze
61
61
 
62
- DEPLOY_ENV = {
63
- "GEM_HOME" => nil,
64
- "GEM_PATH" => nil,
65
- "TEBAKO_PASS_THROUGH" => "1"
66
- }.freeze
67
-
68
62
  # Magic version numbers used to ensure compatibility for Ruby 2.7.x, 3.0.x
69
63
  # These are the minimal versions required to provide linux-gnu / linux-musl differentiation by bundler
70
64
  # Ruby 3.1+ default rubygems versions work correctly out of the box
@@ -83,13 +77,19 @@ module Tebako
83
77
  end
84
78
 
85
79
  # Deploy
86
- def deploy(src_dir, tbd, gflength)
80
+ def deploy(target_dir, ruby_ver, gflength)
87
81
  puts "-- Running deploy script"
88
82
 
89
- ruby_ver = ruby_version(tbd)
90
- update_rubygems(tbd, "#{src_dir}/lib", ruby_ver, RUBYGEMS_VERSION) unless PatchHelpers.ruby31?(ruby_ver)
91
- install_gem tbd, "tebako-runtime"
92
- install_gem(tbd, "bundler", BUNDLER_VERSION) if gflength.to_i != 0
83
+ ruby_api_ver = ruby_api_version(ruby_ver)
84
+ gem_home = "#{target_dir}/lib/ruby/gems/#{ruby_api_ver}"
85
+
86
+ deploy_env = { "GEM_HOME" => gem_home, "GEM_PATH" => gem_home, "TEBAKO_PASS_THROUGH" => "1" }
87
+
88
+ PatchHelpers.with_env(deploy_env) do
89
+ update_rubygems(target_dir, ruby_api_ver, RUBYGEMS_VERSION) unless PatchHelpers.ruby31?(ruby_ver)
90
+ install_gem(target_dir, "tebako-runtime")
91
+ install_gem(target_dir, "bundler", BUNDLER_VERSION) if gflength.to_i != 0
92
+ end
93
93
  end
94
94
 
95
95
  # Init
@@ -174,21 +174,24 @@ module Tebako
174
174
  File.join(src_dir, "lib", "libx64-ucrt-ruby#{ruby_ver[0]}#{ruby_ver[2]}0.a")
175
175
  end
176
176
 
177
- def install_gem(tbd, name, ver = nil)
177
+ def install_gem(target_dir, name, ver = nil)
178
178
  puts " ... installing #{name} gem#{" version #{ver}" if ver}"
179
- PatchHelpers.with_env(DEPLOY_ENV) do
180
- params = ["#{tbd}/gem", "install", name.to_s]
181
- params.push("-v", ver.to_s) if ver
182
179
 
183
- out, st = Open3.capture2e(*params)
184
- raise Tebako::Error, "Failed to install #{name} (#{st}):\n #{out}" unless st.exitstatus.zero?
185
- end
180
+ params = ["#{target_dir}/bin/gem", "install", name.to_s]
181
+ params.push("-v", ver.to_s) if ver
182
+
183
+ out, st = Open3.capture2e(*params)
184
+ raise Tebako::Error, "Failed to install #{name} (#{st}):\n #{out}" unless st.exitstatus.zero?
186
185
  end
187
186
 
188
187
  def do_patch(patch_map, root)
189
188
  patch_map.each { |fname, mapping| PatchHelpers.patch_file("#{root}/#{fname}", mapping) }
190
189
  end
191
190
 
191
+ def ruby_api_version(ruby_ver)
192
+ "#{ruby_ver.split(".")[0..1].join(".")}.0"
193
+ end
194
+
192
195
  def ruby_version(tbd)
193
196
  ruby_version = nil
194
197
  PatchHelpers.with_env(DEPLOY_ENV) do
@@ -203,16 +206,14 @@ module Tebako
203
206
  ruby_version
204
207
  end
205
208
 
206
- def update_rubygems(tbd, tld, ruby_ver, gem_ver)
209
+ def update_rubygems(target_dir, ruby_api_ver, gem_ver)
207
210
  puts " ... updating rubygems to #{gem_ver}"
208
- PatchHelpers.with_env(DEPLOY_ENV) do
209
- out, st = Open3.capture2e("#{tbd}/gem", "update", "--no-doc", "--system", gem_ver.to_s)
210
- raise Tebako::Error, "Failed to update rubugems to #{gem_ver} (#{st}):\n #{out}" unless st.exitstatus.zero?
211
- end
212
- ruby_api_ver = ruby_ver.split(".")[0..1].join(".")
211
+ out, st = Open3.capture2e("#{target_dir}/bin/gem", "update", "--no-doc", "--system", gem_ver.to_s)
212
+ raise Tebako::Error, "Failed to update rubugems to #{gem_ver} (#{st}):\n #{out}" unless st.exitstatus.zero?
213
+
213
214
  # Autoload cannot handle statically linked openssl extension
214
215
  # Changing it to require seems to be the simplest solution
215
- PatchHelpers.patch_file("#{tld}/ruby/site_ruby/#{ruby_api_ver}.0/rubygems/openssl.rb",
216
+ PatchHelpers.patch_file("#{target_dir}/lib/ruby/site_ruby/#{ruby_api_ver}/rubygems/openssl.rb",
216
217
  { "autoload :OpenSSL, \"openssl\"" => "require \"openssl\"" })
217
218
  end
218
219
  end
@@ -26,5 +26,5 @@
26
26
  # POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
28
  module Tebako
29
- VERSION = "0.7.1"
29
+ VERSION = "0.7.2.rc2"
30
30
  end
data/version.txt CHANGED
@@ -1 +1 @@
1
- 0.7.1
1
+ 0.7.2
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tebako
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-29 00:00:00.000000000 Z
11
+ date: 2024-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor