25 lines
880 B
Bash
25 lines
880 B
Bash
|
set -euo pipefail
|
||
|
|
||
|
# The file that defines the derivation that should be updated
|
||
|
file=$1
|
||
|
# The name of the output of this flake that should be updated
|
||
|
flakeOutput=$2
|
||
|
# A pattern in a line preceding the hash that should be updated
|
||
|
patternPrecedingHash=$3
|
||
|
|
||
|
sed -i "/$patternPrecedingHash/,/hash/ s|hash = .*|hash = \"\";|" $file
|
||
|
# Display stderr and capture it. stdbuf is required to disable output buffering.
|
||
|
stderr=$(
|
||
|
nix build --no-link -L .#$flakeOutput |&
|
||
|
stdbuf -oL grep -v '\berror:.*failed to build$' |
|
||
|
tee /dev/stderr || :
|
||
|
)
|
||
|
hash=$(echo "$stderr" | sed -nE 's/.*?\bgot: *?(sha256-.*)/\1/p')
|
||
|
if [[ ! $hash ]]; then
|
||
|
echo
|
||
|
echo "Error: No hash in build output."
|
||
|
exit 1
|
||
|
fi
|
||
|
sed -i "/$patternPrecedingHash/,/hash/ s|hash = .*|hash = \"$hash\";|" $file
|
||
|
echo "(Note: The above hash mismatch message is not an error. It is part of the fetching process.)"
|