summaryrefslogtreecommitdiffstats
path: root/ci/eval/chunk.nix
blob: 9bea26ce31805b6cbfc12f53e8ec48dc6c0bc1eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# This turns ./outpaths.nix into chunks of a fixed size.
{
  lib ? import ../../lib,
  path ? ../..,
  # The file containing the preEval result
  preEvalFile,
  chunkSize,
  myChunk,
  includeBroken,
  systems,
  extraNixpkgsConfigJson,
}:

let
  preEvalResult = lib.importJSON preEvalFile;
  myAttrpaths = lib.sublist (chunkSize * myChunk) chunkSize preEvalResult.paths;

  unfiltered = import ./outpaths.nix {
    inherit path;
    inherit includeBroken systems;
    inherit (preEvalResult) attrPathsDisallowedForInternalUse;
    extraNixpkgsConfig = builtins.fromJSON extraNixpkgsConfigJson;
  };

  # Turns the unfiltered recursive attribute set into one that is limited to myAttrpaths
  filtered =
    let
      recurse =
        index: paths: attrs:
        lib.mapAttrs (
          name: values:
          if attrs ? ${name} then
            if lib.any (value: lib.length value <= index + 1) values then
              attrs.${name}
            else
              recurse (index + 1) values attrs.${name}
              # Make sure nix-env recurses as well
              // {
                recurseForDerivations = true;
              }
          else
            null
        ) (lib.groupBy (a: lib.elemAt a index) paths);
    in
    recurse 0 myAttrpaths unfiltered;

in
filtered