Files
hyperframes/packages/aws-lambda/image/fetch.sh
T

30 lines
1.0 KiB
Bash

# Source downloads for the ffmpeg build. One place for the retry policy: curl alone does not retry a reset connection.
SOURCES=${SOURCES:-/build/sources.txt}
retry() {
local n
for n in 1 2 3 4 5; do
"$@" && return 0
sleep $((n * 3))
done
return 1
}
# Tries each URL on the source's line in order; only bytes matching its sha256 (git: its commit) are taken.
fetch() {
local name=$1 sum urls url
read -r sum urls <<<"$(awk -v n="$name" '$1 == n { $1 = ""; print }' "$SOURCES")"
for url in $urls; do
if [[ $url == *.git ]]; then
retry git clone -q "$url" "$SRC/$name" && git -C "$SRC/$name" checkout -q "$sum" &&
[ "$(git -C "$SRC/$name" rev-parse HEAD)" = "$sum" ] && return 0
rm -rf "${SRC:?}/$name"
else
curl -fsSL --retry 5 --retry-all-errors --retry-delay 3 --connect-timeout 20 --max-time 600 -o "$SRC/$name" "$url" &&
echo "$sum $SRC/$name" | sha256sum -c --quiet && tar -xf "$SRC/$name" -C "$SRC" && return 0
fi
echo "fetch: $name not taken from $url" >&2
done
return 1
}