summaryrefslogtreecommitdiff
path: root/ci/parse.nix
blob: 26ac0f785fd44b501f7d7263d2cecb3faa857bae (about) (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
{
  lib,
  nix,
  runCommand,
}:
let
  nixpkgs =
    with lib.fileset;
    toSource {
      root = ../.;
      fileset = (fileFilter (file: file.hasExt "nix") ../.);
    };
in
runCommand "nix-parse-${nix.name}"
  {
    nativeBuildInputs = [
      nix
    ];
  }
  ''
    export NIX_STORE_DIR=$TMPDIR/store
    export NIX_STATE_DIR=$TMPDIR/state

    cd "${nixpkgs}"

    # Passes all files to nix-instantiate at once.
    # Much faster, but will only show first error.
    parse-all() {
      find . -type f -iname '*.nix' | xargs -P $(nproc) nix-instantiate --parse >/dev/null 2>/dev/null
    }

    # Passes each file separately to nix-instantiate with -n1.
    # Much slower, but will show all errors.
    parse-each() {
      find . -type f -iname '*.nix' | xargs -n1 -P $(nproc) nix-instantiate --parse >/dev/null
    }

    if ! parse-all; then
      parse-each
    fi

    touch $out
  ''