From 05141af8fe9fec6d9202256097c94c66ea702c50 Mon Sep 17 00:00:00 2001 From: Dmitry Shilov Date: Thu, 1 Oct 2026 00:04:56 +0300 Subject: [PATCH] =?UTF-8?q?feat(install):=20handle=20updates=20=E2=80=94?= =?UTF-8?q?=20stop=20old=20daemon,=20back=20up,=20install=20new=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - detect installed version via --version; skip when already up to date - stop the running daemon and keep agent-arka.previous rollback copy on upgrade/downgrade --- agent-arka/install.sh | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/agent-arka/install.sh b/agent-arka/install.sh index 5f4d8e1..16c5bc0 100755 --- a/agent-arka/install.sh +++ b/agent-arka/install.sh @@ -157,6 +157,19 @@ ensure_path() { warn "Added ${bindir} to PATH in ${rc} (open a new shell, or: source ${rc})" } +# Normalize a CalVer "YYYY.M.D" into a single sortable integer (YYYYMMDD pads). +ver_cmp_key() { + printf '%s' "$1" | awk -F. '{ printf "%04d%02d%02d", $1, $2, $3 }' 2>/dev/null || printf '%s' 0 +} + +# Installed version, or empty when there is no binary/detectable version. +installed_version() { + local bin="$1" out + [[ -x "$bin" ]] || return 1 + out=$("$bin" --version 2>/dev/null | head -n 1) || return 1 + printf '%s\n' "$out" | grep -oE '[0-9]{4}\.[0-9]+(\.[0-9]+)?' | tail -n 1 +} + main() { printf '%s\n' "${C_BOLD}Agent Arka${C_RESET} — web dashboard installer" command -v curl >/dev/null 2>&1 || die "curl is required" @@ -183,6 +196,31 @@ main() { info "Latest: ${version}" fi + # Update handling: detect an existing install and skip / stop / back it up. + local existing + existing=$(installed_version "${bindir}/agent-arka" 2>/dev/null || true) + if [[ -n "$existing" ]]; then + local ek tk + ek=$(ver_cmp_key "$existing") + tk=$(ver_cmp_key "$version") + if [[ "$ek" == "$tk" ]]; then + info "Already up to date: agent-arka ${existing} (target ${version})" + ensure_path "$bindir" + return 0 + fi + if [[ "$ek" -gt "$tk" ]]; then + warn "Downgrading ${existing} -> ${version}" + else + info "Upgrading ${existing} -> ${version}" + fi + # Bring the running daemon down before replacing the binary. + if AGENT_ARKA_HOME="${HOME_DIR}" LIBREFANG_HOME="${HOME_DIR}" "${bindir}/agent-arka" stop >/dev/null 2>&1; then + ok "Stopped running agent-arka ${existing}" + fi + # Keep a rollback copy of the current binary. + cp -f "${bindir}/agent-arka" "${bindir}/agent-arka.previous" 2>/dev/null || true + fi + local tag="${TAG_PREFIX}${version}" local asset="agent-arka-${version}-${PLATFORM}.tar.gz" local url="${PUBLIC_DL}/${tag}/${asset}"