Repository navigation
ruby-3.3, ruby-3.4: versioned Ruby lines + ruby-flavor guard (after #989) - #992
Conversation
…e it Split out of #848. Sessions run with LANG=C.UTF-8, which glibc's locale-archive lacks, so setlocale fails: initdb aborts and Ruby falls back to US-ASCII. glibc-locale-c-utf8 ships the locale in directory form (no glibc rebuild); ruby and postgres declare it, libidn's IDNA test uses it. postgres's initdb test no longer passes on a locale-only fallback when it cannot run initdb: no passwd entry and a read-only /etc/passwd now fails, naming the reason. The TODO records that the package retires when glibc itself ships C.UTF-8 (same usr/lib/locale/** paths). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Split out of #848. Drop-in copies of `ruby` pinned to each line, with main's ca-certificates trust store + test, the mkmf.log/gem_make.out cleanup, and the C.UTF-8 locale (depends on the glibc-locale-c-utf8 PR). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reached
This review includes 16 billable files and costs up to $4.00.
Reviews can continue after your included limit without a manual trigger. An admin must approve usage-based billing. Or wait 6 minutes for your next included review. View limit details
Comment |
There was a problem hiding this comment.
Going with your recommendations on both questions:
- Add a collision guard like the node/node-lts one. It should fail when a loadout's closure contains more than one of
ruby,ruby-3.3andruby-3.4, for exampleruby-3.4plusruby-lsporbun. All of them installusr/bin/ruby,usr/lib/ruby/**,libruby.soandusr/etc/gemrc. - Drop
ruby-3.2. It went EOL upstream on 2026-04-01.
The rest is identical to what I reviewed in #848. Please keep this after #989, and note that a squash-merge of #989 will need a rebase here.
Generated by Claude Code
… two Ruby lines) Review on #992. ruby-3.2 went EOL upstream on 2026-04-01, so it goes. `ruby`, `ruby-3.3` and `ruby-3.4` install the same paths, and closure members are hardlinked first-writer-wins per file. The new blocking ruby-flavor-guard workflow mirrors node-runtime-guard: over both arches' catalog dumps it rejects a package built or run on a versioned line (those are user opt-ins), and any package or stack whose runtime or build closure holds more than one Ruby line. AGENTS.md gains a Ruby pattern note next to the Node one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks @norrietaylor. Both done in c9acce8:
Re-verified in a fresh session: #989 is still open; once it merges I'll merge main into this branch (no rebase or force-push) so the diff shows only the Ruby lines. 🤖 Generated with Claude Code |
Split out of #848, as suggested in review. This PR is the versioned Ruby lines.
⚠ Depends on #989 (glibc-locale-c-utf8). These packages carry the same locale edge as
ruby. The branch is built on #989's commit, so until #989 merges this diff also shows it. Merge #989 first; once it lands I'll merge main into this branch (no rebase, no force-push) so the diff shows only the Ruby lines.What.
ruby-3.3(3.3.12) andruby-3.4(3.4.11) are drop-in copies ofrubypinned to each line. Each carries:ca-certificatestrust store and itstrust_storetest (trust store: declare ca-certificates on ruby, typst, atuin, gws, skopeo; document where the store comes from #957);utf8_default_externaltest;mkdir -ppatch.ruby-3.2was dropped in review: upstream EOL on 2026-04-01.Ruby-flavor guard (new, blocking).
ruby,ruby-3.3andruby-3.4install the same paths (usr/bin/ruby,usr/lib/ruby/**,libruby.so,usr/etc/gemrc), and closure members are hardlinked first-writer-wins per file..github/workflows/ruby-flavor-guard.yml+.github/scripts/ruby_flavor_guard.pymirrornode-runtime-guard: over both arches'mip dumpit rejectsruby-3.3/ruby-3.4instead ofruby. The versioned lines are user opt-ins, likenode(Current); exceptions go inVERSIONED_ALLOWEDwith a reason.ruby-3.4next toruby-lspfails.Exit 2 (UNVERIFIED) on a missing or empty dump, as the node guard does. AGENTS.md gains a short "Ruby pattern" note next to the Node one.
Limit, stated plainly: like the node guard, this sees the pkgs catalog (packages and stacks), not a user's own
minimal.tomlloadout. A user who writesruby-3.4+ruby-lspthere still gets two rubies; rule 1 means that only happens when they name a versioned line themselves. Catching it at activation would be a minimal-side check.Verification.
ruby-3.4+ruby-lsp) and an injected package onruby-3.3: exit 1, naming both (closure: runtime closure holds 2 Ruby lines: ruby, ruby-3.4;flavor: runtime_deps uses ruby-3.3)..github/scripts/test_ruby_flavor_guard.py, run in the workflow): 8/8 pass. Negative control: withcheckstubbed to report nothing, exactly the 5 behaviour tests fail and the 3 controls pass.pkgbuildloadout, activated after the last commit):min package build --rebuild --verboseofruby-3.3(2,136 log lines) andruby-3.4(1,965), thenmin check --packages ruby-3.3 ruby-3.4: every check Pass for both, standalone tests included, no Skip.mip dump(amd64 and arm64) clean;ruby-3.2is gone from both.🤖 Generated with Claude Code