Files
chromebrew/tools/create_default_gems_packages.rb
Satadru Pramanik, DO, MPH, MEng c78b28be9e Add packages for default and bundled Ruby gems. (#10535)
* Update create_gem_packages.

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* Add default gems package.

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* Add default gems to core.

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* Handle gem names with underscores and dashes.

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* Try to make gem reinstalls faster.

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* Update awscli.

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* Adjust early gem install exit logic.

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* Adjust default packages script.

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* Gem install refactoring...

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* Refactor gem compile.

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* Fix create_gem_packages description.

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* Work around matrix removal breaking crew.

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

* lint

Signed-off-by: Satadru Pramanik <satadru@gmail.com>

---------

Signed-off-by: Satadru Pramanik <satadru@gmail.com>
2024-09-28 13:31:25 -05:00

114 lines
3.6 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# create_default_gems_packages version 1.0 (for Chromebrew)
# This creates a default_gems package and a bundled_gems package based
# upon:
# https://stdgems.org/default_gems.json
# https://stdgems.org/bundled_gems.json
#
# Author: Satadru Pramanik (satmandu) satadru at gmail dot com
# Usage in root of cloned chromebrew repo with a new branch checked out:
# tools/create_default_gems_packages.rb
require 'fileutils'
require 'json'
require_relative '../lib/color'
require_relative '../lib/const'
def require_gem(gem_name_and_require = nil, require_override = nil)
# Allow only loading gems when needed.
return if gem_name_and_require.nil?
gem_name = gem_name_and_require.split('/')[0]
begin
gem gem_name
rescue LoadError
puts " -> install #{gem_name} gem".orange
Gem.install(gem_name)
gem gem_name
end
requires = if require_override.nil?
gem_name_and_require.split('/')[1].nil? ? gem_name_and_require.split('/')[0] : gem_name_and_require
else
require_override
end
require requires
end
require_gem('httpparty')
def create_default_gems_package
# https://stdgems.org/default_gems.json
default_gem_json = JSON.parse(HTTParty.get('https://stdgems.org/default_gems.json').body)
default_gems = default_gem_json['gems'].map { |i| i['gem'] }
default_gems.delete('win32ole')
puts 'Default Gems are:'
puts default_gems
dependencyblock = ''
dependencyblock << default_gems.sort.map { |d| " depends_on 'ruby_#{d.gsub('-', '_')}'" }.join("\n").to_s
default_gems_pkg = <<~GEM_PKG_EOF
# Generated by tools/create_default_gems_package.rb
require 'package'
class Default_gems < Package
description 'Ruby Default Gem Packages.'
homepage 'https://stdgems.org/'
version "#{Time.now.utc.strftime('%Y%m%d%H')}-\#{CREW_RUBY_VER}"
license 'GPL-3+'
compatibility 'all'
source_url 'SKIP'
is_fake
#{dependencyblock}
end
GEM_PKG_EOF
puts 'Package for default_gems:'.orange
puts default_gems_pkg.to_s.lightblue
puts
File.write(File.join('packages', 'default_gems.rb'), default_gems_pkg)
system "rubocop -c .rubocop.yml -A #{File.join('packages', 'default_gems.rb')}"
FileUtils.chmod 0o644, File.join('packages', 'default_gems.rb')
end
def create_bundled_gems_package
# https://stdgems.org/bundled_gems.json
bundled_gem_json = JSON.parse(HTTParty.get('https://stdgems.org/bundled_gems.json').body)
bundled_gems = bundled_gem_json['gems'].map { |i| i['gem'] }
puts 'Bundled Gems are:'
puts bundled_gems
dependencyblock = ''
dependencyblock << bundled_gems.sort.map { |d| " depends_on 'ruby_#{d.gsub('-', '_')}'" }.join("\n").to_s
bundled_gems_pkg = <<~GEM_PKG_EOF
# Generated by tools/create_default_gems_package.rb
require 'package'
class Bundled_gems < Package
description 'Ruby Bundled Gem Packages.'
homepage 'https://stdgems.org/'
version "#{Time.now.utc.strftime('%Y%m%d%H')}-\#{CREW_RUBY_VER}"
license 'GPL-3+'
compatibility 'all'
source_url 'SKIP'
is_fake
#{dependencyblock}
end
GEM_PKG_EOF
puts 'Package for bundled_gems:'.orange
puts bundled_gems_pkg.to_s.lightblue
puts
File.write(File.join('packages', 'bundled_gems.rb'), bundled_gems_pkg)
system "rubocop -c .rubocop.yml -A #{File.join('packages', 'bundled_gems.rb')}"
FileUtils.chmod 0o644, File.join('packages', 'bundled_gems.rb')
end
puts "Creating default_gems package from https://stdgems.org/default_gems.json'...".orange
create_default_gems_package
puts "Creating bundled_gems package from https://stdgems.org/bundled_gems.json'...".orange
create_bundled_gems_package