Forgejo e CI¶
O Forgejo é a forja Git da X-Adm: repositórios, issues, pull requests e CI (Forgejo Actions, sintaxe compatível com GitHub Actions).
Fluxo de trabalho¶
master(oumain): código estável e implantável.- Branches de trabalho:
feature/nome-curto,fix/issue-123. - Mudança nasce numa issue → branch → commits → pull request → revisão → merge. Doc da mudança vai no mesmo PR (ver constituição).
Quem não usa Git edita arquivos Markdown direto pela interface web do Forgejo (botão de editar no arquivo → commit na branch ou PR automático).
Deploy automático via webhook¶
Deploy é responsabilidade do Coolify, não do Forgejo Actions. Cada push na branch configurada rebuilda e redeploya o app no Coolify, por webhook de repo:
- No Coolify: copiar a URL de webhook do recurso.
- No Forgejo:
Settingsdo repo →Webhooks→Add Webhook→ colar a URL, content typeapplication/json, evento Push.
O Forgejo Actions cuida de build/publicação de docs (no Garage) e dos
gates (qualidade, release) — nunca do deploy. (O site de docs já
disparou o deploy por um passo curl no Actions; foi removido — duplicava o
webhook de repo e quebrava sem a secret.)
Secrets no CI¶
- Nunca commitar tokens, senhas de banco ou chaves — usar
Settings → Actions → Secretsdo repositório. - Secrets da plataforma vivem na organização
xadm(todo repo da org herda, nada a criar por repo):DOCS_S3_*(publicação de docs). O aviso de falha não usa secret — é webhook nativo da org (abaixo). - Testcontainers no CI — o runner injeta
DOCKER_HOST(topologia dind isolado). Oact_runnerda org roda um dind privilegiado e cria os jobs aninhados nele → montar o/var/run/docker.sockdo host não funciona (o runner ignora: "not a valid volume"), o Testcontainers não acha Docker e todo@Testcontainersfalha no CI (passando local) — o gate §6 "No CI (código)" fica vermelho crônico. Correção 2026-07-04 (odocker.sock/valid_volumesque documentei antes não vale nessa topologia): fix org-wide, mantendo o isolamento — injetar noconfig.yamldoact_runner(não no template) o env dos jobs:DOCKER_HOST=tcp://172.17.0.1:2375(o gateway do dind — o nomedindda rede externa não resolve dentro do dind),TESTCONTAINERS_HOST_OVERRIDE=172.17.0.1,TESTCONTAINERS_RYUK_DISABLED=true. Assim otemplates/ci.ymlfica agnóstico (semdocker.sock, sem IP de topologia). Descoberto por probe (docker exec dind-* docker run --rm alpine wget http://172.17.0.1:2375/version). - Publicar Release no Forgejo (app que distribui artefato — release.yml opt-in):
criar a Release via API precisa de escrita no repositório, e o
GITHUB_TOKENautomático do Actions costuma ser só Actions (dá 403). Caminhos: (1) declararpermissions:\n contents: writeno job (eleva o auto-token, se o instance permitir); (2) se restringir mesmo assim, criar um token dedicado — Forgejo →Settings → Applications → Generate New Token, escopowrite:repository— e cadastrá-lo como secret da orgRELEASE_TOKEN(orelease.ymlusaRELEASE_TOKENse existir, senão oGITHUB_TOKEN). Detalhe em versionamento.
Aviso de falha no Telegram¶
Quando um Action falha, chega uma mensagem num chat do Telegram (repo, workflow, ref e link da run). Sem aviso, workflow quebrado fica dias sem ninguém ver. Isso é um webhook nativo da organização (Forgejo ≥ 12; instância em 15) — nada no YAML dos workflows, config única na org.
Configuração (uma vez, na organização)¶
- Criar o bot: no Telegram, falar com
@BotFather→/newbot→ guardar o token (123456:ABC-...). - Descobrir o chat: criar o grupo/canal que receberá os avisos, adicionar
o bot, mandar uma mensagem qualquer e abrir
https://api.telegram.org/bot<TOKEN>/getUpdates— ochat.idaparece no JSON (grupo costuma ser negativo, ex.-100123456789). - Criar o webhook na org
xadm: Settings → Webhooks → Add Webhook → Telegram; preencher Bot Token e Chat ID; em Trigger On → Custom Events marcar Action Failure (e Recover, se quiser o aviso de recuperação); Active ligado. Webhook de organização cobre todos os repos — nada por app.
O Forgejo monta a mensagem e a URL da run sozinho. Testado no 15 com falha
real (Action Failed in xadm/<repo> <branch>).
Token e chat ficam na config do webhook, não como secrets de Actions. Os antigos
TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_IDda org ficaram órfãos com a migração ao webhook nativo (jun/2026) — podem ser removidos.
Checklist de PR¶
- [ ] Testes passam (
./gradlew test,flutter test, conforme a stack) - [ ] Mudou contrato/fluxo público → doc atualizada no mesmo PR
- [ ] Frontmatter válido nos
.mdnovos/alterados - [ ] Artefatos gerados (HTML de doc, relatórios) não commitados