mirror of
https://github.com/chromebrew/chromebrew.git
synced 2026-01-08 23:18:10 -05:00
More ruby buildsystem cleanup. (#10631)
* More ruby buildsystem cleanup. Signed-off-by: Satadru Pramanik <satadru@gmail.com> * logic adjustments... Signed-off-by: Satadru Pramanik <satadru@gmail.com> --------- Signed-off-by: Satadru Pramanik <satadru@gmail.com>
This commit is contained in:
committed by
GitHub
parent
e15c77ccdc
commit
7e62d3bd0e
6
bin/crew
6
bin/crew
@@ -669,7 +669,7 @@ def unpack(meta)
|
||||
system "../#{meta[:filename]}", '--appimage-extract', chdir: @extract_dir, exception: true
|
||||
when /\.gem$/i
|
||||
puts "Moving #{@pkg.gem_name} binary gem for install..."
|
||||
gem_file = "#{@pkg.gem_name}-#{@pkg.gem_ver}-#{GEM_ARCH}.gem"
|
||||
gem_file = "#{@pkg.gem_name}-#{@pkg.gem_version}-#{GEM_ARCH}.gem"
|
||||
FileUtils.mv meta[:filename], File.join(@extract_dir, gem_file)
|
||||
end
|
||||
end
|
||||
@@ -1291,7 +1291,7 @@ def install
|
||||
elsif @pkg.superclass.to_s == 'RUBY'
|
||||
meta = download
|
||||
target_dir = unpack meta
|
||||
gem_file = "#{@pkg.gem_name}-#{@pkg.gem_ver}-#{GEM_ARCH}.gem"
|
||||
gem_file = "#{@pkg.gem_name}-#{@pkg.gem_version}-#{GEM_ARCH}.gem"
|
||||
if File.file?(File.join(target_dir, gem_file))
|
||||
FileUtils.mv File.join(target_dir, gem_file), File.join(CREW_DEST_DIR, gem_file)
|
||||
else
|
||||
@@ -1425,7 +1425,7 @@ end
|
||||
|
||||
def archive_package(crew_archive_dest)
|
||||
if @pkg.superclass.to_s == 'RUBY'
|
||||
gem_file = "#{@pkg.gem_name}-#{@pkg.gem_ver}-#{GEM_ARCH}.gem"
|
||||
gem_file = "#{@pkg.gem_name}-#{@pkg.gem_version}-#{GEM_ARCH}.gem"
|
||||
pkg_name = "#{@pkg.name}-#{@pkg.version}-chromeos-#{@device[:architecture]}.gem"
|
||||
FileUtils.mv File.join(CREW_DEST_DIR, gem_file), File.join(crew_archive_dest, pkg_name)
|
||||
# Only use zstd if it is available.
|
||||
|
||||
@@ -24,17 +24,20 @@ def require_gem(gem_name_and_require = nil, require_override = nil)
|
||||
end
|
||||
require_gem('activesupport', 'active_support/core_ext/object/blank')
|
||||
|
||||
def check_gem_binary_build_needed(gem_name = nil, gem_ver = nil)
|
||||
def check_gem_binary_build_needed(gem_name = nil, gem_version = nil)
|
||||
puts "Checking to see if gem compile for #{gem_name} is needed..."
|
||||
@extract_dir = "#{name}.#{Time.now.utc.strftime('%Y%m%d%H%M%S')}.dir"
|
||||
@extract_dir = "#{gem_name}.#{Time.now.utc.strftime('%Y%m%d%H%M%S')}.dir"
|
||||
FileUtils.mkdir_p File.join(CREW_BREW_DIR, @extract_dir)
|
||||
Dir.chdir(File.join(CREW_BREW_DIR, @extract_dir)) do
|
||||
# Need to check if the gem has extensions. If it does, we need
|
||||
# either a compiler or a pre-compiled binary gem.
|
||||
system "gem fetch #{gem_name} --platform=ruby --version=#{gem_ver}"
|
||||
system "gem unpack #{gem_name}-#{gem_ver}.gem"
|
||||
return system "grep -q -r spec.extensions #{gem_name}-#{gem_ver}/*.gemspec", %i[out err] => File::NULL
|
||||
system "gem fetch #{gem_name} --platform=ruby --version=#{gem_version}"
|
||||
system "gem unpack #{gem_name}-#{gem_version}.gem"
|
||||
system "grep -q -r spec.extensions #{gem_name}-#{gem_version}/*.gemspec", %i[out err] => File::NULL
|
||||
@build_needed = system "grep -q -r spec.extensions #{gem_name}-#{gem_version}/*.gemspec", %i[out err] => File::NULL
|
||||
end
|
||||
FileUtils.rm_rf File.join(CREW_BREW_DIR, @extract_dir)
|
||||
return @build_needed
|
||||
end
|
||||
|
||||
def set_vars(passed_name = nil, passed_version = nil)
|
||||
@@ -67,15 +70,15 @@ def set_vars(passed_name = nil, passed_version = nil)
|
||||
gem_test_versions.delete_if { |i| i.match?(/[a-zA-Z]/) }
|
||||
gem_test_version = gem_test_versions.map { |v| Gem::Version.new(v) }.max.to_s
|
||||
@gem_name = gem_test_name.blank? ? Gem::SpecFetcher.fetcher.suggest_gems_from_name(passed_name.gsub(/^ruby_/, '')).first : gem_test_name
|
||||
@remote_gem_ver = gem_test_name.blank? ? Gem.latest_version_for(@gem_name).to_s : gem_test_version
|
||||
@gem_ver = passed_version.split('-').first.to_s
|
||||
@gem_package_ver = @gem_ver.dup
|
||||
@remote_gem_version = gem_test_name.blank? ? Gem.latest_version_for(@gem_name).to_s : gem_test_version
|
||||
@gem_version = passed_version.split('-').first.to_s
|
||||
@gem_package_ver = @gem_version.dup
|
||||
# Use latest gem version.
|
||||
@gem_ver = @remote_gem_ver.to_s if Gem::Version.new(@remote_gem_ver.to_s) > Gem::Version.new(@gem_ver)
|
||||
@gem_version = @remote_gem_version.to_s if Gem::Version.new(@remote_gem_version.to_s) > Gem::Version.new(@gem_version)
|
||||
end
|
||||
|
||||
class RUBY < Package
|
||||
property :gem_name, :gem_ver, :ruby_install_extras
|
||||
property :gem_name, :gem_version, :ruby_install_extras
|
||||
|
||||
depends_on 'ruby'
|
||||
|
||||
@@ -84,12 +87,18 @@ class RUBY < Package
|
||||
set_vars(name, version)
|
||||
puts "Examining #{@gem_name} gem...".orange
|
||||
@gem_filelist_path = File.join(CREW_META_PATH, "#{name}.filelist")
|
||||
@gem_latest_version_installed = Kernel.system "gem search --no-update-sources -l -i \"^#{@gem_name}\$\" -v #{@gem_ver}", %i[out err] => File::NULL
|
||||
crewlog "preflight: @gem_name: #{@gem_name}, @gem_ver: #{@gem_ver}, @gem_latest_version_installed: #{@gem_latest_version_installed} && @remote_gem_ver.to_s: #{Gem::Version.new(@remote_gem_ver.to_s)} == Gem::Version.new(@gem_ver): #{Gem::Version.new(@gem_ver)} && File.file?(@gem_filelist_path): #{File.file?(@gem_filelist_path)}"
|
||||
installed_gem_search = [`gem list -l -e #{@gem_name}`.chomp.to_s].grep(/#{@gem_name}/)[0]
|
||||
if installed_gem_search
|
||||
installed_gem_info = installed_gem_search.delete('()').gsub('default:', '').gsub(',', '').split
|
||||
@gem_installed_version = installed_gem_info[1]
|
||||
@gem_outdated = (Gem::Version.new(@gem_version) < Gem::Version.new(@gem_installed_version))
|
||||
@gem_latest_version_installed = Gem::Version.new(@gem_version) <= Gem::Version.new(@gem_installed_version)
|
||||
end
|
||||
|
||||
# Create a filelist from the gem if the latest gem version is
|
||||
# installed but the filelist doesn't exist.
|
||||
Kernel.system "gem contents #{@gem_name}", %i[out] => [@gem_filelist_path, 'w'] if @gem_latest_version_installed && !File.file?(@gem_filelist_path)
|
||||
# If the version number gem reports isn't the same as the version
|
||||
# If the version number gem reports isn't newer than the version
|
||||
# number that Chromebrew has recorded, force an install.
|
||||
# Otherwise we can skip the install and bail.
|
||||
@device = ConvenienceFunctions.load_symbolized_json
|
||||
@@ -99,8 +108,8 @@ class RUBY < Package
|
||||
# Handle case of the Chromebrew gem pkg not yet having been
|
||||
# installed or having a changed version number despite the gem
|
||||
# having been installed.
|
||||
json_gem_pkg_ver = pkg_info[:version].gsub!('_', '-').to_s
|
||||
@install_gem = false if Gem::Version.new(@gem_ver) <= Gem::Version.new(json_gem_pkg_ver)
|
||||
@json_gem_pkg_version = pkg_info[:version].gsub!('_', '-').to_s
|
||||
@install_gem = false if Gem::Version.new(@gem_version) <= Gem::Version.new(@json_gem_pkg_version)
|
||||
end
|
||||
|
||||
def self.preinstall
|
||||
@@ -110,42 +119,40 @@ class RUBY < Package
|
||||
def self.build
|
||||
return unless !no_compile_needed? || @gem_binary_build_needed
|
||||
|
||||
Kernel.system "gem fetch #{@gem_name} --platform=ruby --version=#{@gem_ver}"
|
||||
Kernel.system "gem unpack #{@gem_name}-#{@gem_ver}.gem"
|
||||
Kernel.system "gem compile --strip --prune #{@gem_name}-#{@gem_ver}.gem -O #{CREW_DEST_DIR}/"
|
||||
Kernel.system "gem fetch #{@gem_name} --platform=ruby --version=#{@gem_version}"
|
||||
Kernel.system "gem unpack #{@gem_name}-#{@gem_version}.gem"
|
||||
Kernel.system "gem compile --strip --prune #{@gem_name}-#{@gem_version}.gem -O #{CREW_DEST_DIR}/"
|
||||
@just_built_gem = true
|
||||
end
|
||||
|
||||
def self.install
|
||||
@gem_latest_version_installed = Kernel.system "gem search --no-update-sources -l -i \"^#{@gem_name}\$\" -v #{@gem_ver}", %i[out err] => File::NULL
|
||||
gem_anyversion_installed = Kernel.system "gem search --no-update-sources -l -i \"^#{@gem_name}\$\"", %i[out err] => File::NULL
|
||||
crewlog "install: @gem_name: #{@gem_name}, @gem_ver: #{@gem_ver}, !@gem_latest_version_installed && gem_anyversion_installed: #{!@gem_latest_version_installed && gem_anyversion_installed}, @gem_latest_version_installed: #{@gem_latest_version_installed} && @remote_gem_ver.to_s: #{Gem::Version.new(@remote_gem_ver.to_s)} == Gem::Version.new(@gem_ver): #{Gem::Version.new(@gem_ver)} && File.file?(@gem_filelist_path): #{File.file?(@gem_filelist_path)}"
|
||||
crewlog "no_compile_needed?: #{no_compile_needed?} @gem_binary_build_needed.blank?: #{@gem_binary_build_needed.blank?}, gem_compile_needed?: #{gem_compile_needed?}"
|
||||
unless @install_gem
|
||||
puts "#{@gem_name} #{@gem_ver} is already installed.".lightgreen
|
||||
puts "#{@gem_name} #{@gem_installed_version} is properly installed.".lightgreen
|
||||
return
|
||||
end
|
||||
installed_gem_search = [`gem list --no-update-sources -l -e #{@gem_name}`.chomp.to_s].grep(/#{@gem_name}/)[0]
|
||||
if installed_gem_search
|
||||
installed_gem_info = installed_gem_search.delete('()').gsub('default:', '').gsub(',', '').split
|
||||
@gem_installed_version = installed_gem_info[1]
|
||||
@gem_outdated = (Gem::Version.new(@gem_version) < Gem::Version.new(@gem_installed_version))
|
||||
@gem_latest_version_installed = Gem::Version.new(@gem_version) <= Gem::Version.new(@gem_installed_version)
|
||||
end
|
||||
|
||||
crewlog "no_compile_needed?: #{no_compile_needed?} @gem_binary_build_needed.blank?: #{@gem_binary_build_needed.blank?}, gem_compile_needed?: #{gem_compile_needed?}"
|
||||
puts "#{@gem_name.capitalize} needs a binary gem built!".orange unless @gem_binary_build_needed.blank?
|
||||
if !no_compile_needed? || !@gem_binary_build_needed.blank? || gem_compile_needed?
|
||||
@gem_pkg = Package.load_package(File.join(CREW_PACKAGES_PATH, "#{name}.rb"))
|
||||
gem_pkg_sha256sum = PackageUtils.get_sha256(@gem_pkg)
|
||||
gem_sha256 = `sha256sum #{CREW_DEST_DIR}/#{@gem_name}-#{@gem_ver}-#{GEM_ARCH}.gem`.chomp.split.first
|
||||
|
||||
if File.file?("#{CREW_DEST_DIR}/#{@gem_name}-#{@gem_ver}-#{GEM_ARCH}.gem") && (gem_sha256 == gem_pkg_sha256sum || @just_built_gem)
|
||||
puts "Installing #{@gem_name} gem #{@gem_ver}...".orange
|
||||
Kernel.system "gem install --no-update-sources -N --local #{CREW_DEST_DIR}/#{@gem_name}-#{@gem_ver}-#{GEM_ARCH}.gem --conservative"
|
||||
end
|
||||
elsif gem_anyversion_installed && !@gem_latest_version_installed
|
||||
installed_gem_info = [`gem list -l -e #{@gem_name}`.chomp.to_s].grep(/#{@gem_name}/)[0].delete('()').gsub('default:', '').split
|
||||
@gem_installed_version = installed_gem_info[1]
|
||||
if Gem::Version.new(@gem_ver) < Gem::Version.new(@gem_installed_version)
|
||||
puts "Will not downgrade #{@gem_name} gem from #{@gem_installed_version} to #{@gem_ver} ...".orange
|
||||
else
|
||||
puts "Updating #{@gem_name} gem: #{@gem_installed_version} 🔜 #{@gem_ver} ...".orange
|
||||
Kernel.system "gem update --no-update-sources -N #{@gem_name} --conservative"
|
||||
gem_sha256 = `sha256sum #{CREW_DEST_DIR}/#{@gem_name}-#{@gem_version}-#{GEM_ARCH}.gem`.chomp.split.first
|
||||
if File.file?("#{CREW_DEST_DIR}/#{@gem_name}-#{@gem_version}-#{GEM_ARCH}.gem") && (gem_sha256 == gem_pkg_sha256sum || @just_built_gem)
|
||||
puts "Installing #{@gem_name} gem #{@gem_version}...".orange
|
||||
Kernel.system "gem install --no-update-sources -N --local #{CREW_DEST_DIR}/#{@gem_name}-#{@gem_version}-#{GEM_ARCH}.gem --conservative"
|
||||
end
|
||||
elsif @gem_outdated || Gem::Version.new(@gem_version) <= Gem::Version.new(@json_gem_pkg_version)
|
||||
puts "Updating #{@gem_name} gem: #{@gem_installed_version} 🔜 #{@gem_version} ...".orange
|
||||
Kernel.system "gem update --no-update-sources -N #{@gem_name} --conservative"
|
||||
elsif !@gem_latest_version_installed
|
||||
puts "Installing #{@gem_name} gem #{@gem_ver}...".orange
|
||||
puts "Installing #{@gem_name} gem #{@gem_version}...".orange
|
||||
Kernel.system "gem install --no-update-sources -N #{@gem_name} --conservative"
|
||||
end
|
||||
@gems_needing_cleanup = Array(@gems_needing_cleanup) << @gem_name unless @gem_latest_version_installed
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
require 'etc'
|
||||
|
||||
OLD_CREW_VERSION ||= defined?(CREW_VERSION) ? CREW_VERSION : '1.0'
|
||||
CREW_VERSION ||= '1.55.1' unless defined?(CREW_VERSION) && CREW_VERSION == OLD_CREW_VERSION
|
||||
CREW_VERSION ||= '1.55.2' unless defined?(CREW_VERSION) && CREW_VERSION == OLD_CREW_VERSION
|
||||
|
||||
# Kernel architecture.
|
||||
KERN_ARCH ||= Etc.uname[:machine]
|
||||
|
||||
@@ -35,24 +35,19 @@ def require_gem(gem_name_and_require = nil, require_override = nil)
|
||||
end
|
||||
require_gem('httpparty')
|
||||
|
||||
def check_gem_binary_build_needed(gem_name = nil, gem_ver = nil)
|
||||
puts "Checking to see if gem compile for #{gem_name} #{gem_ver} is needed..."
|
||||
def check_gem_binary_build_needed(gem_name = nil, gem_version = nil)
|
||||
puts "Checking to see if gem compile for #{gem_name} is needed..."
|
||||
@extract_dir = "#{gem_name}.#{Time.now.utc.strftime('%Y%m%d%H%M%S')}.dir"
|
||||
FileUtils.mkdir_p File.join(CREW_BREW_DIR, @extract_dir)
|
||||
Dir.chdir(File.join(CREW_BREW_DIR, @extract_dir)) do
|
||||
# Need to check if the gem has extensions. If it does, we need
|
||||
# either a compiler or a pre-compiled binary gem.
|
||||
system "gem fetch #{gem_name} --platform=ruby --version=#{gem_ver}"
|
||||
system "gem unpack #{gem_name}-#{gem_ver}.gem"
|
||||
if system "grep -q -r \"\\\.extensions\" #{gem_name}-#{gem_ver}/*.gemspec", %i[out err] => File::NULL
|
||||
puts "#{gem_name} #{gem_ver} needs a binary gem build."
|
||||
return true
|
||||
else
|
||||
puts "#{gem_name} #{gem_ver} does not need a binary gem build."
|
||||
return false
|
||||
end
|
||||
system "gem fetch #{gem_name} --platform=ruby --version=#{gem_version}"
|
||||
system "gem unpack #{gem_name}-#{gem_version}.gem"
|
||||
@build_needed = system "grep -q -r spec.extensions #{gem_name}-#{gem_version}/*.gemspec", %i[out err] => File::NULL
|
||||
end
|
||||
FileUtils.rm_rf File.join(CREW_BREW_DIR, @extract_dir)
|
||||
return @build_needed
|
||||
end
|
||||
|
||||
def check_gem_deps(package)
|
||||
|
||||
Reference in New Issue
Block a user