diff --git a/install/babybuddy-install.sh b/install/babybuddy-install.sh index 04d4547..6b309b4 100644 --- a/install/babybuddy-install.sh +++ b/install/babybuddy-install.sh @@ -27,7 +27,7 @@ msg_ok "Installed Dependencies" msg_info "Installing Babybuddy" 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" unzip -q v${RELEASE}.zip mv babybuddy-${RELEASE} /opt/babybuddy diff --git a/misc/core.func b/misc/core.func index 589226e..9d0f27d 100644 --- a/misc/core.func +++ b/misc/core.func @@ -71,6 +71,35 @@ default_vars() { 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() { local exit_code="$1" local cmd="${BASH_COMMAND:-unknown}" @@ -172,27 +201,3 @@ msg_error() { local msg="$1" 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