lib/cocoapods-jxedt/binary/hooks/pre_install.rb in cocoapods-jxedt-0.0.12 vs lib/cocoapods-jxedt/binary/hooks/pre_install.rb in cocoapods-jxedt-0.0.13

- old
+ new

@@ -14,43 +14,63 @@ def run # check binary switch return unless Jxedt.config.binary_switch? - # [Check Environment] - podfile = @installer_context.podfile - podfile.target_definition_list.each do |target_definition| - raise STDERR.puts "[!] Cocoapods-binary requires `use_frameworks!`".red if not target_definition.uses_frameworks? + unless Gem::Version.new(Pod::VERSION) >= Gem::Version.new('1.10.0') + raise STDERR.puts "[!] cocoapods-jxedt binary plugin should use cocoapods version greater than '1.10.0'`".red end require_relative '../helper/prebuild_sandbox' # 如果是Pod::PrebuildSandbox类则直接返回 return if @installer_context.sandbox.is_a?(Pod::PrebuildSandbox) # 获取原始的installer对象,必须先获取对象 original_installer = ObjectSpace.each_object(Pod::Installer).first - sandbox = Pod::PrebuildSandbox.from_standard_sandbox(@installer_context.sandbox) - source_installer = Pod::Installer.new(sandbox, @installer_context.podfile, @installer_context.lockfile) + prebuild_sandbox = Pod::PrebuildSandbox.from_standard_sandbox(@installer_context.sandbox) + source_installer = Pod::Installer.new(prebuild_sandbox, @installer_context.podfile, @installer_context.lockfile) # 设置原始的installer携带的参数 source_installer.update = original_installer.update source_installer.repo_update = original_installer.repo_update # 执行install source_installer.install! # 保存首次`pod install`的lockfile结果,用来验证二进制文件和后面做结果校验 - @installer_context.sandbox.source_lockfile = sandbox.source_lockfile = source_installer.lockfile + @installer_context.sandbox.source_lockfile = prebuild_sandbox.source_lockfile = source_installer.lockfile require_relative '../helper/podfile_options' require_relative '../prebuild' + # fetch cache and sync + if Jxedt.config.cache_repo_enabled? && Jxedt.config.auto_fetch? + log_section "🚗 Fetch git cache" + pods = prebuild_sandbox.source_lockfile.internal_data["SPEC CHECKSUMS"].keys + binary_hash = pods.reduce({}) do |hash, name| + checksum = prebuild_sandbox.source_lockfile.spec_checksums_hash_key(name) + hash.update(name => checksum) unless checksum.nil? + end + + require 'cocoapods-jxedt/git_helper/cache_fetcher' + binary_dir = @installer_context.sandbox.root + Jxedt.config.binary_dir + Jxedt::CacheFetcher.sync(binary_hash, binary_dir) + end + # prebuild_job - sandbox.link_source_project! + prebuild_sandbox.link_source_project! if Jxedt.config.prebuild_job? log_section "🚀 Prebuild frameworks" - Jxedt::Prebuild.new(source_installer).build + build_targets = Jxedt::Prebuild.new(source_installer).build + + # cache push + if Jxedt.config.cache_repo_enabled? && Jxedt.config.auto_push? && build_targets && build_targets.size > 0 + log_section "🚄 Push git cache" + require 'cocoapods-jxedt/git_helper/cache_pucher' + output_dir = prebuild_sandbox.root + Jxedt.config.binary_dir + Jxedt::CachePucher.push(output_dir, build_targets, false) + end end - sandbox.clean_source_project! + prebuild_sandbox.clean_source_project! log_section "🤖 Resume pod installation" require_relative '../targets/pod_target' require_relative '../Intergation' end \ No newline at end of file