summaryrefslogtreecommitdiff
path: root/ci/nixpkgs-vet.nix
blob: 6bdf92eedb3f8e10618b039735c5752fea20e756 (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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
{
  lib,
  nix,
  nixpkgs-vet,
  runCommand,
}:
{
  base ? ../.,
  head ? ../.,
}:
let
  filtered =
    with lib.fileset;
    path:
    toSource {
      fileset = difference (gitTracked path) (unions [
        (path + /.github)
        (path + /ci)
      ]);
      root = path;
    };

  filteredBase = filtered base;
  filteredHead = filtered head;
in
runCommand "nixpkgs-vet"
  {
    nativeBuildInputs = [
      nixpkgs-vet
    ];
    env.NIXPKGS_VET_NIX_PACKAGE = nix;
  }
  ''
    export NIX_STATE_DIR=$(mktemp -d)
    $NIXPKGS_VET_NIX_PACKAGE/bin/nix-store --init

    nixpkgs-vet --base ${filteredBase} ${filteredHead}

    # TODO: Upstream into nixpkgs-vet, see:
    # https://github.com/NixOS/nixpkgs-vet/issues/164
    badFiles=$(find ${filteredHead}/pkgs -type f -name '*.nix' -print | xargs grep -l '^[^#]*<nixpkgs/' || true)
    if [[ -n $badFiles ]]; then
      echo "Nixpkgs is not allowed to use <nixpkgs> to refer to itself."
      echo "The offending files:"
      echo "$badFiles"
      exit 1
    fi

    # TODO: Upstream into nixpkgs-vet, see:
    # https://github.com/NixOS/nixpkgs-vet/issues/166
    conflictingPaths=$(find ${filteredHead} | awk '{ print $1 " " tolower($1) }' | sort -k2 | uniq -D -f 1 | cut -d ' ' -f 1)
    if [[ -n $conflictingPaths ]]; then
      echo "Files in nixpkgs must not vary only by case."
      echo "The offending paths:"
      echo "$conflictingPaths"
      exit 1
    fi

    touch $out
  ''