community_curl

This commit is contained in:
CanbiZ 2025-05-07 15:44:12 +02:00
parent 6944e9db9e
commit aff6057cde
2 changed files with 30 additions and 25 deletions

View File

@ -27,7 +27,7 @@ msg_ok "Installed Dependencies"
msg_info "Installing Babybuddy" msg_info "Installing Babybuddy"
cd /opt cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddys/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(community_curl https://api.github.com/repos/babybuddys/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
wget -q "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.zip" wget -q "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.zip"
unzip -q v${RELEASE}.zip unzip -q v${RELEASE}.zip
mv babybuddy-${RELEASE} /opt/babybuddy mv babybuddy-${RELEASE} /opt/babybuddy

View File

@ -71,6 +71,35 @@ default_vars() {
i=$RETRY_NUM i=$RETRY_NUM
} }
community_curl() {
local url="$1"
shift
local max_retries=3
local delay=2
local attempt=1
local result exit_code
msg_info "Fetching: $url"
while :; do
result=$(curl -fsSL --retry 0 "$url" "$@" 2>/dev/null)
exit_code=$?
if [[ $exit_code -eq 0 ]]; then
printf '%s' "$result"
return 0
fi
if ((attempt >= max_retries)); then
__curl_err_handler "$exit_code"
return 1
fi
msg_info "Curl failed (attempt $attempt of $max_retries). Retrying in ${delay}s..."
sleep "$delay"
((attempt++))
done
}
__curl_err_handler() { __curl_err_handler() {
local exit_code="$1" local exit_code="$1"
local cmd="${BASH_COMMAND:-unknown}" local cmd="${BASH_COMMAND:-unknown}"
@ -172,27 +201,3 @@ msg_error() {
local msg="$1" local msg="$1"
printf "\r\e[2K%s %b\n" "${CROSS}" "${RD}${msg}${CL}" >&2 printf "\r\e[2K%s %b\n" "${CROSS}" "${RD}${msg}${CL}" >&2
} }
if [[ -n "$BASH_VERSION" ]] && [[ "$OSTYPE" != "alpine"* ]]; then
__last_command=""
__last_result=0
# Enable extended tracing
set -o errtrace
set -o functrace
# Track the last command and its exit code
trap '__last_result=$?; __last_command=$BASH_COMMAND' DEBUG
# Global error handler
trap '__global_err_handler "$__last_result" "$__last_command"' ERR
__global_err_handler() {
local exit_code="$1"
local cmd="$2"
[[ $cmd == curl* ]] && __curl_err_handler "$exit_code"
}
else
# Alpine oder nicht-Bash: Hinweis bei Curl-Fehlern nicht verfügbar
export BASH_FALLBACK_CURL_HANDLER=1
fi