summaryrefslogtreecommitdiffstats
path: root/krebs/5pkgs/whatsupnix
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2017-05-16 23:30:09 +0200
committertv <tv@krebsco.de>2017-05-16 23:30:09 +0200
commit015649b9b32c39d1f1c90ebba8d9aadb733ba8b8 (patch)
tree1a26b3bd45f8bde685b69364d92e9eece6f87604 /krebs/5pkgs/whatsupnix
parent66f9170f524a1a59ba7b69b2fc778c99ccbd41ff (diff)
whatsupnix: init
Import from https://github.com/NixOS/nix/issues/443#issuecomment-296752535
Diffstat (limited to 'krebs/5pkgs/whatsupnix')
-rw-r--r--krebs/5pkgs/whatsupnix/default.nix15
-rw-r--r--krebs/5pkgs/whatsupnix/whatsupnix.bash44
2 files changed, 59 insertions, 0 deletions
diff --git a/krebs/5pkgs/whatsupnix/default.nix b/krebs/5pkgs/whatsupnix/default.nix
new file mode 100644
index 000000000..1a108c5e9
--- /dev/null
+++ b/krebs/5pkgs/whatsupnix/default.nix
@@ -0,0 +1,15 @@
+{ bash, coreutils, gawk, nix, makeWrapper, stdenv }:
+
+stdenv.mkDerivation {
+ name = "whatsupnix";
+ phases = [ "installPhase" ];
+ nativeBuildInputs = [ makeWrapper ];
+ installPhase = ''
+ mkdir -p $out/bin
+ cat - ${./whatsupnix.bash} > $out/bin/whatsupnix <<\EOF
+ #! ${bash}/bin/bash
+ export PATH=${stdenv.lib.makeBinPath [ coreutils gawk nix ]}
+ EOF
+ chmod +x $out/bin/whatsupnix
+ '';
+}
diff --git a/krebs/5pkgs/whatsupnix/whatsupnix.bash b/krebs/5pkgs/whatsupnix/whatsupnix.bash
new file mode 100644
index 000000000..a19410055
--- /dev/null
+++ b/krebs/5pkgs/whatsupnix/whatsupnix.bash
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+
+# Prints build logs for failed derivations in quiet build mode (-Q).
+# See https://github.com/NixOS/nix/issues/443
+#
+# Usage:
+#
+# set -o pipefail
+# nix-build ... -Q ... | whatsupnix
+#
+
+
+GAWK=${GAWK:-gawk}
+NIX_STORE=${NIX_STORE:-nix-store}
+
+broken=$(mktemp)
+trap 'rm -f -- "$broken"' EXIT
+
+exec >&2
+
+$GAWK -v broken="$broken" -f <(cat - <<- 'AWK'
+ match($0, /builder for .*(\/nix\/store\/.+\.drv).* failed/, m) {
+ print m[1] >> broken
+ }
+ { print $0 }
+AWK
+)
+
+export NIX_PAGER='' # for nix-store
+while read -r drv; do
+ title="** FAILED $drv LOG **"
+ frame=${title//?/*}
+
+ echo "$frame"
+ echo "$title"
+ echo "$frame"
+ echo
+
+ $NIX_STORE -l "$drv"
+
+ echo
+done < "$broken"
+
+exit 0