Skip to content

[rb] Update ruby to 3.3.9#17484

Merged
titusfortner merged 4 commits into
SeleniumHQ:trunkfrom
aguspe:rb-upgrade-ruby-3.3.9
May 17, 2026
Merged

[rb] Update ruby to 3.3.9#17484
titusfortner merged 4 commits into
SeleniumHQ:trunkfrom
aguspe:rb-upgrade-ruby-3.3.9

Conversation

@aguspe
Copy link
Copy Markdown
Contributor

@aguspe aguspe commented May 16, 2026

🔗 Related Issues

Last ruby updated #15714

💥 What does this PR do?

Bumps the minimum Ruby version from 3.2 to 3.3.9 since CRuby 3.2 is EOL since March 2026

🔧 Implementation Notes

  • Bumped .ruby-version to 3.3.9
  • Raised required_ruby_version to >= 3.3 in both gemspecs
  • Set rubocop TargetRubyVersion: 3.3
  • Updated README minimum to MRI >= 3.3
  • Updated CI matrix with the new Ruby versions

🤖 AI assistance

  • AI assisted (complete below)
    • Tool(s): Claude
    • What was generated: I used it to review the PR and compare with other PRs doing similar things
    • I reviewed all AI output and can explain the change

🔄 Types of changes

  • Breaking change (raises required_ruby_version, so users on Ruby 3.2 will need to upgrade before installing the new gem)

@selenium-ci selenium-ci added C-rb Ruby Bindings B-build Includes scripting, bazel and CI integrations labels May 16, 2026
@aguspe aguspe changed the title update ruby to 3.3.9 [rb] Update ruby to 3.3.9 May 16, 2026
@aguspe aguspe marked this pull request as ready for review May 16, 2026 15:27
@aguspe aguspe requested review from p0deje and titusfortner May 16, 2026 15:27
@qodo-code-review
Copy link
Copy Markdown
Contributor

Review Summary by Qodo

Update Ruby minimum version to 3.3.9

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Bumps minimum Ruby version from 3.2 to 3.3
• Updates CI matrix with latest Ruby versions
• Updates rubocop target version to 3.3
• Updates documentation and gemspec requirements
Diagram
flowchart LR
  A["Ruby 3.2"] -->|"Upgrade to"| B["Ruby 3.3.9"]
  B -->|"Updates"| C["Gemspecs"]
  B -->|"Updates"| D["CI Matrix"]
  B -->|"Updates"| E["Rubocop Config"]
  B -->|"Updates"| F["Documentation"]
Loading

Grey Divider

File Changes

1. rb/selenium-devtools.gemspec ⚙️ Configuration changes +1/-1

Update required Ruby version to 3.3

• Updates required_ruby_version from >= 3.2 to >= 3.3

rb/selenium-devtools.gemspec


2. rb/selenium-webdriver.gemspec ⚙️ Configuration changes +1/-1

Update required Ruby version to 3.3

• Updates required_ruby_version from >= 3.2 to >= 3.3

rb/selenium-webdriver.gemspec


3. .github/workflows/ci-ruby.yml ⚙️ Configuration changes +6/-8

Update CI Ruby versions in test matrix

• Updates primary test matrix from Ruby 3.2.9 to 3.3.9 across all OS platforms
• Updates secondary Ruby version from 3.4.3 to 4.0.4
• Updates JRuby from 10.0.2.0 to 10.1.0.0
• Updates TruffleRuby from 33.0.0 to 34.0.1

.github/workflows/ci-ruby.yml


View more (3)
4. rb/.rubocop.yml ⚙️ Configuration changes +1/-1

Update rubocop target Ruby version

• Updates TargetRubyVersion from 3.2 to 3.3

rb/.rubocop.yml


5. rb/.ruby-version ⚙️ Configuration changes +1/-1

Update .ruby-version file

• Updates Ruby version from 3.2.9 to 3.3.9

rb/.ruby-version


6. rb/README.md 📝 Documentation +1/-1

Update minimum Ruby version in documentation

• Updates minimum supported MRI version from >= 3.2 to >= 3.3

rb/README.md


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown
Contributor

qodo-code-review Bot commented May 16, 2026

Code Review by Qodo

🐞 Bugs (4) 📘 Rule violations (1)

Grey Divider


Remediation recommended

1. Docs mention wrong Ruby 🐞 Bug ⚙ Maintainability
Description
After updating RuboCop’s TargetRubyVersion to 3.3, rb/AGENTS.md still states RuboCop targets Ruby
3.2. This creates incorrect contributor guidance and can lead to confusion about which Ruby
syntax/style baseline CI enforces.
Code

rb/.rubocop.yml[7]

+  TargetRubyVersion: 3.3
Evidence
The PR updates RuboCop’s configured TargetRubyVersion to 3.3, but the contributor guide still claims
the target is Ruby 3.2, which is now inconsistent with the actual lint configuration.

rb/.rubocop.yml[6-8]
rb/AGENTS.md[53-55]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`rb/.rubocop.yml` now configures RuboCop to target Ruby 3.3, but `rb/AGENTS.md` still documents Ruby 3.2 as the lint target.

### Issue Context
This PR intentionally bumps Ruby to 3.3.x, so contributor documentation should match the new lint baseline to avoid misleading guidance.

### Fix Focus Areas
- rb/AGENTS.md[53-55]
- rb/.rubocop.yml[6-8]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Ruby 3.2 install breaks 📘 Rule violation ≡ Correctness
Description
The PR raises required_ruby_version from >= 3.2 to >= 3.3, removing Ruby 3.2 support and
preventing users on Ruby 3.2 from installing or upgrading the published gems without changing their
runtime. This is an abrupt compatibility-breaking change for the Ruby binding distribution contract
because it drops prior functionality without accompanying deprecation or migration guidance.
Code

rb/selenium-webdriver.gemspec[33]

+  s.required_ruby_version = Gem::Requirement.new('>= 3.3')
Evidence
PR Compliance ID 2 requires avoiding breaking public compatibility, and PR Compliance ID 5 requires
deprecating public functionality before removal with guidance to alternatives. The cited changes
update the gemspec required_ruby_version constraints and the README minimum version to explicitly
drop Ruby 3.2 support, which blocks installation/upgrades for Ruby 3.2 users; however, the modified
user-facing materials do not include a deprecation-style or migration note (e.g., in CHANGES/README)
to prepare users and direct them to the alternative of upgrading Ruby.

AGENTS.md
rb/selenium-webdriver.gemspec[32-34]
rb/selenium-devtools.gemspec[30-32]
rb/README.md[6-6]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The PR introduces an abrupt breaking change by raising the minimum supported Ruby version to `>= 3.3`, which prevents users on Ruby 3.2 from installing or upgrading the gems, and it does so without adding deprecation/migration guidance to user-facing documentation.

## Issue Context
Compliance expects public compatibility to be preserved unless a break is explicitly intended and handled per project policy, typically via staged deprecation and/or clear upgrade guidance and release notes. Because the gemspec requirement blocks Ruby 3.2 from installing the gem, users need explicit notice in documentation/release notes about the removal of Ruby 3.2 support and what action to take (upgrade Ruby).

## Fix Focus Areas
- rb/selenium-webdriver.gemspec[32-34]
- rb/selenium-devtools.gemspec[30-32]
- rb/README.md[6-6]
- rb/CHANGES[1-15]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Untested supported Ruby versions 🐞 Bug ☼ Reliability
Description
Both gemspecs declare required_ruby_version >= 3.3, but CI/toolchain pins and tests Ruby 3.3.9,
meaning Ruby 3.3.03.3.8 are treated as supported without any coverage. This can allow releases
to install on versions you don't test, leading to uncaught runtime failures for users on earlier
3.3.x patches.
Code

rb/selenium-webdriver.gemspec[33]

+  s.required_ruby_version = Gem::Requirement.new('>= 3.3')
Evidence
The repo pins Ruby to 3.3.9 (and CI runs it), but the gemspecs declare support starting at 3.3.0,
creating a support-vs-tested mismatch.

rb/.ruby-version[1-1]
.github/workflows/ci-ruby.yml[32-45]
rb/selenium-webdriver.gemspec[32-34]
rb/selenium-devtools.gemspec[30-32]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The gemspecs allow Ruby `>= 3.3`, but the repo pins/tests Ruby `3.3.9`, leaving a coverage gap for Ruby `3.3.0`–`3.3.8`.

## Issue Context
- `rb/.ruby-version` is used by Bazel rules_ruby toolchain selection.
- GitHub Actions CI sets `rb/.ruby-version` from the matrix for unit tests.

## Fix Focus Areas
- Decide the real minimum supported Ruby patch level:
 - If the minimum is truly `3.3.9`, update both gemspecs to `>= 3.3.9`.
 - If the minimum is `3.3.0`, add CI coverage for a lowest-supported 3.3.x patch and consider pinning `rb/.ruby-version` to a representative dev version separately.
- file updates:
 - rb/selenium-webdriver.gemspec[32-34]
 - rb/selenium-devtools.gemspec[30-32]
 - rb/.ruby-version[1-1]
 - .github/workflows/ci-ruby.yml[32-45]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View more (2)
4. Ruby 3.4 CI dropped 🐞 Bug ☼ Reliability
Description
The CI matrix no longer runs tests on any Ruby 3.4.x version, even though the gemspecs support Ruby
>= 3.3 (which includes 3.4.x). This reduces coverage for Ruby 3.4 users and can hide regressions
specific to that minor line.
Code

.github/workflows/ci-ruby.yml[R40-41]

+          - ruby-version: 4.0.4
            os: ubuntu
-          - ruby-version: 4.0.0
Evidence
The unit-test matrix lists Ruby 3.3.9, 4.0.4, JRuby, and TruffleRuby, with no Ruby 3.4.x entry,
while the gemspec still supports Ruby versions starting at 3.3 (including 3.4).

.github/workflows/ci-ruby.yml[32-45]
rb/selenium-webdriver.gemspec[32-34]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
CI no longer tests Ruby 3.4.x, despite the gemspecs supporting it via `required_ruby_version >= 3.3`.

## Issue Context
The unit test matrix previously included a Ruby 3.4.x entry; this PR replaces that slot with a Ruby 4.0.x entry, leaving no 3.4 coverage.

## Fix Focus Areas
- Add a Ruby 3.4.x entry back into the unit test matrix (keep Ruby 4.0.x too if desired).
 - .github/workflows/ci-ruby.yml[32-45]
- Ensure the matrix still covers: lowest supported (3.3.x), latest stable (3.4.x), and optionally next major (4.0.x).
 - rb/selenium-webdriver.gemspec[32-34]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. JRuby version drift 🐞 Bug ☼ Reliability
Description
Unit tests run with jruby-10.1.0.0, but the RBE workflows still force jruby-10.0.0.0, so the
same Ruby/Bazel targets can behave differently depending on which workflow runs. This increases the
chance of CI-only failures and makes results harder to compare across pipelines.
Code

.github/workflows/ci-ruby.yml[R42-43]

+          - ruby-version: jruby-10.1.0.0
            os: ubuntu
-          - ruby-version: jruby-10.0.2.0
-            os: ubuntu
-          - ruby-version: truffleruby-33.0.0
Evidence
ci-ruby uses JRuby 10.1.0.0 for unit tests, while the RBE-focused workflows still explicitly set
JRuby 10.0.0.0.

.github/workflows/ci-ruby.yml[40-45]
.github/workflows/ci-rbe.yml[24-34]
.github/workflows/ci-renovate-rbe.yml[53-73]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Different GitHub workflows pin different JRuby versions (unit tests vs RBE jobs), which can cause inconsistent CI outcomes.

## Issue Context
All of these workflows call the shared `bazel.yml`, which writes the chosen `ruby-version` into `rb/.ruby-version` before running Bazel.

## Fix Focus Areas
- Choose a single JRuby version for CI and update all workflows to match.
 - .github/workflows/ci-ruby.yml[32-45]
 - .github/workflows/ci-rbe.yml[24-34]
 - .github/workflows/ci-renovate-rbe.yml[53-73]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Previous review results

Review updated until commit b59d5f1

Results up to commit c540210


🐞 Bugs (3) 📘 Rule violations (1) 📎 Requirement gaps (0)


Remediation recommended
1. Ruby 3.2 install breaks 📘 Rule violation ≡ Correctness
Description
The PR raises required_ruby_version from >= 3.2 to >= 3.3, removing Ruby 3.2 support and
preventing users on Ruby 3.2 from installing or upgrading the published gems without changing their
runtime. This is an abrupt compatibility-breaking change for the Ruby binding distribution contract
because it drops prior functionality without accompanying deprecation or migration guidance.
Code

rb/selenium-webdriver.gemspec[33]

+  s.required_ruby_version = Gem::Requirement.new('>= 3.3')
Evidence
PR Compliance ID 2 requires avoiding breaking public compatibility, and PR Compliance ID 5 requires
deprecating public functionality before removal with guidance to alternatives. The cited changes
update the gemspec required_ruby_version constraints and the README minimum version to explicitly
drop Ruby 3.2 support, which blocks installation/upgrades for Ruby 3.2 users; however, the modified
user-facing materials do not include a deprecation-style or migration note (e.g., in CHANGES/README)
to prepare users and direct them to the alternative of upgrading Ruby.

AGENTS.md
rb/selenium-webdriver.gemspec[32-34]
rb/selenium-devtools.gemspec[30-32]
rb/README.md[6-6]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The PR introduces an abrupt breaking change by raising the minimum supported Ruby version to `>= 3.3`, which prevents users on Ruby 3.2 from installing or upgrading the gems, and it does so without adding deprecation/migration guidance to user-facing documentation.

## Issue Context
Compliance expects public compatibility to be preserved unless a break is explicitly intended and handled per project policy, typically via staged deprecation and/or clear upgrade guidance and release notes. Because the gemspec requirement blocks Ruby 3.2 from installing the gem, users need explicit notice in documentation/release notes about the removal of Ruby 3.2 support and what action to take (upgrade Ruby).

## Fix Focus Areas
- rb/selenium-webdriver.gemspec[32-34]
- rb/selenium-devtools.gemspec[30-32]
- rb/README.md[6-6]
- rb/CHANGES[1-15]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Untested supported Ruby versions 🐞 Bug ☼ Reliability
Description
Both gemspecs declare required_ruby_version >= 3.3, but CI/toolchain pins and tests Ruby 3.3.9,
meaning Ruby 3.3.03.3.8 are treated as supported without any coverage. This can allow releases
to install on versions you don't test, leading to uncaught runtime failures for users on earlier
3.3.x patches.
Code

rb/selenium-webdriver.gemspec[33]

+  s.required_ruby_version = Gem::Requirement.new('>= 3.3')
Evidence
The repo pins Ruby to 3.3.9 (and CI runs it), but the gemspecs declare support starting at 3.3.0,
creating a support-vs-tested mismatch.

rb/.ruby-version[1-1]
.github/workflows/ci-ruby.yml[32-45]
rb/selenium-webdriver.gemspec[32-34]
rb/selenium-devtools.gemspec[30-32]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The gemspecs allow Ruby `>= 3.3`, but the repo pins/tests Ruby `3.3.9`, leaving a coverage gap for Ruby `3.3.0`–`3.3.8`.

## Issue Context
- `rb/.ruby-version` is used by Bazel rules_ruby toolchain selection.
- GitHub Actions CI sets `rb/.ruby-version` from the matrix for unit tests.

## Fix Focus Areas
- Decide the real minimum supported Ruby patch level:
 - If the minimum is truly `3.3.9`, update both gemspecs to `>= 3.3.9`.
 - If the minimum is `3.3.0`, add CI coverage for a lowest-supported 3.3.x patch and consider pinning `rb/.ruby-version` to a representative dev version separately.
- file updates:
 - rb/selenium-webdriver.gemspec[32-34]
 - rb/selenium-devtools.gemspec[30-32]
 - rb/.ruby-version[1-1]
 - .github/workflows/ci-ruby.yml[32-45]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Ruby 3.4 CI dropped 🐞 Bug ☼ Reliability
Description
The CI matrix no longer runs tests on any Ruby 3.4.x version, even though the gemspecs support Ruby
>= 3.3 (which includes 3.4.x). This reduces coverage for Ruby 3.4 users and can hide regressions
specific to that minor line.
Code

.github/workflows/ci-ruby.yml[R40-41]

+          - ruby-version: 4.0.4
            os: ubuntu
-          - ruby-version: 4.0.0
Evidence
The unit-test matrix lists Ruby 3.3.9, 4.0.4, JRuby, and TruffleRuby, with no Ruby 3.4.x entry,
while the gemspec still supports Ruby versions starting at 3.3 (including 3.4).

.github/workflows/ci-ruby.yml[32-45]
rb/selenium-webdriver.gemspec[32-34]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
CI no longer tests Ruby 3.4.x, despite the gemspecs supporting it via `required_ruby_version >= 3.3`.

## Issue Context
The unit test matrix previously included a Ruby 3.4.x entry; this PR replaces that slot with a Ruby 4.0.x entry, leaving no 3.4 coverage.

## Fix Focus Areas
- Add a Ruby 3.4.x entry back into the unit test matrix (keep Ruby 4.0.x too if desired).
 - .github/workflows/ci-ruby.yml[32-45]
- Ensure the matrix still covers: lowest supported (3.3.x), latest stable (3.4.x), and optionally next major (4.0.x).
 - rb/selenium-webdriver.gemspec[32-34]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View more (1)
4. JRuby version drift 🐞 Bug ☼ Reliability
Description
Unit tests run with jruby-10.1.0.0, but the RBE workflows still force jruby-10.0.0.0, so the
same Ruby/Bazel targets can behave differently depending on which workflow runs. This increases the
chance of CI-only failures and makes results harder to compare across pipelines.
Code

.github/workflows/ci-ruby.yml[R42-43]

+          - ruby-version: jruby-10.1.0.0
            os: ubuntu
-          - ruby-version: jruby-10.0.2.0
-            os: ubuntu
-          - ruby-version: truffleruby-33.0.0
Evidence
ci-ruby uses JRuby 10.1.0.0 for unit tests, while the RBE-focused workflows still explicitly set
JRuby 10.0.0.0.

.github/workflows/ci-ruby.yml[40-45]
.github/workflows/ci-rbe.yml[24-34]
.github/workflows/ci-renovate-rbe.yml[53-73]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Different GitHub workflows pin different JRuby versions (unit tests vs RBE jobs), which can cause inconsistent CI outcomes.

## Issue Context
All of these workflows call the shared `bazel.yml`, which writes the chosen `ruby-version` into `rb/.ruby-version` before running Bazel.

## Fix Focus Areas
- Choose a single JRuby version for CI and update all workflows to match.
 - .github/workflows/ci-ruby.yml[32-45]
 - .github/workflows/ci-rbe.yml[24-34]
 - .github/workflows/ci-renovate-rbe.yml[53-73]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Results up to commit 7484c8f


🐞 Bugs (1) 📘 Rule violations (0) 📎 Requirement gaps (0)


Remediation recommended
1. Docs mention wrong Ruby 🐞 Bug ⚙ Maintainability
Description
After updating RuboCop’s TargetRubyVersion to 3.3, rb/AGENTS.md still states RuboCop targets Ruby
3.2. This creates incorrect contributor guidance and can lead to confusion about which Ruby
syntax/style baseline CI enforces.
Code

rb/.rubocop.yml[7]

+  TargetRubyVersion: 3.3
Evidence
The PR updates RuboCop’s configured TargetRubyVersion to 3.3, but the contributor guide still claims
the target is Ruby 3.2, which is now inconsistent with the actual lint configuration.

rb/.rubocop.yml[6-8]
rb/AGENTS.md[53-55]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`rb/.rubocop.yml` now configures RuboCop to target Ruby 3.3, but `rb/AGENTS.md` still documents Ruby 3.2 as the lint target.

### Issue Context
This PR intentionally bumps Ruby to 3.3.x, so contributor documentation should match the new lint baseline to avoid misleading guidance.

### Fix Focus Areas
- rb/AGENTS.md[53-55]
- rb/.rubocop.yml[6-8]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Qodo Logo

Copy link
Copy Markdown
Member

@titusfortner titusfortner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to make sure this runs ci-ruby workflow before merging. i need to figure out why it didn't run automatically

@qodo-code-review
Copy link
Copy Markdown
Contributor

qodo-code-review Bot commented May 16, 2026

Persistent review updated to latest commit 7484c8f

Copy link
Copy Markdown
Member

@titusfortner titusfortner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

figured out how to get it to rerun, can merge if tests pass

@qodo-code-review
Copy link
Copy Markdown
Contributor

qodo-code-review Bot commented May 17, 2026

Persistent review updated to latest commit b59d5f1

@titusfortner titusfortner merged commit 5a10424 into SeleniumHQ:trunk May 17, 2026
30 of 31 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

B-build Includes scripting, bazel and CI integrations C-rb Ruby Bindings Compliance violation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants