# 02 — Fluxo GitOps (do push ao container no ar) ```mermaid sequenceDiagram participant Dev as Dev (VPS4) participant Gitea as Gitea (VPS3) participant Listener as Listener (VPS4:porta) participant Build as deploy-*.sh (VPS4) participant Prod as Docker (VPS1) Dev->>Gitea: git push origin main Gitea->>Listener: POST /webhook?token=... Listener->>Listener: valida token + trava de concorrência Listener->>Gitea: status = pending Listener->>Build: executa deploy-*.sh (background) Build->>Gitea: git fetch & reset --hard Build->>Build: build / version bump Build->>Prod: rsync (artefato ou fonte) Build->>Prod: ssh docker compose up -d [--build] Build->>Gitea: git push (chore(deploy): bump version) Note over Listener: commit de bump é IGNORADO (anti-loop) Build-->>Listener: exit 0 Listener->>Gitea: status = success ``` ## Pontos importantes do listener - **Resposta 202 imediata**: evita timeout do webhook do Gitea; o build roda em background. - **Trava `isBuilding`**: retorna `429` se já houver build rodando (sem deploys concorrentes). - **Anti-loop de CI**: commits cuja mensagem casa com `^chore\(deploy\): bump version` são **ignorados** — senão o `git push` do bump dispararia um novo deploy infinitamente. - **Status no Gitea**: `pending` → `success`/`failure`, aparecendo o ✔/✘ ao lado do commit.