tasks/package.rake in kpm-0.11.0 vs tasks/package.rake in kpm-0.11.1

- old
+ new

@@ -7,53 +7,67 @@ PACKAGE_NAME = 'kpm' require './lib/kpm/version' VERSION = KPM::VERSION -# See https://traveling-ruby.s3-us-west-2.amazonaws.com/list.html -TRAVELING_RUBY_VERSION = '20150715-2.2.2' +# See https://www.jruby.org/download +JRUBY_VERSION = '9.3.4.0' +# See https://github.com/Homebrew/homebrew-portable-ruby/releases +HOMEBREW_PORTABLE_RUBY_VERSION = '2.6.8_1' # Remove unused files to reduce package size GEMS_PATH = 'packaging/vendor/ruby/*/gems/*/' REMOVE_FILES = %w[test tests spec README* CHANGE* Change* COPYING* LICENSE* MIT-LICENSE* doc docs examples ext/*/Makefile .gitignore .travis.yml].freeze REMOVE_EXTENSIONS = %w[*.md *.c *.h *.rl extconf.rb *.java *.class *.so *.o].freeze +NOARCH_TARGET = 'noarch' +LINUX_X86_TARGET = 'x86_64_linux' +OSX_X86_TARGET = 'el_capitan' +OSX_ARM_TARGET = 'arm64_big_sur' + desc 'Package your app' -task package: %w[package:linux:x86 package:linux:x86_64 package:osx] +task package: %w[package:noarch package:linux:x86_64 package:osx:x86_64 package:osx:arm64] namespace :package do - namespace :linux do - desc 'Package KPM for Linux x86' - task x86: [:bundle_install, "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86.tar.gz"] do - create_package('linux-x86') - end + desc 'Package KPM (noarch)' + task noarch: [:bundle_install, "packaging/jruby-dist-#{JRUBY_VERSION}-bin.tar.gz"] do + create_package(NOARCH_TARGET, 'noarch') + end + namespace :linux do desc 'Package KPM for Linux x86_64' - task x86_64: [:bundle_install, "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86_64.tar.gz"] do - create_package('linux-x86_64') + task x86_64: [:bundle_install, "packaging/portable-ruby-#{HOMEBREW_PORTABLE_RUBY_VERSION}.#{LINUX_X86_TARGET}.bottle.tar.gz"] do + ensure_ruby_version + create_package(LINUX_X86_TARGET, 'linux-x86_64') end end - desc 'Package KPM for OS X' - task osx: [:bundle_install, "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx.tar.gz"] do - create_package('osx') + namespace :osx do + desc 'Package KPM for OSX x86_64' + task x86_64: [:bundle_install, "packaging/portable-ruby-#{HOMEBREW_PORTABLE_RUBY_VERSION}.#{OSX_X86_TARGET}.bottle.tar.gz"] do + ensure_ruby_version + create_package(OSX_X86_TARGET, 'osx') + end + + desc 'Package KPM for OSX arm64' + task arm64: [:bundle_install, "packaging/portable-ruby-#{HOMEBREW_PORTABLE_RUBY_VERSION}.#{OSX_ARM_TARGET}.bottle.tar.gz"] do + ensure_ruby_version + create_package(OSX_ARM_TARGET, 'osx-arm64') + end end desc 'Install gems to local directory' task bundle_install: [:clean] do # abort if version packaging does not exist on repository abort "KPM #{VERSION} does not exists in the repository." unless gem_exists? - # Note! Must match TRAVELING_RUBY_VERSION above - expected_ruby_version = TRAVELING_RUBY_VERSION.split('-')[-1] - abort "You can only 'bundle install' using Ruby #{expected_ruby_version}, because that's what Traveling Ruby uses." if RUBY_VERSION !~ /#{Regexp.quote(expected_ruby_version)}/ sh 'rm -rf packaging/tmp' sh 'mkdir -p packaging/tmp' sh 'cp packaging/Gemfile packaging/tmp/' sh "sed -i 's/VERSION/#{VERSION}/g' packaging/tmp/Gemfile" - sh "rm -rf packaging/vendor/ruby/#{expected_ruby_version}/bundler" # if multiple clones of same repo, may load in wrong one + sh 'rm -rf packaging/vendor/ruby/2.*/bundler' # if multiple clones of same repo, may load in wrong one Bundler.with_clean_env do sh 'cd packaging/tmp && env BUNDLE_IGNORE_CONFIG=1 bundle install --path ../vendor --without development' end @@ -78,32 +92,46 @@ sh 'rm -rf packaging/vendor' sh 'rm -rf packaging/*.tar.gz' end end -file "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86.tar.gz" do - download_runtime('linux-x86') +file "packaging/jruby-dist-#{JRUBY_VERSION}-bin.tar.gz" do + download_noarch_runtime end -file "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86_64.tar.gz" do - download_runtime('linux-x86_64') +file "packaging/portable-ruby-#{HOMEBREW_PORTABLE_RUBY_VERSION}.#{LINUX_X86_TARGET}.bottle.tar.gz" do + download_portable_runtime(LINUX_X86_TARGET) end -file "packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx.tar.gz" do - download_runtime('osx') +file "packaging/portable-ruby-#{HOMEBREW_PORTABLE_RUBY_VERSION}.#{OSX_X86_TARGET}.bottle.tar.gz" do + download_portable_runtime(OSX_X86_TARGET) end -def create_package(target) - package_dir = "#{PACKAGE_NAME}-#{VERSION}-#{target}" +file "packaging/portable-ruby-#{HOMEBREW_PORTABLE_RUBY_VERSION}.#{OSX_ARM_TARGET}.bottle.tar.gz" do + download_portable_runtime(OSX_ARM_TARGET) +end + +def create_package(target, package_dir_suffix) + pom_version = %r{<version>(.*)</version>}.match(File.read("#{__dir__}/../pom.xml"))[1] + package_dir = "#{PACKAGE_NAME}-#{pom_version}-#{package_dir_suffix}" sh "rm -rf #{package_dir}" sh "mkdir -p #{package_dir}/lib/ruby" - sh "tar -xzf packaging/traveling-ruby-#{TRAVELING_RUBY_VERSION}-#{target}.tar.gz -C #{package_dir}/lib/ruby" + if target == NOARCH_TARGET + sh "tar -xzf packaging/jruby-dist-#{JRUBY_VERSION}-bin.tar.gz -C #{package_dir}/lib/ruby --strip-components 1" + else + sh "tar -xzf packaging/portable-ruby-#{HOMEBREW_PORTABLE_RUBY_VERSION}.#{target}.bottle.tar.gz -C #{package_dir}/lib/ruby --strip-components 2" + end sh "cp packaging/kpm.sh #{package_dir}/kpm" sh "chmod +x packaging/kpm.sh #{package_dir}/kpm" sh "cp -pR packaging/vendor #{package_dir}/lib/" + if target == NOARCH_TARGET + # Need to tweak a few things to make it work with JRuby + sh "cp #{package_dir}/lib/ruby/bin/jruby #{package_dir}/lib/ruby/bin/ruby" + sh "mv #{package_dir}/lib/vendor/ruby #{package_dir}/lib/vendor/jruby" + end sh "cp packaging/Gemfile* #{package_dir}/lib/vendor/" sh "sed -i 's/VERSION/#{VERSION}/g' #{package_dir}/lib/vendor/Gemfile" sh "mkdir #{package_dir}/lib/vendor/.bundle" sh "cp packaging/bundler-config #{package_dir}/lib/vendor/.bundle/config" @@ -112,17 +140,28 @@ sh "tar -czf #{package_dir}.tar.gz #{package_dir}" sh "rm -rf #{package_dir}" end -def download_runtime(target) +def download_noarch_runtime sh 'mkdir -p packaging && cd packaging && curl -L -O --fail ' \ - "https://d6r77u77i8pq3.cloudfront.net/releases/traveling-ruby-#{TRAVELING_RUBY_VERSION}-#{target}.tar.gz" + "https://repo1.maven.org/maven2/org/jruby/jruby-dist/#{JRUBY_VERSION}/jruby-dist-#{JRUBY_VERSION}-bin.tar.gz" end +def download_portable_runtime(target) + sh 'mkdir -p packaging && cd packaging && curl -L -O --fail ' \ + "https://github.com/Homebrew/homebrew-portable-ruby/releases/download/#{HOMEBREW_PORTABLE_RUBY_VERSION}/portable-ruby-#{HOMEBREW_PORTABLE_RUBY_VERSION}.#{target}.bottle.tar.gz" +end + def gem_exists? response = `gem specification 'kpm' -r -v #{VERSION} 2>&1` return false if response.nil? specification = YAML.load(response) specification.instance_of?(Gem::Specification) +end + +def ensure_ruby_version + # Note! Must match HOMEBREW_PORTABLE_RUBY_VERSION above + expected_ruby_version = HOMEBREW_PORTABLE_RUBY_VERSION.split('_')[0] + abort "You can only 'bundle install' using Ruby #{expected_ruby_version}, because that's what homebrew-portable-ruby uses." if RUBY_VERSION !~ /#{Regexp.quote(expected_ruby_version)}/ end