Document Arch/Omarchy and non-mise use, run builds in parallel - #6
Document Arch/Omarchy and non-mise use, run builds in parallel#6jeremy wants to merge 2 commits into
Conversation
The README claimed macOS and Ubuntu only, though Arch support landed a few commits back. Verified all six definitions build and run on both Arch and Ubuntu Noble under GCC 16: stdlib requires, a real TLS fetch from rubygems.org (exercises both cipher negotiation and the cert store), bundler, and C extension compilation. Document rbenv and bare ruby-build alongside mise so this isn't mise-only, and pull the RUBY_BUILD_DEFINITIONS caveats into one section they all point at. That warning is the practical one: ruby-build appends its own bundled definitions to the search list and takes the first match, so a relative path or an unexpanded "~/..." doesn't error — it silently builds the upstream definition, which is precisely the one that fails on a modern compiler. The old README example had the tilde inside double quotes, where it never expands. test/build ran the matrix serially, ~40 minutes for a full run, which is long enough that nobody runs it. Build concurrently instead, JOBS containers at a time with make -j MAKE_JOBS inside each; the full matrix now takes about 6. Results stream as they finish and failure logs are held back to the end rather than interleaving between jobs.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 395a0841eb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
macOS ships Bash 3.2 as /bin/bash, which has no `wait -n`. The error was swallowed, so the throttle loop never blocked — it just respun `jobs` until a build finished, burning a core for the whole run. Poll with a sleep instead; builds take minutes, so a second of latency is free. Same portability problem one line up: nproc doesn't exist on macOS, so CORES fell back to 4 and JOBS to 1, running the matrix serially on exactly the platform this was meant to speed up. Fall back to sysctl before the constant.
|
Pushed 8070dc7 for the Codex finding — the Re-requested Copilot, which errored instead of reviewing. @codex review |
|
Codex Review: Didn't find any major issues. 🎉 Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
The README claimed macOS and Ubuntu only, though Arch support landed a few commits back. This documents Arch/Omarchy, covers rbenv and bare ruby-build alongside mise, and makes the test suite fast enough to actually run.
Verified
All six definitions on both platforms, 12/12 green. Each build checked for stdlib requires (
openssl,zlib,digest/sha2,readline,socket,bigdecimal,psych-or-yaml), a real TLS fetch from rubygems.org — which exercises both cipher negotiation and the cert store — bundler, and C extension compilation, all under GCC 16.1.1.README
Covers mise, rbenv, and bare ruby-build as peers rather than being mise-only. The bare ruby-build section also covers the chruby-style "build into
~/.rubies" flow, where no version manager is involved at all.The three tool sections now point at one shared warning, which is the practical thing to know: ruby-build appends its own bundled definition directory to the search list and takes the first match, so a relative path or an unexpanded
~/...doesn't error — it silently builds the upstream definition, which is precisely the one that fails on a modern compiler. Confusing compiler errors are the symptom. The old README example had the tilde inside double quotes, where it never expands.Also adds per-platform prerequisites and a table of what each definition pins.
test/build
Ran the matrix serially, ~40 minutes for a full run — long enough that nobody runs it. Now builds concurrently:
JOBScontainers at a time (defaults to cores/4),make -j MAKE_JOBSinside each. Full matrix takes about 6 minutes.Results stream as they finish, so they arrive out of order; a sorted summary prints at the end and failure logs are held back rather than interleaving between jobs. The failure path was exercised deliberately with a bogus definition to confirm the reporting and the nonzero exit code.
Notes, not addressed here
arch 1.9.3-p551red ongetaddrinfo: Temporary failure in name resolutionduringgem install bundler, after Ruby had already built. Re-ran alone: clean pass. DNS flake under 12-wide concurrency, not the definition. If it recurs, a retry aroundinstall_bundleris the fix — it needs the network at build time.2.5.9and2.7.8pass-march=native, pinning those binaries to the building machine's CPU. Fine locally; would SIGILL if an installs tree moved between different machines. The older definitions don't do this.