4.3 KiB
Runbook — CI/PR no GitHub, tracker no Forgejo, deploy manual (OPS1)
O código/PR/CI vive no GitHub (github.com/fsolla/iara-pwa, público); as
Issues/labels/claims continuam no Forgejo (git.solla.dev/amana/iara-pwa,
via API); o deploy é manual (workflow_dispatch no GitHub) com o runner
self-hosted no homeserver — nada de deploy automático em push e a
workstation não roda mais a suíte de CI.
Cutover (uma vez, nesta ordem — passos (a)–(c) ANTES do primeiro push)
-
(a) Remotes locais.
originpassa a ser o GitHub; o Forgejo fica como remote secundário congelado (o repo lá para de receber push; tracker intacto por API).git remote set-url origin git@github.com:fsolla/iara-pwa.git git remote add forgejo ssh://git@192.168.15.142:2222/amana/iara-pwa.git 2>/dev/null || trueO config de remotes é compartilhado entre os worktrees do repo (
.git/configúnico) — vale para todos. Sem este passo,bun run gate/diff comparariam contra umorigin/maindefasado (Forgejo). -
(b) Secrets e config do repo no GitHub.
- Secret
FORGEJO_API_TOKENno repo (PAT do Forgejo com escopo de repo — usado pelos flips pós-merge; nunca oGITHUB_TOKEN). - Repo setting Allow auto-merge habilitado (Settings → General →
Allow auto-merge) — sem isso o GraphQL
enablePullRequestAutoMergefalha e o job do safety net vai vermelho (visível). - Localmente:
GITHUB_TOKENPAT do usuário (escoporepo) parabun run prebun run configure:branch-protection.
- Secret
-
(c) Branch protection de
main(required checkchecks+enforce_admins: true):GITHUB_TOKEN=<PAT> bun run configure:branch-protection -- --dry-run GITHUB_TOKEN=<PAT> bun run configure:branch-protection -
(d) Desligar o runner do Forgejo (reversível) — logo após o primeiro PR GitHub validado: sem ele, nada mais dispara no repo congelado; o runner volta a disputar a workstation à toa.
-
(e) Homeserver: bun + runner self-hosted do GitHub.
- Instalar
bunno homeserver (oscripts/deploy-iara.shusabun installbun run buildlá — precisa existir no PATH do runner;BUNenv sobrepõe o default).
- Instalar o
actions-runnercom labelsself-hosted, homeserver. - Não ligar "Send workflows to a self-hosted runner" para fork PRs
(default OFF no GitHub): o repo é público e o
deployexecuta código na máquina de produção — se esse setting ligar algum dia, um fork PR pode virar RCE no homeserver. - Não bloqueia PRs: o deploy é manual e só existe depois do runner.
- Instalar
-
(f) Push → PR → CI → merge → flips. O PR do próprio OPS1 valida o fluxo ao vivo: CI
checksno GitHub → auto-merge → flip da Issue no Forgejo.
Deploy de produção
workflow_dispatchno GitHub (Deploy (manual)) — rodaverify(hosted, suíte full incl. e2e) e, só se verde,deployno homeserver (scripts/deploy-iara.sh <sha>: HEAD guard → flock → marker do SHA → build → rsync local para~/iara-pwa/dist/).- Dispatch do mesmo SHA de novo → no-op idempotente (marker).
Rollback
- CI/PR: os arquivos do fluxo Forgejo (
.forgejo/workflows/,scripts/forgejo-pr-automerge.mjs) permanecem dormentes no repo até a Fase 2 (remoção na entrega sucessora). Reverter a este PR restaura o fluxo GitHub anterior; reverter a Fase 2 restaura o fluxo Forgejo (religar o runner e apontaroriginde volta para o Forgejo). - Deploy: o site servido é um diretório estático (
~/iara-pwa/dist/); o marker~/iara-pwa/.deployed-sharegistra o SHA em produção — para reverter, re-dispatch do SHA anterior (ou rsync manual).
Falhas conhecidas
- Literal do required check: a proteção usa
checks(nome do check-run/ job), não o displayCI / checks— pinado no spec unit. Se o PR não mergear commergeable_state: blocked, re-verifique o literal comconfigure:branch-protection(drift reporta). - Flip com 404: se
FORGEJO_REPOSITORY/FORGEJO_API_URLsumirem de um workflow de flip, a lib resolveGITHUB_REPOSITORY(repo GitHub) → 404 no tracker. Os workflows novos setam ambos explicitamente; falha agora sai vermelha (fail-loud), nunca silenciosa.