mirror of
https://github.com/AuxXxilium/arc.git
synced 2026-09-03 06:36:32 +08:00
54 lines
1.5 KiB
Bash
Executable File
54 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Shared CI helpers for release metadata and archive downloads.
|
|
|
|
github_api_json_retry() {
|
|
local url="${1}"
|
|
local tries="${2:-6}"
|
|
local sleep_s="${3:-2}"
|
|
local i=0
|
|
local resp=""
|
|
|
|
while [ "${i}" -lt "${tries}" ]; do
|
|
resp="$(curl -fsSL --connect-timeout 10 --retry 3 --retry-delay 1 --retry-all-errors "${url}" 2>/dev/null || true)"
|
|
if [ -n "${resp}" ] && echo "${resp}" | jq -e . >/dev/null 2>&1; then
|
|
printf '%s\n' "${resp}"
|
|
return 0
|
|
fi
|
|
i=$((i + 1))
|
|
sleep "${sleep_s}"
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
github_latest_tag() {
|
|
local api_url="${1}"
|
|
local exclude_dev="${2:-false}"
|
|
local tag=""
|
|
|
|
if [ "${exclude_dev}" = "true" ]; then
|
|
tag="$(github_api_json_retry "${api_url}" | jq -r 'if type=="array" then .[].tag_name // empty else empty end' | grep -v "dev" | sort -rV | head -1)"
|
|
else
|
|
tag="$(github_api_json_retry "${api_url}" | jq -r 'if type=="array" then .[].tag_name // empty else empty end' | sort -rV | head -1)"
|
|
fi
|
|
|
|
tag="${tag#v}"
|
|
[ -n "${tag}" ] || return 1
|
|
printf '%s\n' "${tag}"
|
|
}
|
|
|
|
download_validated_zip() {
|
|
local url="${1}"
|
|
local out="${2}"
|
|
local min_size="${3:-1024}"
|
|
local tmp="${out}.part"
|
|
|
|
rm -f "${out}" "${tmp}"
|
|
curl -fL --connect-timeout 10 --retry 5 --retry-delay 2 --retry-all-errors "${url}" -o "${tmp}"
|
|
[ -s "${tmp}" ] || return 1
|
|
[ "$(stat -c%s "${tmp}")" -ge "${min_size}" ] || return 1
|
|
unzip -tqq "${tmp}" >/dev/null 2>&1 || return 1
|
|
mv -f "${tmp}" "${out}"
|
|
}
|