Files
FacereWeb/deploy/pull.sh
Knowit 5029c5db6f Switch nginx config to directory mount and add webhook listener
- Move deploy/nginx.conf -> deploy/conf.d/default.conf and mount the
  directory so future config changes can be hot-reloaded with
  `nginx -s reload` instead of a full container restart.
- Add deploy/hook.py: a tiny stdlib HMAC-validated webhook listener that
  runs pull.sh on Gitea push events. Bound to 127.0.0.1:9528 and
  fronted by openresty at /_hook/deploy.
- Add the matching systemd unit at deploy/facere-deploy-hook.service.
- Teach pull.sh the new layout (reload vs. restart vs. compose up -d)
  and self-restart the hook listener if hook.py changes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 02:04:02 +08:00

38 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
cd /home/ubuntu/repo/facere-website
before=$(git rev-parse HEAD)
git fetch --quiet origin main
after=$(git rev-parse origin/main)
if [ "$before" = "$after" ]; then
exit 0
fi
changed=$(git diff --name-only "$before" "$after")
nginx_conf_changed=0
compose_changed=0
hook_changed=0
if grep -qx 'deploy/conf.d/default.conf' <<<"$changed"; then nginx_conf_changed=1; fi
if grep -qx 'deploy/docker-compose.yml' <<<"$changed"; then compose_changed=1; fi
if grep -qx 'deploy/hook.py' <<<"$changed"; then hook_changed=1; fi
git reset --hard origin/main
echo "[$(date -Is)] deployed $before -> $after"
if [ "$compose_changed" = "1" ]; then
( cd /home/ubuntu/repo/facere-website/deploy && sudo -n docker compose up -d ) >/dev/null
echo "[$(date -Is)] docker compose up -d (compose changed)"
elif [ "$nginx_conf_changed" = "1" ]; then
if sudo -n docker exec facere-web nginx -t >/dev/null 2>&1; then
sudo -n docker exec facere-web nginx -s reload >/dev/null
echo "[$(date -Is)] nginx reloaded (default.conf changed)"
else
echo "[$(date -Is)] nginx config test FAILED, not reloading" >&2
fi
fi
if [ "$hook_changed" = "1" ]; then
sudo -n systemctl restart facere-deploy-hook >/dev/null || true
echo "[$(date -Is)] facere-deploy-hook restarted (hook.py changed)"
fi