diff --git a/.gitignore b/.gitignore index 236a97e..b166237 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +# Auto-deploy generated files +deploy.sh +deploy.log +.deploy-trigger + # Secrets .env firebase-service-account.json @@ -25,4 +30,6 @@ dist/ .DS_Store Thumbs.db -.MAIN-APP-REFERENCE/ \ No newline at end of file +.MAIN-APP-REFERENCE/ + +.project-vesper-plan.md \ No newline at end of file diff --git a/backend/admin/router.py b/backend/admin/router.py index 6e0a3d1..b251278 100644 --- a/backend/admin/router.py +++ b/backend/admin/router.py @@ -42,23 +42,12 @@ async def deploy(request: Request): logger.info("Auto-deploy triggered via Gitea webhook") - project_path = settings.deploy_project_path - cmd = f"cd {project_path} && git pull origin main && docker compose up -d --build" - try: - proc = await asyncio.create_subprocess_shell( - cmd, - stdout=asyncio.subprocess.PIPE, - stderr=asyncio.subprocess.STDOUT, - ) - stdout, _ = await asyncio.wait_for(proc.communicate(), timeout=300) - output = stdout.decode(errors="replace") if stdout else "" + # Write a trigger file to the host-mounted project path. + # A host-side watcher service (bellsystems-deploy-watcher) polls for this + # file and runs deploy-host.sh as the bellsystems user when it appears. + trigger_path = f"{settings.deploy_project_path}/.deploy-trigger" + with open(trigger_path, "w") as f: + f.write("deploy\n") - if proc.returncode != 0: - logger.error(f"Deploy failed (exit {proc.returncode}):\n{output}") - raise HTTPException(status_code=500, detail=f"Deploy script failed:\n{output[-500:]}") - - logger.info(f"Deploy succeeded:\n{output[-300:]}") - return {"ok": True, "output": output[-1000:]} - - except asyncio.TimeoutError: - raise HTTPException(status_code=504, detail="Deploy timed out after 300 seconds") + logger.info("Auto-deploy trigger file written") + return {"ok": True, "message": "Deploy started"} diff --git a/deploy-host.sh b/deploy-host.sh new file mode 100755 index 0000000..dbeab51 --- /dev/null +++ b/deploy-host.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -e + +PROJECT=/home/bellsystems/bellsystems-cp + +echo "Deploy started at $(date)" +cd "$PROJECT" +git fetch origin main +git reset --hard origin/main +docker compose up -d --build 2>&1 +echo "Deploy finished at $(date)" diff --git a/docker-compose.yml b/docker-compose.yml index ab2ea22..ed00efc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,6 +10,8 @@ services: - ./data/built_melodies:/app/storage/built_melodies - ./data/firmware:/app/storage/firmware - ./data/firebase-service-account.json:/app/firebase-service-account.json:ro + # Auto-deploy: project root so container can write the trigger file + - /home/bellsystems/bellsystems-cp:/home/bellsystems/bellsystems-cp ports: - "8000:8000" depends_on: [] diff --git a/frontend/src/layout/Header.jsx b/frontend/src/layout/Header.jsx index 40ec38e..1bbe983 100644 --- a/frontend/src/layout/Header.jsx +++ b/frontend/src/layout/Header.jsx @@ -12,7 +12,7 @@ export default function Header() { }} >