mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-10-30 09:16:55 +00:00
30 lines
1.0 KiB
Bash
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
|
|
}
|