From 389ac242309104d5734ac2d75dc48f7925ce8905 Mon Sep 17 00:00:00 2001 From: "IGNY8 VPS (Salman)" Date: Mon, 10 Nov 2025 12:02:02 +0000 Subject: [PATCH] Fix webhook to properly sync git repo on push --- backend/igny8_core/modules/system/views.py | 43 ++++++++++++++++------ 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/backend/igny8_core/modules/system/views.py b/backend/igny8_core/modules/system/views.py index b4a3d818..c2d8b036 100644 --- a/backend/igny8_core/modules/system/views.py +++ b/backend/igny8_core/modules/system/views.py @@ -530,21 +530,42 @@ def gitea_webhook(request): logger.info(f"[Webhook] Processing push: {commit_count} commit(s) by {pusher} to {repo_full_name}") - # Pull latest code first + # Pull latest code - use docker Python library to exec into gitea container try: - import subprocess + import docker as docker_lib logger.info(f"[Webhook] Pulling latest code...") - result = subprocess.run( - ['/data/app/igny8/scripts/git-pull.sh'], - capture_output=True, - text=True, - timeout=30, - cwd='/data/app/igny8' + client = docker_lib.DockerClient(base_url='unix://var/run/docker.sock') + gitea_container = client.containers.get('gitea') + exec_result = gitea_container.exec_run( + 'bash -c "git config --global --add safe.directory /deploy/igny8 2>/dev/null || true && ' + 'git -C /deploy/igny8 fetch origin main && ' + 'git -C /deploy/igny8 reset --hard origin/main"', + user='root' ) - if result.returncode == 0: - logger.info(f"[Webhook] Git pull successful: {result.stdout}") + if exec_result.exit_code == 0: + logger.info(f"[Webhook] Git pull successful") else: - logger.error(f"[Webhook] Git pull failed: {result.stderr}") + logger.error(f"[Webhook] Git pull failed: {exec_result.output.decode()}") + except ImportError: + # Fallback to subprocess if docker library not available + try: + import subprocess + logger.info(f"[Webhook] Pulling latest code (subprocess fallback)...") + result = subprocess.run( + ['docker', 'exec', 'gitea', 'bash', '-c', + 'git config --global --add safe.directory /deploy/igny8 2>/dev/null || true && ' + 'git -C /deploy/igny8 fetch origin main && ' + 'git -C /deploy/igny8 reset --hard origin/main'], + capture_output=True, + text=True, + timeout=30 + ) + if result.returncode == 0: + logger.info(f"[Webhook] Git pull successful") + else: + logger.error(f"[Webhook] Git pull failed: {result.stderr}") + except Exception as e: + logger.error(f"[Webhook] Git pull error: {e}") except Exception as e: logger.error(f"[Webhook] Git pull error: {e}")