Something went wrong. Try again.
What happens if I push all of nixpkgs
Something went wrong. Try again.
3.3 kB · 155 lines
Nix
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156{ lib, gemConfig, ... }:
let inherit (lib) attrValues concatMap converge filterAttrs getAttrs intersectLists ;
inrec { bundlerFiles = { gemfile ? null, lockfile ? null, gemset ? null, gemdir ? null, ... }: { inherit gemdir;
gemfile = if gemfile == null then assert gemdir != null; gemdir + "/Gemfile" else gemfile;
lockfile = if lockfile == null then assert gemdir != null; gemdir + "/Gemfile.lock" else lockfile;
gemset = if gemset == null then assert gemdir != null; gemdir + "/gemset.nix" else gemset; };
filterGemset = { ruby, groups, ... }: gemset: let platformGems = filterAttrs (_: platformMatches ruby) gemset; directlyMatchingGems = filterAttrs (_: groupMatches groups) platformGems;
expandDependencies = gems: let depNames = concatMap (gem: gem.dependencies or [ ]) (attrValues gems); deps = getAttrs depNames platformGems; in gems // deps; in converge expandDependencies directlyMatchingGems;
platformMatches = { rubyEngine, version, ... }: attrs: ( !(attrs ? platforms) || builtins.length attrs.platforms == 0 || builtins.any ( platform: platform.engine == rubyEngine && (!(platform ? version) || platform.version == version.majMin) ) attrs.platforms );
groupMatches = groups: attrs: groups == null || !(attrs ? groups) || (intersectLists (groups ++ [ "default" ]) attrs.groups) != [ ];
applyGemConfigs = attrs: (if gemConfig ? ${attrs.gemName} then attrs // gemConfig.${attrs.gemName} attrs else attrs);
genStubsScript = { lib, runCommand, ruby, confFiles, bundler, groups, binPaths, ... }: let genStubsScript = runCommand "gen-bin-stubs" { strictDeps = true; nativeBuildInputs = [ ruby ]; } '' cp ${./gen-bin-stubs.rb} $out chmod +x $out patchShebangs --build $out ''; in '' ${genStubsScript} \ "${ruby}/bin/ruby" \ "${confFiles}/Gemfile" \ "$out/${ruby.gemPath}" \ "${bundler}/${ruby.gemPath}/gems/bundler-${bundler.version}" \ ${lib.escapeShellArg binPaths} \ ${lib.escapeShellArg groups} '';
pathDerivation = { gemName, version, path, ... }: let res = { type = "derivation"; bundledByPath = true; name = gemName; version = version; outPath = "${path}"; outputs = [ "out" ]; out = res; outputName = "out"; suffix = version; gemType = "path"; }; in res;
composeGemAttrs = ruby: gems: name: attrs: ( (removeAttrs attrs [ "platforms" ]) // { inherit ruby; inherit (attrs.source) type; source = removeAttrs attrs.source [ "type" ]; gemName = name; gemPath = map (gemName: gems.${gemName}) (attrs.dependencies or [ ]); } );}