Blob: scripts/fetch-sources.sh
Raw · Blame
#!/bin/sh
set -eu
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
repo_dir=$(dirname "$script_dir")
source_dir=${MOUSE_SOURCE_DIR:-"$repo_dir/sources"}
lock_file="$repo_dir/sources.lock"
mkdir -p "$source_dir"
while read -r expected url filename; do
case "$expected" in
""|\#*) continue ;;
esac
destination="$source_dir/$filename"
if [ ! -f "$destination" ]; then
temporary="$destination.part"
printf '%s\n' "fetching $filename"
curl \
--fail \
--location \
--proto '=https' \
--tlsv1.2 \
--connect-timeout 20 \
--retry 4 \
--retry-all-errors \
"$url" \
-o "$temporary"
mv "$temporary" "$destination"
fi
if command -v sha256sum >/dev/null 2>&1; then
actual=$(sha256sum "$destination" | awk '{print $1}')
else
actual=$(shasum -a 256 "$destination" | awk '{print $1}')
fi
if [ "$actual" != "$expected" ]; then
printf '%s\n' "checksum mismatch: $filename" >&2
printf '%s\n' "expected: $expected" >&2
printf '%s\n' "actual: $actual" >&2
exit 1
fi
done <"$lock_file"