Skip to content

Conversation

@deivid-rodriguez
Copy link
Contributor

What was the end-user or developer problem that led to this PR?

Platform specific versions of ffi-1.17.2 are not compatible with Ruby 3.5, so Bundler fails to resolve in Ruby 3.5 using recorded VCR responses.

See https://github.com/rubygems/rubygems/actions/runs/16636459681/job/47078215546#step:6:359, copied below to make the error visible even when logs become unavailable:

Run options:
  include {realworld: true}
  exclude {man: false, truffleruby_only: true, jruby_only: true, readline: false, permissions: false, no_color_tty: true, ruby_repo: false, rubygems: "3.8.0.dev"}

Randomized with seed 12155
...........F

Failures:

  1) loading dynamically linked library on a bundle exec context passes ENV right after argv in memory
     Failure/Error:
             raise <<~ERROR
               #{error_header}

               ----------------------------------------------------------------------
               #{stdboth}
               ----------------------------------------------------------------------
             ERROR

     RuntimeError:


       Commands:
       $ gcc -g -o libfoo.so -shared -fpic libfoo.c
       # $? => 0
       Invoking `/home/runner/.rubies/ruby-head/bin/ruby /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/bin/bundle install` failed with output:

       ----------------------------------------------------------------------
       Retrying download gem from https://rubygems.org/ due to error (2/4): Gem::RemoteFetcher::FetchError Errno::ENOENT: No such file or directory @ rb_sysopen - /home/runner/work/rubygems/rubygems/bundler/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/ffi-1.17.2.gem/GET/response (https://rubygems.org/gems/ffi-1.17.2.gem)
       Retrying download gem from https://rubygems.org/ due to error (3/4): Gem::RemoteFetcher::FetchError Errno::ENOENT: No such file or directory @ rb_sysopen - /home/runner/work/rubygems/rubygems/bundler/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/ffi-1.17.2.gem/GET/response (https://rubygems.org/gems/ffi-1.17.2.gem)
       Retrying download gem from https://rubygems.org/ due to error (4/4): Gem::RemoteFetcher::FetchError Errno::ENOENT: No such file or directory @ rb_sysopen - /home/runner/work/rubygems/rubygems/bundler/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/ffi-1.17.2.gem/GET/response (https://rubygems.org/gems/ffi-1.17.2.gem)
       Bundler::HTTPError: Could not download gem from https://rubygems.org/ due to underlying error <Errno::ENOENT: No such file or directory @ rb_sysopen - /home/runner/work/rubygems/rubygems/bundler/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/ffi-1.17.2.gem/GET/response (https://rubygems.org/gems/ffi-1.17.2.gem)>
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/rubygems_integration.rb:406:in 'Bundler::RubygemsIntegration#download_gem'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/source/rubygems.rb:494:in 'Bundler::Source::Rubygems#download_gem'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/source/rubygems.rb:451:in 'Bundler::Source::Rubygems#fetch_gem'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/source/rubygems.rb:435:in 'Bundler::Source::Rubygems#fetch_gem_if_possible'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/source/rubygems.rb:177:in 'Bundler::Source::Rubygems#install'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/installer/gem_installer.rb:55:in 'Bundler::GemInstaller#install'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/installer/gem_installer.rb:17:in 'Bundler::GemInstaller#install_from_spec'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/installer/parallel_installer.rb:133:in 'Bundler::ParallelInstaller#do_install'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/installer/parallel_installer.rb:124:in 'block in Bundler::ParallelInstaller#worker_pool'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/worker.rb:62:in 'Bundler::Worker#apply_func'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/worker.rb:57:in 'block in Bundler::Worker#process_queue'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/worker.rb:54:in 'Kernel#loop'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/worker.rb:54:in 'Bundler::Worker#process_queue'
         /home/runner/work/rubygems/rubygems/bundler/tmp/2.1/gems/system/gems/bundler-2.8.0.dev/lib/bundler/worker.rb:90:in 'block (2 levels) in Bundler::Worker#create_threads'

       An error occurred while installing ffi (1.17.2), and Bundler cannot continue.

       In Gemfile:
         ffi
       Fetching gem metadata from https://rubygems.org/..
       Resolving dependencies...
       Fetching ffi 1.17.2
       ----------------------------------------------------------------------
     # ./spec/support/command_execution.rb:25:in 'Spec::CommandExecution#raise_error!'
     # ./spec/support/subprocess.rb:73:in 'Spec::Subprocess#sh'
     # ./spec/support/helpers.rb:209:in 'Spec::Helpers#sys_exec'
     # ./spec/support/helpers.rb:104:in 'Spec::Helpers#bundle'
     # ./spec/support/helpers.rb:293:in 'Spec::Helpers#install_gemfile'
     # ./spec/realworld/ffi_spec.rb:47:in 'block (2 levels) in <top (required)>'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example.rb:263:in 'BasicObject#instance_exec'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example.rb:263:in 'block in RSpec::Core::Example#run'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example.rb:511:in 'block in RSpec::Core::Example#with_around_and_singleton_context_hooks'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example.rb:468:in 'block in RSpec::Core::Example#with_around_example_hooks'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/hooks.rb:486:in 'block in RSpec::Core::Hooks::HookCollections#run'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/hooks.rb:626:in 'block in RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example.rb:352:in 'RSpec::Core::Example::Procsy#call'
     # ./spec/spec_helper.rb:113:in 'block (4 levels) in <top (required)>'
     # ./lib/bundler/ui/shell.rb:173:in 'Bundler::UI::Shell#with_level'
     # ./lib/bundler/ui/shell.rb:119:in 'Bundler::UI::Shell#silence'
     # ./spec/spec_helper.rb:113:in 'block (3 levels) in <top (required)>'
     # ./spec/support/helpers.rb:353:in 'block in Spec::Helpers#with_gem_path_as'
     # ./spec/support/helpers.rb:367:in 'Spec::Helpers#without_env_side_effects'
     # ./spec/support/helpers.rb:348:in 'Spec::Helpers#with_gem_path_as'
     # ./spec/spec_helper.rb:112:in 'block (2 levels) in <top (required)>'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example.rb:457:in 'BasicObject#instance_exec'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example.rb:457:in 'RSpec::Core::Example#instance_exec'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/hooks.rb:390:in 'RSpec::Core::Hooks::AroundHook#execute_with'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/hooks.rb:628:in 'block (2 levels) in RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example.rb:352:in 'RSpec::Core::Example::Procsy#call'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/hooks.rb:629:in 'RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/hooks.rb:486:in 'RSpec::Core::Hooks::HookCollections#run'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example.rb:468:in 'RSpec::Core::Example#with_around_example_hooks'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example.rb:511:in 'RSpec::Core::Example#with_around_and_singleton_context_hooks'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example.rb:259:in 'RSpec::Core::Example#run'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example_group.rb:646:in 'block in RSpec::Core::ExampleGroup.run_examples'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example_group.rb:642:in 'Array#map'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example_group.rb:642:in 'RSpec::Core::ExampleGroup.run_examples'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/example_group.rb:607:in 'RSpec::Core::ExampleGroup.run'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/runner.rb:121:in 'block (3 levels) in RSpec::Core::Runner#run_specs'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/runner.rb:121:in 'Array#map'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/runner.rb:121:in 'block (2 levels) in RSpec::Core::Runner#run_specs'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/configuration.rb:2097:in 'RSpec::Core::Configuration#with_suite_hooks'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/runner.rb:116:in 'block in RSpec::Core::Runner#run_specs'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/reporter.rb:74:in 'RSpec::Core::Reporter#report'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/runner.rb:115:in 'RSpec::Core::Runner#run_specs'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/runner.rb:89:in 'RSpec::Core::Runner#run'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/runner.rb:71:in 'RSpec::Core::Runner.run'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/lib/rspec/core/runner.rb:45:in 'RSpec::Core::Runner.invoke'
     # /home/runner/.rubies/ruby-head/lib/ruby/gems/3.5.0+2/gems/rspec-core-3.13.3/exe/rspec:4:in '<top (required)>'
     # ./spec/support/rubygems_ext.rb:121:in 'Kernel#load'
     # ./spec/support/rubygems_ext.rb:121:in 'Spec::Rubygems#gem_load_and_activate'
     # ./spec/support/rubygems_ext.rb:16:in 'Spec::Rubygems#gem_load'
     # bin/rspec:6:in '<main>'

Finished in 27.67 seconds (files took 0.96363 seconds to load)
12 examples, 1 failure

Failed examples:

rspec ./spec/realworld/ffi_spec.rb:4 # loading dynamically linked library on a bundle exec context passes ENV right after argv in memory

Randomized with seed 12155

rake aborted!
Command failed with status (1): [BUNDLER_SPEC_PRE_RECORDED=1 bin/rspec --tag realworld]
/home/runner/work/rubygems/rubygems/Rakefile:540:in 'block (3 levels) in <top (required)>'
/home/runner/work/rubygems/rubygems/Rakefile:539:in 'block (2 levels) in <top (required)>'
/home/runner/work/rubygems/rubygems/bundler/spec/support/rubygems_ext.rb:121:in 'Kernel#load'
/home/runner/work/rubygems/rubygems/bundler/spec/support/rubygems_ext.rb:121:in 'Spec::Rubygems#gem_load_and_activate'
/home/runner/work/rubygems/rubygems/bundler/spec/support/rubygems_ext.rb:16:in 'Spec::Rubygems#gem_load'
Tasks: TOP => spec:all => spec:realworld
(See full trace by running task with --trace)

What is your fix for the problem, implemented in this PR?

Also record the generic version of ffi-1.17.2 to fix that.

Make sure the following tasks are checked

@deivid-rodriguez deivid-rodriguez force-pushed the deivid-rodriguez/fix-daily-ci branch 2 times, most recently from d386583 to b64f674 Compare July 31, 2025 09:03
Platform specific versions of ffi-1.17.2 are not compatible with Ruby
3.5, so Bundler fails to resolve in Ruby 3.5 using recorded VCR
responses.

Use the generic version of ffi-1.17.2, which should work for all rubies,
consistently to fix that.
@deivid-rodriguez deivid-rodriguez force-pushed the deivid-rodriguez/fix-daily-ci branch from b64f674 to a192f7e Compare July 31, 2025 11:41
@deivid-rodriguez deivid-rodriguez marked this pull request as ready for review July 31, 2025 11:41
@deivid-rodriguez deivid-rodriguez merged commit c3a378b into master Jul 31, 2025
76 checks passed
@deivid-rodriguez deivid-rodriguez deleted the deivid-rodriguez/fix-daily-ci branch July 31, 2025 13:12
deivid-rodriguez added a commit that referenced this pull request Sep 4, 2025
deivid-rodriguez added a commit that referenced this pull request Sep 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant