Fix webhook to run git pull directly in mounted repo
This commit is contained in:
@@ -530,44 +530,28 @@ def gitea_webhook(request):
|
|||||||
|
|
||||||
logger.info(f"[Webhook] Processing push: {commit_count} commit(s) by {pusher} to {repo_full_name}")
|
logger.info(f"[Webhook] Processing push: {commit_count} commit(s) by {pusher} to {repo_full_name}")
|
||||||
|
|
||||||
# Pull latest code - use docker Python library to exec into gitea container
|
# Pull latest code - run git pull directly in the mounted repo
|
||||||
try:
|
|
||||||
import docker as docker_lib
|
|
||||||
logger.info(f"[Webhook] Pulling latest code...")
|
|
||||||
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 exec_result.exit_code == 0:
|
|
||||||
logger.info(f"[Webhook] Git pull successful")
|
|
||||||
else:
|
|
||||||
logger.error(f"[Webhook] Git pull failed: {exec_result.output.decode()}")
|
|
||||||
except ImportError:
|
|
||||||
# Fallback to subprocess if docker library not available
|
|
||||||
try:
|
try:
|
||||||
import subprocess
|
import subprocess
|
||||||
logger.info(f"[Webhook] Pulling latest code (subprocess fallback)...")
|
logger.info(f"[Webhook] Pulling latest code...")
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
['docker', 'exec', 'gitea', 'bash', '-c',
|
['git', '-C', '/data/app/igny8', 'config', '--global', '--add', 'safe.directory', '/data/app/igny8'],
|
||||||
'git config --global --add safe.directory /deploy/igny8 2>/dev/null || true && '
|
capture_output=True,
|
||||||
'git -C /deploy/igny8 fetch origin main && '
|
text=True,
|
||||||
'git -C /deploy/igny8 reset --hard origin/main'],
|
timeout=5
|
||||||
|
)
|
||||||
|
result = subprocess.run(
|
||||||
|
['git', '-C', '/data/app/igny8', 'pull', 'origin', 'main'],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
timeout=30
|
timeout=30
|
||||||
)
|
)
|
||||||
if result.returncode == 0:
|
if result.returncode == 0:
|
||||||
logger.info(f"[Webhook] Git pull successful")
|
logger.info(f"[Webhook] Git pull successful: {result.stdout}")
|
||||||
else:
|
else:
|
||||||
logger.error(f"[Webhook] Git pull failed: {result.stderr}")
|
logger.error(f"[Webhook] Git pull failed: {result.stderr}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"[Webhook] Git pull error: {e}")
|
logger.error(f"[Webhook] Git pull error: {e}")
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"[Webhook] Git pull error: {e}")
|
|
||||||
|
|
||||||
# Trigger deployment - restart containers
|
# Trigger deployment - restart containers
|
||||||
deployment_success = False
|
deployment_success = False
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ services:
|
|||||||
# SECRET_KEY should be set via environment variable in production
|
# SECRET_KEY should be set via environment variable in production
|
||||||
volumes:
|
volumes:
|
||||||
- /data/app/igny8/backend:/app:rw
|
- /data/app/igny8/backend:/app:rw
|
||||||
- /data/app/igny8:/data/app/igny8:ro
|
- /data/app/igny8:/data/app/igny8:rw
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
- /data/app/logs:/app/logs:rw
|
- /data/app/logs:/app/logs:rw
|
||||||
# Note: postgres and redis are external services from infra stack
|
# Note: postgres and redis are external services from infra stack
|
||||||
|
|||||||
Reference in New Issue
Block a user