Skip to content

Bump Ruby from 4.0.1 to 4.0.9 - #1631

Merged
jrhoads merged 6 commits into
masterfrom
cursor-bump-ruby-4-0-9-1aea
Oct 26, 2026
Merged

jrhoads merged 6 commits into
masterfrom
cursor-bump-ruby-4-0-9-1aea

Conversation

@jrhoads

@jrhoads jrhoads commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Purpose

GitHub's ubuntu-latest label is Ubuntu 26.04 as of October 2026. That image publishes Ruby 4.0.9 and does not publish Ruby 4.0.1, so ruby/setup-ruby cannot install 4.0.1 there. Master temporarily pins the Ruby CI jobs to ubuntu-24.04 so 4.0.1 still installs. This removes that pin, bumps Ruby to 4.0.9, and moves the app image to Passenger 3.2.2.

Approach

Rebased onto current master after the crass 1.0.8 bump and the ubuntu-24.04 pin landed. Keep the lockfile bump. Change the Ruby pins from 4.0.1 to 4.0.9, set the two pinned jobs back to runs-on: ubuntu-latest, and install the MySQL client library Ubuntu 26.04 actually ships.

The Passenger base image is now phusion/passenger-ruby40:3.2.2, which already defaults to Ruby 4.0.9. Ubuntu 26.04 replaced ntp with ntpsec, and replaced ntpdate with ntpsec-ntpdate.

Specs start SimpleCov before Bootsnap. On Ruby 4.0.9, InstructionSequence#to_binary raises should not compile with coverage, and Bootsnap 1.23.0's load-time probe only rescues TypeError. Bootsnap 1.26.1 handles that.

Key Modifications

  • .ruby-version: ruby-4.0.1 → ruby-4.0.9
  • .github/workflows/rubocop.yml and .github/workflows/parallel_ci.yml: ruby-version: 4.0.9, and runs-on: ubuntu-24.04 → ubuntu-latest
  • .github/workflows/parallel_ci.yml: Sync time installs ntpsec-ntpdate and still runs ntpdate pool.ntp.org. Install libmysqlclient-dev (pulls libmysqlclient24) and key the gem cache to that library so mysql2 is not restored from a libmysqlclient.so.21 build
  • Dockerfile: FROM phusion/passenger-ruby40:3.2.2, install ntpsec instead of ntp, and drop the RVM default line because the base image already provides Ruby 4.0.9
  • Gemfile.lock: bootsnap 1.23.0 → 1.26.1. crass stays at 1.0.8

Important Technical Details

  • A local image build of phusion/passenger-ruby40:3.2.2 completed, and the container booted. GET /heartbeat returned OK from nginx and Phusion Passenger 6.2.1, running Ruby 4.0.9.
  • On Ruby 4.0.9, loading Bootsnap 1.23.0 after SimpleCov.start raises RuntimeError: should not compile with coverage from iseq.rb:23. Bootsnap 1.26.1 loads cleanly in that same setup. The Gemfile constraint ~> 1.23 already allowed 1.26.1.
  • BUNDLED WITH in Gemfile.lock is Bundler 4.0.14, not a Ruby version.
  • AGENTS.md still describes the Cursor Cloud VM, which has Ruby 4.0.1 installed via rbenv. That file is environment documentation, not a toolchain pin.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Reviewer, please remember our guidelines:

  • Be humble in the language and feedback you give, ask don't tell.
  • Consider using positive language as opposed to neutral when offering feedback. This is to avoid the negative bias that can occur with neutral language appearing negative.
  • Offer suggestions on how to improve code e.g. simplification or expanding clarity.
  • Ensure you give reasons for the changes you are proposing.
Open in Web Open in Cursor 

cursoragent and others added 2 commits October 26, 2026 15:04
Ubuntu 26.04, which ubuntu-latest tracks, publishes Ruby 4.0.9 and not 4.0.1. Keep GitHub Actions on ubuntu-latest and select 4.0.9 in the Dockerfile via RVM.

Co-authored-by: jrhoads <jrhoads@datacite.org>
Master pinned these jobs to ubuntu-24.04 so Ruby 4.0.1 would still install. Ruby 4.0.9 is published on Ubuntu 26.04, so the jobs can use GitHub's ubuntu-latest label again.

Co-authored-by: jrhoads <jrhoads@datacite.org>
@cursor
cursor Bot force-pushed the cursor-bump-ruby-4-0-9-1aea branch from d681268 to ff6213d Compare October 26, 2026 15:05
cursoragent and others added 4 commits October 26, 2026 15:16
Ubuntu 26.04 dropped the ntpdate package. ntpsec-ntpdate provides the ntpdate shim, so the parallel jobs can still step the clock on ubuntu-latest.

Co-authored-by: jrhoads <jrhoads@datacite.org>
The cached mysql2 extension was built against libmysqlclient.so.21. ubuntu-latest now provides libmysqlclient24, so install the 8.4 client headers and stop restoring the old gem cache.

Co-authored-by: jrhoads <jrhoads@datacite.org>
The 3.2.2 base already defaults to Ruby 4.0.9, so the RVM pin is unnecessary. Ubuntu 26.04 replaced the ntp package with ntpsec.

Co-authored-by: jrhoads <jrhoads@datacite.org>
Ruby 4.0.9 raises from InstructionSequence#to_binary when SimpleCov is already running. Bootsnap 1.23.0 probes that during load and only rescues TypeError. 1.26.1 handles the coverage error.

Co-authored-by: jrhoads <jrhoads@datacite.org>
@jrhoads
jrhoads marked this pull request as ready for review October 26, 2026 16:02
@jrhoads
jrhoads requested review from a team and richardhallett October 26, 2026 16:02
@jrhoads
jrhoads merged commit befa273 into master Oct 26, 2026
19 checks passed
@jrhoads
jrhoads deleted the cursor-bump-ruby-4-0-9-1aea branch October 26, 2026 16:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants