improve the update function
This commit is contained in:
191
hampackupdate
191
hampackupdate
@@ -41,196 +41,9 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
HAMPACK_DIR="$HOME/.local/share/HamPack"
|
HAMPACK_DIR="$HOME/.local/share/HamPack"
|
||||||
VERSION_FILE="$HOME/.local/state/HamPack/.installed_versions"
|
|
||||||
COMPILE_CONF="$HAMPACK_DIR/compile.conf"
|
|
||||||
BINARIES_CONF="$HAMPACK_DIR/binaries.conf"
|
|
||||||
|
|
||||||
echo "Pulling latest HamPack configuration..."
|
echo "Pulling latest HamPack configuration..."
|
||||||
git -C "$HAMPACK_DIR" pull
|
git -C "$HAMPACK_DIR" pull
|
||||||
|
|
||||||
# ── GitHub version helpers ────────────────────────────────────────────────────
|
echo "Running HamPack installer..."
|
||||||
|
bash "$HAMPACK_DIR/install.sh"
|
||||||
github_repo_from_url() {
|
|
||||||
local url="$1"
|
|
||||||
if [[ "$url" =~ github\.com/([^/]+)/([^/]+) ]]; then
|
|
||||||
echo "${BASH_REMATCH[1]}/${BASH_REMATCH[2]%.git}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
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//'
|
|
||||||
}
|
|
||||||
|
|
||||||
installed_version() {
|
|
||||||
local app="$1"
|
|
||||||
grep "^$app=" "$VERSION_FILE" 2>/dev/null | cut -d'=' -f2
|
|
||||||
}
|
|
||||||
|
|
||||||
# Update version= for an app in a conf file
|
|
||||||
set_conf_version() {
|
|
||||||
local conf="$1" app="$2" new_version="$3"
|
|
||||||
awk -v app="$app" -v ver="$new_version" '
|
|
||||||
/^\[/ { in_app = ($0 == "[" app "]") }
|
|
||||||
in_app && /^version=/ { print "version=" ver; next }
|
|
||||||
{ print }
|
|
||||||
' "$conf" > "$conf.tmp" && mv "$conf.tmp" "$conf"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ── Check compiled apps (compile.conf) ───────────────────────────────────────
|
|
||||||
|
|
||||||
check_compiled() {
|
|
||||||
echo ""
|
|
||||||
echo "Checking compiled application versions..."
|
|
||||||
local app="" version="" git_url="" wget_url=""
|
|
||||||
|
|
||||||
while IFS= read -r line || [ -n "$line" ]; do
|
|
||||||
[[ -z "$line" || "$line" == \#* ]] && continue
|
|
||||||
|
|
||||||
if [[ "$line" =~ ^\[(.+)\]$ ]]; then
|
|
||||||
_check_compiled_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_compiled_app "$app" "$version" "$git_url" "$wget_url"
|
|
||||||
}
|
|
||||||
|
|
||||||
_check_compiled_app() {
|
|
||||||
local app="$1" version="$2" git_url="$3" wget_url="$4"
|
|
||||||
[ -z "$app" ] && return
|
|
||||||
|
|
||||||
local source_url="${git_url:-$wget_url}"
|
|
||||||
local gh_repo
|
|
||||||
gh_repo=$(github_repo_from_url "$source_url")
|
|
||||||
|
|
||||||
if [ -z "$gh_repo" ]; then
|
|
||||||
echo " $app: manual check needed: $source_url"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
local latest
|
|
||||||
latest=$(github_latest "$gh_repo")
|
|
||||||
|
|
||||||
if [ -z "$latest" ]; then
|
|
||||||
echo " $app: GitHub API unavailable, skipping"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
local installed
|
|
||||||
installed=$(installed_version "$app")
|
|
||||||
local current="${installed:-$version}"
|
|
||||||
|
|
||||||
if [ "$current" = "$latest" ]; then
|
|
||||||
echo " $app: up to date ($current)"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo " $app: $current -> $latest"
|
|
||||||
|
|
||||||
if [ -n "$git_url" ]; then
|
|
||||||
# git= apps: update version in conf and clear installed record so
|
|
||||||
# install-compiled.sh rebuilds from the freshly cloned HEAD
|
|
||||||
set_conf_version "$COMPILE_CONF" "$app" "$latest"
|
|
||||||
sed -i "/^$app=/d" "$VERSION_FILE" 2>/dev/null
|
|
||||||
echo " $app: queued for rebuild"
|
|
||||||
else
|
|
||||||
echo " $app: update available but URL is version-specific — update compile.conf manually"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# ── Check binary apps (binaries.conf) ────────────────────────────────────────
|
|
||||||
|
|
||||||
check_binaries() {
|
|
||||||
echo ""
|
|
||||||
echo "Checking binary application versions..."
|
|
||||||
local app="" version="" url=""
|
|
||||||
|
|
||||||
while IFS= read -r line || [ -n "$line" ]; do
|
|
||||||
[[ -z "$line" || "$line" == \#* ]] && continue
|
|
||||||
|
|
||||||
if [[ "$line" =~ ^\[(.+)\]$ ]]; then
|
|
||||||
_check_binary_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_binary_app "$app" "$version" "$url"
|
|
||||||
}
|
|
||||||
|
|
||||||
_check_binary_app() {
|
|
||||||
local app="$1" version="$2" url="$3"
|
|
||||||
[ -z "$app" ] && return
|
|
||||||
|
|
||||||
local gh_repo
|
|
||||||
gh_repo=$(github_repo_from_url "$url")
|
|
||||||
|
|
||||||
if [ -z "$gh_repo" ]; then
|
|
||||||
echo " $app: manual check needed: $url"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
local latest
|
|
||||||
latest=$(github_latest "$gh_repo")
|
|
||||||
|
|
||||||
if [ -z "$latest" ]; then
|
|
||||||
echo " $app: GitHub API unavailable, skipping"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
local installed
|
|
||||||
installed=$(installed_version "$app")
|
|
||||||
local current="${installed:-$version}"
|
|
||||||
|
|
||||||
if [ "$current" = "$latest" ]; then
|
|
||||||
echo " $app: up to date ($current)"
|
|
||||||
else
|
|
||||||
echo " $app: update available ($current -> $latest) — update binaries.conf to install"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# ── Main ─────────────────────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
mkdir -p "$HOME/.local/state/HamPack"
|
|
||||||
|
|
||||||
check_compiled
|
|
||||||
check_binaries
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Installing any new packages..."
|
|
||||||
source "$HAMPACK_DIR/utils.sh"
|
|
||||||
source "$HAMPACK_DIR/packages.conf"
|
|
||||||
install_packages "${UTILITIES[@]}"
|
|
||||||
install_packages "${APPLICATIONS[@]}"
|
|
||||||
|
|
||||||
echo "Installing any new Flatpaks..."
|
|
||||||
source "$HAMPACK_DIR/install-flatpaks.sh"
|
|
||||||
|
|
||||||
echo "Installing any new or updated compiled applications..."
|
|
||||||
bash "$HAMPACK_DIR/install-compiled.sh"
|
|
||||||
|
|
||||||
echo "Installing any new or updated pre-built binaries..."
|
|
||||||
bash "$HAMPACK_DIR/install-binaries.sh"
|
|
||||||
|
|
||||||
echo "Updating Not1mm..."
|
|
||||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
||||||
|
|
||||||
echo "Done. You probably want to reboot your system..."
|
|
||||||
|
|||||||
Reference in New Issue
Block a user