on iko/ghcjs-patch-master help sign in
Reduce closure size of nix-tools (#178)
2e49d28Rodney Lorrimar
.buildkite/pipeline.yml+8
@@ -11,6 +11,14 @@ steps:
11 agents:
11 agents:
12 system: x86_64-linux
12 system: x86_64-linux
13
13
14+ - label: 'Check closure size'
15+ command:
16+ - nix-build build.nix -A maintainer-scripts.check-closure-size -o check-closure-size.sh
17+ - echo "+++ Closure size (MB)"
18+ - ./check-closure-size.sh
19+ agents:
20+ system: x86_64-linux
21+
14 - label: 'Update docs'
22 - label: 'Update docs'
15 command:
23 command:
16 - nix-build build.nix -A maintainer-scripts.update-docs -o update-docs.sh
24 - nix-build build.nix -A maintainer-scripts.update-docs -o update-docs.sh
build.nix+1
@@ -38,5 +38,6 @@ in {
38 };
38 };
39 };
39 };
40 check-hydra = haskell.callPackage ./scripts/check-hydra.nix {};
40 check-hydra = haskell.callPackage ./scripts/check-hydra.nix {};
41+ check-closure-size = haskell.callPackage ./scripts/check-closure-size.nix {};
41 };
42 };
42}
43}
default.nix+2−1
@@ -125,7 +125,8 @@ let
125 # we never want to actually cross compile nix-tools on it's own.
125 # we never want to actually cross compile nix-tools on it's own.
126 nix-tools = pkgs.buildPackages.callPackage ./nix-tools {
126 nix-tools = pkgs.buildPackages.callPackage ./nix-tools {
127 inherit fetchExternal cleanSourceHaskell;
127 inherit fetchExternal cleanSourceHaskell;
128+ hpack = pkgs.buildPackages.haskell.lib.justStaticExecutables
128− inherit (pkgs.buildPackages.haskellPackages) hpack;
129+ (pkgs.buildPackages.haskellPackages.hpack);
129 inherit (self) mkCabalProjectPkgSet;
130 inherit (self) mkCabalProjectPkgSet;
130 };
131 };
131
132
nix-tools/default.nix+2−2
@@ -1,5 +1,5 @@
1{ lib, symlinkJoin, makeWrapper
1{ lib, symlinkJoin, makeWrapper
2−, hpack, git, nix, nix-prefetch-scripts
2+, hpack, git, nix, nix-prefetch-git
3, fetchExternal, cleanSourceHaskell, mkCabalProjectPkgSet }:
3, fetchExternal, cleanSourceHaskell, mkCabalProjectPkgSet }:
4
4
5let
5let
@@ -27,7 +27,7 @@ let
27
27
28 hsPkgs = pkgSet.config.hsPkgs;
28 hsPkgs = pkgSet.config.hsPkgs;
29
29
30− tools = [ hpack git nix nix-prefetch-scripts ];
30+ tools = [ hpack git nix nix-prefetch-git ];
31in
31in
32 symlinkJoin {
32 symlinkJoin {
33 name = "nix-tools";
33 name = "nix-tools";
scripts/check-closure-size.nixnew file+29
@@ -0,0 +1,29 @@
1+{ stdenv, writeScript, coreutils, gawk, nix
2+, nix-tools
3+, limitMB ? 500
4+}:
5+
6+with stdenv.lib;
7+
8+writeScript "check-closure-size.sh" ''
9+ #!${stdenv.shell}
10+
11+ set -euo pipefail
12+
13+ export PATH="${makeBinPath [ coreutils gawk nix ]}"
14+
15+ get_closure_size() {
16+ du -scm $(nix-store -qR $1) | sort -n | tail -n25
17+ }
18+
19+ nt="$(get_closure_size ${nix-tools})"
20+ echo ' ${nix-tools}'
21+ echo "$nt"
22+
23+ total=$(awk '$2 == "total" { print $1; }' <<< "$nt")
24+
25+ if [ $total -gt ${toString limitMB} ]; then
26+ echo "Closure size exceeds limit of ${toString limitMB}MB!"
27+ exit 1
28+ fi
29+''