diff --git a/Rakefile b/Rakefile index 820656c32b87..82b22ccf3a82 100644 --- a/Rakefile +++ b/Rakefile @@ -9,7 +9,7 @@ require "rake/testtask" require_relative "spec/support/rubygems_ext" desc "Setup Rubygems dev environment" -task setup: [:"dev:deps", "vendor:compact_index"] do +task setup: [:"dev:deps"] do Dir.glob("tool/bundler/*_gems.rb").each do |file| name = File.basename(file, ".rb") next if name == "dev_gems" @@ -17,36 +17,6 @@ task setup: [:"dev:deps", "vendor:compact_index"] do end end -namespace :vendor do - # Pinned to rubygems/rubygems.org#6504 so `rake setup` stays reproducible. - # Override with REF= to test against a newer compact_index. - desc "Sync vendored compact_index from rubygems/rubygems.org" - task :compact_index do - require "open-uri" - require "fileutils" - - ref = ENV["REF"] || "7c68a7b39761c61a66f9299f85b889ec39afc02c" - repo = "rubygems/rubygems.org" - paths = %w[ - lib/compact_index.rb - lib/compact_index/dependency.rb - lib/compact_index/gem.rb - lib/compact_index/gem_version.rb - lib/compact_index/versions_file.rb - ] - - target_root = Spec::Path.tmp_root.join("compact_index") - paths.each do |path| - url = "https://raw.githubusercontent.com/#{repo}/#{ref}/#{path}" - puts "Fetching #{url}" - content = URI.parse(url).open(&:read) - target = File.join(target_root, path) - FileUtils.mkdir_p(File.dirname(target)) - File.write(target, content) - end - end -end - desc "Update Rubygems dev environment" task :update do Spec::Rubygems.dev_bundle "update", "--all" diff --git a/spec/support/rubygems_ext.rb b/spec/support/rubygems_ext.rb index cf639a660a04..9ff0138f2ccd 100644 --- a/spec/support/rubygems_ext.rb +++ b/spec/support/rubygems_ext.rb @@ -73,6 +73,38 @@ def install_test_deps require_relative "helpers" Helpers.install_dev_bundler + + install_vendored_compact_index + end + + # Vendor `rubygems/rubygems.org#lib/compact_index/` under `tmp/compact_index/` + # so the artifice can serve compact-index responses without a runtime gem + # dependency. Pinned to a reviewed commit; override with COMPACT_INDEX_REF + # to refresh against another ref (the existing vendor copy is discarded). + def install_vendored_compact_index + target_root = Path.tmp_root.join("compact_index") + require "fileutils" + + if ENV["COMPACT_INDEX_REF"] + FileUtils.rm_rf(target_root) + elsif File.exist?(target_root.join("lib/compact_index.rb")) + return + end + + require "open-uri" + ref = ENV["COMPACT_INDEX_REF"] || "7c68a7b39761c61a66f9299f85b889ec39afc02c" + %w[ + lib/compact_index.rb + lib/compact_index/dependency.rb + lib/compact_index/gem.rb + lib/compact_index/gem_version.rb + lib/compact_index/versions_file.rb + ].each do |path| + url = "https://raw.githubusercontent.com/rubygems/rubygems.org/#{ref}/#{path}" + target = target_root.join(path) + FileUtils.mkdir_p(File.dirname(target)) + File.write(target, URI.parse(url).open(&:read)) + end end def check_source_control_changes(success_message:, error_message:)