Skip to content

Fix the Ruby head CI job - #465

Open
selesse wants to merge 3 commits into
Shopify:mainfrom
selesse:ruby-head-ci
Open

selesse wants to merge 3 commits into
Shopify:mainfrom
selesse:ruby-head-ci

Conversation

@selesse

@selesse selesse commented Oct 1, 2026 •

Copy link
Copy Markdown

test (head) has been failing on main since January, so every PR shows a red check (I ran into it on #463 and #464). Ruby head is 4.1.0.dev now, and it trips over the lockfile in three places, one after the other:

  1. minitest 5.25.4 and unicode-emoji 4.0.4 cap Ruby below 4.0, so bundle install refuses to install them. I bumped them to minitest 5.27.0 and unicode-emoji 4.3.0, and kept minitest on 5.x because 6.0 drops Ruby 3.1, which is still in the matrix.
  2. BUNDLED WITH 2.6.2 references Pathname::SEPARATOR_PAT, which Ruby 4.1 removed. Bundler 4.0.20 and later don't use it. Bundler 4 needs Ruby 3.2, but setup-ruby already falls back to Bundler 2 on the 3.1 job.
  3. RuboCop 1.70.0 requires tsort, which Ruby 4.1 no longer ships as a default gem, so every spec failed to load. RuboCop 1.80 stopped using it, so I bumped RuboCop to 1.91.0 and autocorrected the one new Style/RedundantParentheses offense in RequireScriptNonce.

The newer RuboCop warns that rubocop-shopify's config still uses the old Naming/PredicateName name. It's only a warning, so I left rubocop-shopify alone.

The lockfile hasn't changed since May 2025 because Dependabot only watches GitHub Actions here. We could add bundler to it so this doesn't creep up again, and add 4.0 to the matrix, but I think it's better to do that separately.

selesse and others added 3 commits October 1, 2026 12:27
The `head` CI job runs Ruby 4.1.0.dev, and setup-ruby installs the
bundle in deployment mode. `Gemfile.lock` pins minitest 5.25.4 and
unicode-emoji 4.0.4, which both require Ruby < 4.0, so `bundle install`
fails before any specs run.

Bump them to minitest 5.27.0 and unicode-emoji 4.3.0, which drop the
cap. Stay on minitest 5.x, since 6.0 adds dependencies and drops Ruby
3.1.

Co-Authored-By: Pi <pi@shopify.com>
With the gem caps out of the way, `bundle install` on Ruby head still
fails. `BUNDLED WITH` pins Bundler 2.6.2, which references
`Pathname::SEPARATOR_PAT`, and Ruby 4.1 removed that constant. Bundler
4.0.20 and later no longer use it.

Bundler 4 requires Ruby 3.2, but setup-ruby already installs Bundler 2
on older Rubies when the lockfile asks for 4, so the 3.1 job keeps
working.

Co-Authored-By: Pi <pi@shopify.com>
RuboCop 1.70.0's `Style/ParallelAssignment` requires `tsort`, which
Ruby 4.1 no longer ships as a default gem, so every spec fails to load
on Ruby head. RuboCop 1.80 stopped using `tsort`.

Update RuboCop and the gems it needs (rubocop-ast, parser, prism, and
lint_roller), and drop the parentheses in `RequireScriptNonce` that the
newer `Style/RedundantParentheses` flags.

Co-Authored-By: Pi <pi@shopify.com>
@selesse selesse changed the title Bump gems that cap Ruby below 4.0 Fix the Ruby head CI job Oct 1, 2026

This branch has not been deployed

No deployments
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.

1 participant