summaryrefslogtreecommitdiff
path: root/pkgs/build-support/docker/make-layers.nix
blob: 9d8bdcd539f3ae03e6d9474fba1e1d0ca03d2d5b (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
49
50
{
  coreutils,
  flatten-references-graph,
  lib,
  jq,
  runCommand,
}:
{
  closureRoots,
  excludePaths ? [ ],
  # This could be a path to (or a derivation producing a path to)
  # a json file containing the pipeline
  pipeline ? [ ],
  debug ? false,
}:
if closureRoots == [ ] then
  builtins.toFile "docker-layers-empty" "[]"
else
  runCommand "docker-layers"
    {
      __structuredAttrs = true;
      # graph, exclude_paths and pipeline are expected by the
      # flatten_references_graph executable.
      exportReferencesGraph.graph = closureRoots;
      exclude_paths = excludePaths;
      inherit pipeline;
      nativeBuildInputs = [
        coreutils
        flatten-references-graph
        jq
      ];
    }
    ''
      . .attrs.sh

      flatten_references_graph_arg=.attrs.json

      echo "pipeline: $pipeline"

      if jq -e '.pipeline | type == "string"' .attrs.json; then
        jq '. + { "pipeline": $pipeline[0] }' \
          --slurpfile pipeline "$pipeline" \
          .attrs.json > flatten_references_graph_arg.json

        flatten_references_graph_arg=flatten_references_graph_arg.json
      fi

      ${lib.optionalString debug "export DEBUG=True"}
      flatten_references_graph "$flatten_references_graph_arg" > ''${outputs[out]}
    ''