various updates
This commit is contained in:
122
hampackcheck
Executable file
122
hampackcheck
Executable file
@@ -0,0 +1,122 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Purpose: Check for available version updates in binaries.conf and compile.conf
|
||||
|
||||
HAMPACK_DIR="${HAMPACK_DIR:-$HOME/.local/share/HamPack}"
|
||||
BINARIES_CONF="${HAMPACK_BINARIES_CONF:-$HAMPACK_DIR/binaries.conf}"
|
||||
COMPILE_CONF="${HAMPACK_COMPILE_CONF:-$HAMPACK_DIR/compile.conf}"
|
||||
|
||||
# Extract "owner/repo" from a GitHub URL, or empty string if not GitHub
|
||||
github_repo_from_url() {
|
||||
local url="$1"
|
||||
if [[ "$url" =~ github\.com/([^/]+)/([^/]+) ]]; then
|
||||
echo "${BASH_REMATCH[1]}/${BASH_REMATCH[2]%.git}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Fetch latest release tag via GitHub API, stripping leading "v"
|
||||
github_latest() {
|
||||
local repo="$1"
|
||||
curl -sf "https://api.github.com/repos/$repo/releases/latest" \
|
||||
| grep '"tag_name"' \
|
||||
| sed 's/.*"tag_name": *"\([^"]*\)".*/\1/' \
|
||||
| sed 's/^v//'
|
||||
}
|
||||
|
||||
print_result() {
|
||||
local app="$1"
|
||||
local pinned="$2"
|
||||
local latest="$3"
|
||||
local manual_url="$4"
|
||||
|
||||
if [ -n "$manual_url" ]; then
|
||||
printf " %-20s pinned=%-15s (manual check: %s)\n" "$app" "$pinned" "$manual_url"
|
||||
elif [ -z "$latest" ]; then
|
||||
printf " %-20s pinned=%-15s (GitHub API unavailable)\n" "$app" "$pinned"
|
||||
elif [ "$pinned" = "$latest" ]; then
|
||||
printf " %-20s up to date (%s)\n" "$app" "$pinned"
|
||||
else
|
||||
printf " %-20s pinned=%-15s latest=%-15s ** UPDATE AVAILABLE **\n" "$app" "$pinned" "$latest"
|
||||
fi
|
||||
}
|
||||
|
||||
check_app() {
|
||||
local app="$1"
|
||||
local version="$2"
|
||||
local url="$3" # git= or url= field (may be GitHub)
|
||||
local fallback="$4" # wget= or non-GitHub url for manual check
|
||||
|
||||
[ -z "$app" ] || [ -z "$version" ] && return
|
||||
|
||||
local gh_repo
|
||||
gh_repo=$(github_repo_from_url "$url")
|
||||
|
||||
if [ -n "$gh_repo" ]; then
|
||||
print_result "$app" "$version" "$(github_latest "$gh_repo")" ""
|
||||
else
|
||||
print_result "$app" "$version" "" "${fallback:-$url}"
|
||||
fi
|
||||
}
|
||||
|
||||
check_binaries() {
|
||||
echo "=== binaries.conf ==="
|
||||
local app="" version="" url=""
|
||||
|
||||
while IFS= read -r line || [ -n "$line" ]; do
|
||||
[[ -z "$line" || "$line" == \#* ]] && continue
|
||||
|
||||
if [[ "$line" =~ ^\[(.+)\]$ ]]; then
|
||||
check_app "$app" "$version" "$url" ""
|
||||
app="${BASH_REMATCH[1]}" version="" url=""
|
||||
continue
|
||||
fi
|
||||
|
||||
local key="${line%%=*}" value="${line#*=}"
|
||||
case "$key" in
|
||||
version) version="$value" ;;
|
||||
url) url="$value" ;;
|
||||
esac
|
||||
done < "$BINARIES_CONF"
|
||||
|
||||
check_app "$app" "$version" "$url" ""
|
||||
}
|
||||
|
||||
check_compiled() {
|
||||
echo ""
|
||||
echo "=== compile.conf ==="
|
||||
local app="" version="" git_url="" wget_url=""
|
||||
|
||||
while IFS= read -r line || [ -n "$line" ]; do
|
||||
[[ -z "$line" || "$line" == \#* ]] && continue
|
||||
|
||||
if [[ "$line" =~ ^\[(.+)\]$ ]]; then
|
||||
check_app "$app" "$version" "$git_url" "$wget_url"
|
||||
app="${BASH_REMATCH[1]}" version="" git_url="" wget_url=""
|
||||
continue
|
||||
fi
|
||||
|
||||
local key="${line%%=*}" value="${line#*=}"
|
||||
case "$key" in
|
||||
version) version="$value" ;;
|
||||
git) git_url="$value" ;;
|
||||
wget) wget_url="$value" ;;
|
||||
esac
|
||||
done < "$COMPILE_CONF"
|
||||
|
||||
check_app "$app" "$version" "$git_url" "$wget_url"
|
||||
}
|
||||
|
||||
# --- Main ---
|
||||
|
||||
for conf in "$BINARIES_CONF" "$COMPILE_CONF"; do
|
||||
if [ ! -f "$conf" ]; then
|
||||
echo "Error: $conf not found."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Checking HamPack application versions..."
|
||||
check_binaries
|
||||
check_compiled
|
||||
echo ""
|
||||
echo "Done."
|
||||
Reference in New Issue
Block a user