From e43e288d5eca104a1dbc6ce4066a505dfb331930 Mon Sep 17 00:00:00 2001 From: Kaidong Hu Date: Wed, 28 Jan 2026 21:50:55 -0500 Subject: [PATCH 1/2] test: add docSupport test and add docSupport version check There is a do-install-doc issue related to ruby version < 3.4. This commit checks doc support for ruby version >= 3.4 and add guard perventing docSupport be used in parallel build with early versions. See: https://github.com/ruby/rubygems/issues/7580 --- flake.nix | 25 ++++++++++++++++++++++++- ruby/package-fn.nix | 13 ++++++++++--- rubygems/package-fn.nix | 1 + 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/flake.nix b/flake.nix index 7d6718a..c1dd1e6 100644 --- a/flake.nix +++ b/flake.nix @@ -34,7 +34,7 @@ { version, versionSource }: let pkg = pkgs.callPackage packageFn { - inherit version versionSource; + inherit version versionSource versionComparison; }; in applyOverrides { @@ -219,6 +219,29 @@ ''; }; }) + // (lib.optionalAttrs (with versionComparison rubyVersion; greaterOrEqualTo "3.4") { + docSupport = { + nativeBuildInputs = [ + (ruby.override { docSupport = true; }) + ]; + command = '' + ri Array > $out + ''; + }; + }) + // (lib.optionalAttrs (with versionComparison rubyVersion; lessThan "3.4") { + docSupport-noParallel = { + nativeBuildInputs = [ + (ruby.override { + docSupport = true; + parallelBuild = false; + }) + ]; + command = '' + ri Array > $out + ''; + }; + }) // (lib.optionalAttrs (with versionComparison rubyVersion; greaterOrEqualTo "2.2") { bundlerEnv = let diff --git a/ruby/package-fn.nix b/ruby/package-fn.nix index 9ad96dd..0107e38 100644 --- a/ruby/package-fn.nix +++ b/ruby/package-fn.nix @@ -1,6 +1,8 @@ { version, - versionSource, + versionSource +, versionComparison +, libDir ? "${(import ./parse-version.nix version).majMin}.0", rubygems ? null, stdenv, @@ -25,7 +27,9 @@ buildEnv, bundler, bundix, - removeReferencesTo, + removeReferencesTo +, parallelBuild ? true +, useRailsExpress ? true, zlibSupport ? true, opensslSupport ? true, @@ -89,7 +93,7 @@ let ]); propagatedBuildInputs = (op jemallocSupport jemalloc); - enableParallelBuilding = true; + enableParallelBuilding = parallelBuild; postPatch = '' ${opString (rubygems != null) '' @@ -200,4 +204,7 @@ let }; }; in +# There's a known race condition when building with docs enabled before Ruby 3.4.0 +# Building documents requires parallelBuild to be false in those versions +assert docSupport -> (with versionComparison version; greaterOrEqualTo "3.4.0" || !parallelBuild); self diff --git a/rubygems/package-fn.nix b/rubygems/package-fn.nix index b89761c..d43957c 100644 --- a/rubygems/package-fn.nix +++ b/rubygems/package-fn.nix @@ -4,6 +4,7 @@ stdenv, fetchurl, fetchpatch, + ... }: stdenv.mkDerivation { pname = "rubygems"; From 7a8f6574b724774a5342311e2abd93002205d506 Mon Sep 17 00:00:00 2001 From: Kaidong Hu Date: Sat, 11 Apr 2026 14:37:19 -0400 Subject: [PATCH 2/2] Fix docSupport build failure in Nix sandbox rdoc tries to create XDG_DATA_DIR (defaulting to $HOME/.local/share) during the build, but $HOME is read-only in the Nix sandbox. This adds a writable $HOME during the preConfigure phase, and applies the same fix to the docSupport tests in flake.nix. See: https://github.com/bobvanderlinden/nixpkgs-ruby/pull/221 Co-Authored-By: Sander --- flake.nix | 4 ++-- ruby/package-fn.nix | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index c1dd1e6..6dcdbff 100644 --- a/flake.nix +++ b/flake.nix @@ -225,7 +225,7 @@ (ruby.override { docSupport = true; }) ]; command = '' - ri Array > $out + HOME=$TMPDIR ri Array > $out ''; }; }) @@ -238,7 +238,7 @@ }) ]; command = '' - ri Array > $out + HOME=$TMPDIR ri Array > $out ''; }; }) diff --git a/ruby/package-fn.nix b/ruby/package-fn.nix index 0107e38..9f07b8c 100644 --- a/ruby/package-fn.nix +++ b/ruby/package-fn.nix @@ -113,6 +113,11 @@ let preConfigure = '' sed -i configure -e 's/;; #(/\n;;/g' + ${opString docSupport '' + # rdoc creates XDG_DATA_DIR (defaulting to $HOME/.local/share) even if + # it's not going to be used. + export HOME=$TMPDIR + ''} ''; configureFlags =