Auto-reload script via exec when git pull fetches updates

This commit is contained in:
Jannik committed 2026-10-01 17:59:49 +02:00
1 parent 2a753ffcde
commit 183623962f
1 file changed
+27 -1
+27 -1
View File
@@ -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