teqo-backup/docs/changelog/2026-08-17-ops53.md
Francisco Solla 6a3f61f968 ops(OPS53): etapa de deploy no CI para o homeserver (teqo-1313)
Job deploy em ci.yml (runs-on host na workstation) streama
scripts/deploy-homeserver.sh para o homeserver via SSH: build dos stages
runner+migrator com secrets do teqo-1313.env, push no registry local,
migrate pelo serviço de maintenance antes do rollout, up + smoke. Zero
secrets novos no Forgejo; HEAD guard + flock; rollback automático com
backup do compose; runbook docs/ops/teqo-1313-deploy.md; invariantes
unit do script (bash -n + estrutura).
2026-08-18 00:50:41 +00:00

2.3 KiB

Recently resolved (2026-08-17): OPS53 — o deploy do site 1313 virou etapa do CI: mergir em main com a suite verde == site atualizado em jorgesolla1313.com.br, sem passo manual. O job deploy em .forgejo/workflows/ci.yml roda no host do runner (workstation, runs-on: host) e streama scripts/deploy-homeserver.sh para o homeserver via SSH (ssh homeserver "bash -s -- <sha>"); o script remoto (bash puro, homeserver sem dependências novas) faz: guard de HEAD (git ls-remote de main == SHA do job, senão skip "stale"), flock de serialização, workspace ~/teqo-deploy (clone do Forgejo local), docker login localhost:5000 (REGISTRY_USER/PASSWORD de ~/stack/.env), build dos stages runner+migrator no homeserver (--network stack_default para a geração estática alcançar o postgres:5432 do compose; secrets de ~/stack/teqo-1313.env via BuildKit, sem camadas/logs), push no registry local, swap dos tags de imagem no compose (com backup docker-compose.yml.pre-<sha>), migrate pelo serviço de maintenance teqo-1313-migrate antes do rollout, docker compose up -d, espera do healthcheck e smoke (/, /campanha/login, /admin, barreira 307, WebAuthn login-options com body JSON, POST /api/revalidate com o secret real — rehearsal validado contra o site vivo). Falha pós-swap → rollback automático best-effort (restore do backup + up -d da imagem anterior) + job vermelho. Divergência deliberada da intenção (fato novo): a intenção assumia o runner no homeserver; verificado (infra-solla/STATE.md + ao vivo) que o runner é a workstation-runner na workstation e o stack de produção vive no homeserver — a abordagem A foi corrigida para "job runs-on: host na workstation + todo o deploy no homeserver via SSH", o que manteve zero secrets novos no Forgejo e zero mudança de infra no compose. Nenhum secret no repo; envs seguem chmod-600 no homeserver. Runbook (rollback manual, falhas conhecidas, decisão de segurança do host label): docs/ops/teqo-1313-deploy.md (novo). Guarda estrutural nova: tests/unit/deployScript.unit.spec.ts (bash -n + invariantes do pipeline: HEAD guard, BuildKit secrets, ordem migrate→rollout, smoke). AGENTS.md/AGENT-OPS.md atualizados. Primeiro deploy real = o merge deste próprio item (tracer bullet); infra-solla STATE.md anotado à parte.