@@ -1964,75 +1964,91 @@ check_for_gh_release() {
19641964 }
19651965 fi
19661966
1967- # Fetch all releases (newest → oldest)
1968- local releases
1969- releases=$( curl -fsSL " https://api.github.com/repos/${source} /releases" |
1970- jq -r ' .[].tag_name' | sed ' s/^v//' )
1967+ # Fetch releases (newest → oldest)
1968+ local releases=" "
1969+ releases=$(
1970+ curl -fsSL --max-time 15 \
1971+ -H ' Accept: application/vnd.github+json' \
1972+ -H ' X-GitHub-Api-Version: 2022-11-28' \
1973+ " https://api.github.com/repos/${source} /releases" |
1974+ jq -r ' .[].tag_name' | sed ' s/^v//'
1975+ ) || true
19711976
19721977 if [[ -z " $releases " ]]; then
19731978 msg_error " Unable to fetch releases for ${app} "
19741979 return 1
19751980 fi
19761981
1982+ # Define current and latest versions
19771983 local latest current
19781984 latest=$( echo " $releases " | head -n1)
1979- [[ -f " $current_file " ]] && current=$( < " $current_file " )
1985+ current=" "
1986+ if [[ -f " $current_file " ]]; then
1987+ current=" $( < " $current_file " ) "
1988+ fi
19801989
1981- # helper : get index (lower index = newer)
1990+ # Helper : get index of a version (lower = newer)
19821991 get_index () {
1983- local ver=" $1 "
1984- echo " $releases " | nl -ba | grep -w " $ver " | awk ' {print $1}'
1992+ local ver=" ${1:- } "
1993+ [[ -z " $ver " ]] && return 1
1994+ local idx
1995+ idx=$( nl -ba <<< " $releases" | awk -v v=" $ver " ' $2==v{print $1; exit}' )
1996+ [[ -n " $idx " ]] || return 1
1997+ echo " $idx "
19851998 }
19861999
1987- # --- Pinning enabled ---
2000+ # Pinning enabled
19882001 if [[ -n " $pinned_version " ]]; then
1989- # Ensure pin exists upstream
1990- if ! echo " $releases " | grep -qx " $pinned_version " ; then
1991- msg_error " Pinned version v${pinned_version} not found in upstream releases!"
2002+ if ! grep -qxF " $pinned_version " <<< " $releases" ; then
2003+ msg_error " Pinned version v${pinned_version} not found upstream"
19922004 return 1
19932005 fi
19942006
1995- local pinned_index current_index
1996- pinned_index=$( get_index " $pinned_version " )
1997- current_index=$( get_index " $current " )
1998-
19992007 if [[ -z " $current " ]]; then
20002008 msg_info " ${app} pinned to v${pinned_version} , no local version → install required"
20012009 CHECK_UPDATE_RELEASE=" $pinned_version "
2010+ : > " $current_file "
20022011 return 0
20032012 fi
20042013
20052014 if [[ " $current " == " $pinned_version " ]]; then
20062015 if [[ " $pinned_version " == " $latest " ]]; then
2007- msg_ok " ${app} pinned to v${pinned_version} (no update needed )"
2016+ msg_ok " ${app} pinned to v${pinned_version} (up to date )"
20082017 else
20092018 msg_ok " ${app} pinned to v${pinned_version} (already installed, upstream v${latest} )"
20102019 fi
20112020 return 1
20122021 fi
20132022
2014- # Local older than pinned → update
2023+ local pinned_index current_index
2024+ pinned_index=" $( get_index " $pinned_version " || true) "
2025+ current_index=" $( get_index " $current " || true) "
2026+
20152027 if [[ -z " $current_index " ]] || [[ " $current_index " -gt " $pinned_index " ]]; then
20162028 msg_info " ${app} pinned to v${pinned_version} (installed v${current:- none} ) → update required"
20172029 CHECK_UPDATE_RELEASE=" $pinned_version "
2030+ : > " $current_file "
20182031 return 0
20192032 fi
20202033
2021- # Local newer than pinned → downgrade
20222034 if [[ " $current_index " -lt " $pinned_index " ]]; then
20232035 msg_info " ${app} pinned to v${pinned_version} (installed newer v${current} ) → downgrade required"
20242036 CHECK_UPDATE_RELEASE=" $pinned_version "
2037+ : > " $current_file "
20252038 return 0
20262039 fi
2040+
2041+ return 1
20272042 fi
20282043
2029- # --- No pin → compare against latest ---
2030- if [[ " $current " != " $latest " ]] || [[ -z " $current " ]]; then
2044+ # No pinning → compare against latest
2045+ if [[ -z " $current " || " $current " != " $latest " ]]; then
20312046 CHECK_UPDATE_RELEASE=" $latest "
20322047 msg_info " New release available: v${latest} (current: v${current:- none} )"
2048+ : > " $current_file "
20332049 return 0
2034- else
2035- msg_ok " ${app} is up to date (v${latest} )"
2036- return 1
20372050 fi
2051+
2052+ msg_ok " ${app} is up to date (v${latest} )"
2053+ return 1
20382054}
0 commit comments