#!/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