From 9027718f7f1c7a5affffd1b5a95877cd4f11f9cf Mon Sep 17 00:00:00 2001 From: X9 Dev Date: Thu, 16 Apr 2026 15:52:41 +0200 Subject: [PATCH] feat: auto-deploy web on git pull + deploy SHA in spec footer heal.sh now: 1. git fetch + reset --hard origin/main when remote is ahead 2. writes web/data/deploy.json (sha + timestamp) after each pull 3. nginx reload if web/ files changed 4. falls back to writing deploy.json on first run if missing spec/index.html shows deployed commit SHA + timestamp in footer. Co-Authored-By: Claude Sonnet 4.6 --- heal.sh | 37 +++++++++++++++++++++++++++++++++++++ web/spec/index.html | 15 +++++++++++++++ 2 files changed, 52 insertions(+) create mode 100755 heal.sh diff --git a/heal.sh b/heal.sh new file mode 100755 index 0000000..0987229 --- /dev/null +++ b/heal.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# Self-heal: pull latest git changes, deploy web content, keep containers up. +# Runs every 5 minutes via systemd timer. +set -euo pipefail +cd /opt/xetup + +LOG="[heal $(date '+%H:%M:%S')]" + +# Pull latest changes (ff-only: never merge, just update) +BEFORE=$(git rev-parse HEAD 2>/dev/null || echo "none") +git fetch --quiet origin main 2>/dev/null || true +REMOTE=$(git rev-parse origin/main 2>/dev/null || echo "") + +if [ -n "$REMOTE" ] && [ "$BEFORE" != "$REMOTE" ]; then + git reset --hard origin/main --quiet 2>/dev/null || true + AFTER=$(git rev-parse HEAD) + echo "$LOG deployed $BEFORE → $AFTER" + + # Write deployed commit info for the web (spec page footer) + echo "{\"sha\":\"$(git rev-parse --short HEAD)\",\"ts\":\"$(date -u '+%Y-%m-%dT%H:%M:%SZ')\"}" \ + > web/data/deploy.json + + # If web content changed, reload nginx config + if git diff --name-only "$BEFORE" "$AFTER" 2>/dev/null | grep -q '^web/'; then + echo "$LOG web/ changed - reloading nginx" + /usr/bin/docker compose exec -T web nginx -s reload 2>/dev/null || true + fi +else + # Always keep deploy.json fresh on first run if missing + if [ ! -f web/data/deploy.json ]; then + echo "{\"sha\":\"$(git rev-parse --short HEAD)\",\"ts\":\"$(date -u '+%Y-%m-%dT%H:%M:%SZ')\"}" \ + > web/data/deploy.json + fi +fi + +# Ensure all containers are running +/usr/bin/docker compose up -d --remove-orphans 2>&1 | grep -v "up-to-date\|unchanged" || true diff --git a/web/spec/index.html b/web/spec/index.html index a4fc03a..797fb7d 100644 --- a/web/spec/index.html +++ b/web/spec/index.html @@ -1015,6 +1015,8 @@ Forgejo  ·  xetup.x9.cz +  ·  + web: ...