From 183623962f5c3fcb02664e1b915fb419023ee565 Mon Sep 17 00:00:00 2001 From: orfelorfel23 Date: Thu, 1 Oct 2026 17:59:49 +0200 Subject: [PATCH] Auto-reload script via exec when git pull fetches updates --- deploy_script.sh | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/deploy_script.sh b/deploy_script.sh index 204f2c9..c0b8540 100644 --- a/deploy_script.sh +++ b/deploy_script.sh @@ -198,6 +198,8 @@ handle_age_key() { ############################################################################### update_repo() { log "Updating repository..." + local reexec_needed=false + if [[ ! -d "${REPO_DIR}/.git" ]]; then log "No .git directory found — cloning repository..." local tmp_dir @@ -208,12 +210,32 @@ update_repo() { rm -rf "${tmp_dir}" cd "${REPO_DIR}" git checkout -- . 2>/dev/null || true + reexec_needed=true else cd "${REPO_DIR}" + local old_commit + old_commit=$(git rev-parse HEAD 2>/dev/null || echo "old") git fetch origin git reset --hard origin/main || git reset --hard origin/master || true + local new_commit + new_commit=$(git rev-parse HEAD 2>/dev/null || echo "new") + + if [[ "${old_commit}" != "${new_commit}" ]]; then + log "Update detected! (${old_commit:0:7} -> ${new_commit:0:7})" + reexec_needed=true + fi fi chmod 700 "${REPO_DIR}/deploy_script.sh" 2>/dev/null || true + + if [[ "${reexec_needed}" == "true" ]]; then + if [[ -z "${PAPERCLIP_REEXEC:-}" ]]; then + log "Re-executing updated script..." + export PAPERCLIP_REEXEC=1 + exec bash "$0" "$@" + else + warn "Re-exec already attempted. Continuing to avoid infinite loop." + fi + fi } ############################################################################### @@ -383,7 +405,11 @@ main() { trap on_deploy_failure ERR - notify "PaperClip Deploy Start" "Deploy-Skript gestartet. System wird überprüft..." "default" "gear" + if [[ -z "${PAPERCLIP_REEXEC:-}" ]]; then + notify "PaperClip Deploy Start" "Deploy-Skript gestartet. System wird überprüft..." "default" "gear" + else + notify "PaperClip Deploy Neustart" "Skript hat sich selbst geupdatet und führt sich nun aus." "default" "arrows_counterclockwise" + fi install_packages configure_system