push sheeet
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s

This commit is contained in:
Dark Steveneq
2025-10-09 14:15:47 +02:00
commit 646b892680
49168 changed files with 5897842 additions and 0 deletions

View File

@@ -0,0 +1,113 @@
{
ruby,
lib,
callPackage,
defaultGemConfig,
buildEnv,
runCommand,
buildPackages,
bundler,
}@defs:
{
name ? null,
pname ? null,
gemdir ? null,
gemfile ? null,
lockfile ? null,
gemset ? null,
groups ? [ "default" ],
ruby ? defs.ruby,
copyGemFiles ? false, # Copy gem files instead of symlinking
gemConfig ? defaultGemConfig,
postBuild ? null,
document ? [ ],
meta ? { },
ignoreCollisions ? false,
passthru ? { },
...
}@args:
let
inherit
(import ../bundled-common/functions.nix {
inherit
lib
ruby
gemConfig
groups
;
})
genStubsScript
;
basicEnv = (callPackage ../bundled-common { inherit bundler; }) (
args
// {
inherit pname name;
mainGemName = pname;
}
);
inherit (basicEnv) envPaths;
# Idea here is a mkDerivation that gen-bin-stubs new stubs "as specified" -
# either specific executables or the bin/ for certain gem(s), but
# incorporates the basicEnv as a requirement so that its $out is in our path.
# When stubbing the bins for a gem, we should use the gem expression
# directly, which means that basicEnv should somehow make it available.
# Different use cases should use different variations on this file, rather
# than the expression trying to deduce a use case.
in
# The basicEnv should be put into passthru so that e.g. nix-shell can use it.
if pname == null then
basicEnv // { inherit name basicEnv; }
else
let
bundlerEnvArgs = {
inherit ignoreCollisions;
name = basicEnv.name;
paths = envPaths;
pathsToLink = [ "/lib" ];
postBuild =
genStubsScript {
inherit
lib
runCommand
ruby
bundler
groups
;
confFiles = basicEnv.confFiles;
binPaths = [ basicEnv.gems.${pname} ];
}
+ lib.optionalString (postBuild != null) postBuild;
meta = {
platforms = ruby.meta.platforms;
}
// meta;
passthru =
basicEnv.passthru
// {
inherit basicEnv;
inherit (basicEnv) env;
}
// passthru;
};
in
if copyGemFiles then
runCommand basicEnv.name bundlerEnvArgs ''
mkdir -p $out
for i in $paths; do
${buildPackages.rsync}/bin/rsync -a $i/lib $out/
done
eval "$postBuild"
''
else
buildEnv bundlerEnvArgs

View File

@@ -0,0 +1,41 @@
{
callPackage,
test,
stubs,
should,
}:
let
bundlerEnv = callPackage ./default.nix stubs // {
basicEnv = callPackage ../bundled-common stubs;
};
justName = bundlerEnv {
name = "test-0.1.2";
gemset = ./test/gemset.nix;
};
pnamed = bundlerEnv {
pname = "test";
gemdir = ./test;
gemset = ./test/gemset.nix;
gemfile = ./test/Gemfile;
lockfile = ./test/Gemfile.lock;
};
in
builtins.concatLists [
(test.run "bundlerEnv { name }" justName {
name = should.equal "test-0.1.2";
})
(test.run "bundlerEnv { pname }" pnamed [
(should.haveKeys [
"name"
"env"
"postBuild"
])
{
name = should.equal "test-0.1.2";
env = should.beASet;
postBuild = should.havePrefix "/nix/store";
}
])
]

View File

@@ -0,0 +1,10 @@
{
test = {
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1j5r0anj8m4qlf2psnldip4b8ha2bsscv11lpdgnfh4nnchzjnxw";
type = "gem";
};
version = "0.1.2";
};
}