Fake BUNDLE_GEMFILE and BUNDLE_LOCKFILE to let checks pass

Bundler::Runtime#setup requires a real existing lockfile (see
Bundler::SharedHelpers#default_lockfile).
This commit is contained in:
Daisuke Aritomo 2025-12-04 20:56:31 +09:00 committed by Hiroshi SHIBATA
parent 943b085949
commit 270c7fcec1
Notes: git 2026-01-15 07:16:52 +00:00

View File

@ -209,13 +209,24 @@ module Gem::BUNDLED_GEMS # :nodoc:
builder = Bundler::Dsl.new
lockfile = nil
if Bundler::SharedHelpers.in_bundle? && Bundler.definition.gemfiles.size > 0
Bundler.definition.gemfiles.each {|gemfile| builder.eval_gemfile(gemfile) }
lockfile = begin
Bundler.default_lockfile
rescue Bundler::GemfileNotFound
nil
end
else
# Fake BUNDLE_GEMFILE and BUNDLE_LOCKFILE to let checks pass
orig_gemfile = ENV["BUNDLE_GEMFILE"]
orig_lockfile = ENV["BUNDLE_LOCKFILE"]
Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", "Gemfile"
Bundler::SharedHelpers.set_env "BUNDLE_LOCKFILE", "Gemfile.lock"
end
builder.gem gem
lockfile = Bundler.default_lockfile
definition = builder.to_definition(lockfile, nil)
definition.validate_runtime!
@ -232,6 +243,8 @@ module Gem::BUNDLED_GEMS # :nodoc:
rescue Bundler::GemNotFound
warn "Failed to activate #{gem}, please install it with 'gem install #{gem}'"
ensure
ENV['BUNDLE_GEMFILE'] = orig_gemfile if orig_gemfile
ENV['BUNDLE_LOCKFILE'] = orig_lockfile if orig_lockfile
Bundler.ui = orig_ui
Bundler::Definition.no_lock = orig_no_lock
end