Pin i18n < 1.15 on Ruby < 3.2 to keep CI deterministic#620
Closed
mitchh456 wants to merge 1 commit into
Closed
Conversation
The pre-3.2 CI matrix uses the default Gemfile, and Gemfile.lock is gitignored, so bundler resolves the latest i18n fresh on every run. i18n 1.15.0 started calling Fiber storage (`Fiber.[]`, Ruby 3.2+), so on Ruby <= 3.1 ActiveSupport failed to load with `NoMethodError: undefined method '[]' for Fiber:Class`, breaking `test (3.1)` (and any pre-3.2 lane that happened to resolve it). Upstream fixed this in i18n 1.15.2, but the gitignored-lock + unpinned-dep setup leaves the EOL-track Rubies exposed to the next such release. Pin them to the stable 1.14 line for a deterministic build; Ruby 3.2+ continues to use the latest i18n. Verified in a ruby:3.1 container: with the cap, i18n resolves to 1.14.8 and `require "active_support/core_ext/string/inflections"` (the exact require that failed in CI) loads cleanly. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Spg5MGVB1XXoxJh6LnmgRu
Contributor
Author
|
not reliably able to recreate in CI actually. closing |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The failure
test (3.1)errors duringtest_helperload:Root cause
The pre-3.2 CI lanes use the default
Gemfile, andGemfile.lockis gitignored — so bundler resolves the latesti18nfresh on every run. i18n 1.15.0 began calling Fiber storage (Fiber.[]), which only exists on Ruby 3.2+, so on Ruby ≤ 3.1 ActiveSupport fails to load it. (master's last green run predates 1.15.0; it would hit this on a re-run too.)Upstream fixed it in i18n 1.15.2, but the gitignored-lock + unpinned-transitive-dep setup leaves the EOL-track Rubies exposed to the next such release. This caps
i18n < 1.15only on Ruby < 3.2, keeping those lanes on the stable 1.14 line for a deterministic build. Ruby 3.2+ is untouched and continues to use the latesti18n.Verification (Docker,
ruby:3.1)require "active_support/core_ext/string/inflections"NoMethodError … Fiber:Classactivesupport7.2 requiresi18n >= 1.6, < 2, so 1.14.8 satisfies it cleanly.Note / follow-up
The deeper fragility is that the EOL-Ruby matrix resolves bleeding-edge transitive deps from an uncommitted lock, so this class of breakage will recur with other gems. Committing per-lane lockfiles (or pinning) would make CI fully reproducible — out of scope here, happy to do it separately if wanted.
🤖 Generated with Claude Code