Some checks failed
Adiciona solucoes para problemas comuns: - Regeneracao de hooks quando workflows nao disparam - Correcao de erro de LevelDB lock - Reinicio do runner apos reinicio do Forgejo 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
296 lines
7.2 KiB
Markdown
296 lines
7.2 KiB
Markdown
# Forgejo CI/CD - Documentacao
|
|
|
|
Este documento descreve a configuracao do Forgejo como alternativa ao GitHub Actions para CI/CD self-hosted.
|
|
|
|
## Por que Forgejo?
|
|
|
|
A partir de marco de 2026, o GitHub passara a cobrar $0.002 por minuto de execucao em self-hosted runners. O Forgejo Actions oferece a mesma experiencia visual e funcionalidade sem custo adicional.
|
|
|
|
## Arquitetura
|
|
|
|
```
|
|
Claude Code / VS Code
|
|
|
|
|
Git local
|
|
|
|
|
git push origin main (GitHub - backup)
|
|
git push forgejo main (Forgejo - CI/CD)
|
|
|
|
|
Forgejo (git.esdrasrenan.com.br)
|
|
|
|
|
Forgejo Actions (dispara automaticamente)
|
|
|
|
|
Forgejo Runner (VPS)
|
|
|
|
|
Docker Swarm deploy
|
|
```
|
|
|
|
**Fluxo:** Push para ambos os remotes. O push para `forgejo` dispara o CI/CD.
|
|
|
|
```bash
|
|
# Push para ambos (recomendado)
|
|
git push origin main && git push forgejo main
|
|
|
|
# Ou use o alias configurado
|
|
git push-all
|
|
```
|
|
|
|
## URLs e Credenciais
|
|
|
|
| Servico | URL | Usuario |
|
|
|---------|-----|---------|
|
|
| Forgejo UI | https://git.esdrasrenan.com.br | esdras |
|
|
| Forgejo SSH | git@git.esdrasrenan.com.br:2222 | - |
|
|
| Actions | https://git.esdrasrenan.com.br/esdras/sistema-de-chamados/actions | - |
|
|
|
|
**Senha inicial:** `ForgejoAdmin2025!` (altere apos primeiro acesso)
|
|
|
|
## Estrutura de Arquivos
|
|
|
|
```
|
|
projeto/
|
|
├── .forgejo/
|
|
│ └── workflows/
|
|
│ ├── ci-cd-web-desktop.yml # Deploy principal (VPS + Convex)
|
|
│ └── quality-checks.yml # Lint, test, build
|
|
├── .github/
|
|
│ └── workflows/ # Workflows originais do GitHub
|
|
│ └── ...
|
|
└── forgejo/
|
|
├── stack.yml # Stack Docker do Forgejo
|
|
└── setup-runner.sh # Script de setup do runner
|
|
```
|
|
|
|
## Configuracao na VPS
|
|
|
|
### Forgejo Server
|
|
|
|
Rodando como servico Docker Swarm:
|
|
|
|
```bash
|
|
# Localização do stack
|
|
/srv/forgejo/stack.yml
|
|
|
|
# Comandos uteis
|
|
docker service ls --filter "name=forgejo"
|
|
docker service logs forgejo_forgejo --tail 100
|
|
docker stack deploy -c /srv/forgejo/stack.yml forgejo
|
|
```
|
|
|
|
### Forgejo Runner
|
|
|
|
Rodando como servico systemd:
|
|
|
|
```bash
|
|
# Localização
|
|
/srv/forgejo-runner/
|
|
|
|
# Arquivos
|
|
/srv/forgejo-runner/forgejo-runner # Binario
|
|
/srv/forgejo-runner/config.yaml # Configuracao
|
|
/srv/forgejo-runner/.runner # Registro
|
|
|
|
# Comandos uteis
|
|
systemctl status forgejo-runner
|
|
systemctl restart forgejo-runner
|
|
journalctl -u forgejo-runner -f
|
|
|
|
# Labels do runner
|
|
- ubuntu-latest:docker://node:20-bookworm
|
|
- self-hosted:host
|
|
- linux:host
|
|
- vps:host
|
|
```
|
|
|
|
## Fluxo de Trabalho
|
|
|
|
O repositorio no Forgejo recebe pushes diretos (nao e mais um mirror).
|
|
|
|
### Uso diario
|
|
|
|
```bash
|
|
# Trabalhe normalmente
|
|
git add .
|
|
git commit -m "sua mensagem"
|
|
|
|
# Push para GitHub (backup) e Forgejo (CI/CD)
|
|
git push origin main && git push forgejo main
|
|
|
|
# Acompanhe o CI/CD em:
|
|
# https://git.esdrasrenan.com.br/esdras/sistema-de-chamados/actions
|
|
```
|
|
|
|
### Configurar alias (opcional)
|
|
|
|
```bash
|
|
# Adicionar alias para push em ambos
|
|
git config alias.push-all '!git push origin main && git push forgejo main'
|
|
|
|
# Usar:
|
|
git push-all
|
|
```
|
|
|
|
## Workflows Disponiveis
|
|
|
|
### ci-cd-web-desktop.yml
|
|
|
|
Triggers:
|
|
- Push na branch `main`
|
|
- Tags `v*.*.*`
|
|
- workflow_dispatch (manual)
|
|
|
|
Jobs:
|
|
1. **changes** - Detecta arquivos alterados
|
|
2. **deploy** - Deploy na VPS (Next.js + Docker Swarm, usando Bun)
|
|
3. **convex_deploy** - Deploy das functions Convex
|
|
4. ~~**desktop_release**~~ - Build do app desktop (comentado - sem runner Windows)
|
|
|
|
### quality-checks.yml
|
|
|
|
Triggers:
|
|
- Push na branch `main`
|
|
- Pull requests para `main`
|
|
|
|
Jobs:
|
|
1. **lint-test-build** - Lint, testes e build
|
|
|
|
## Diferenca do GitHub Actions
|
|
|
|
Os workflows do Forgejo sao quase identicos aos do GitHub Actions. Principais diferencas:
|
|
|
|
1. **Localizacao:** `.forgejo/workflows/` em vez de `.github/workflows/`
|
|
|
|
2. **Actions URL:** Usar `https://github.com/` prefixo nas actions
|
|
```yaml
|
|
# GitHub Actions
|
|
uses: actions/checkout@v4
|
|
|
|
# Forgejo Actions
|
|
uses: https://github.com/actions/checkout@v4
|
|
```
|
|
|
|
3. **runs-on:** Usar labels do self-hosted runner em vez de `ubuntu-latest`
|
|
```yaml
|
|
# GitHub Actions (hosted runner)
|
|
runs-on: ubuntu-latest
|
|
|
|
# Forgejo Actions (self-hosted)
|
|
runs-on: [ self-hosted, linux, vps ]
|
|
```
|
|
|
|
4. **Secrets:** Configurar em Settings > Actions > Secrets no Forgejo
|
|
|
|
## Manutencao
|
|
|
|
### Atualizar Forgejo
|
|
|
|
```bash
|
|
ssh root@154.12.253.40
|
|
cd /srv/forgejo
|
|
# Editar stack.yml para nova versao da imagem
|
|
docker stack deploy -c stack.yml forgejo
|
|
```
|
|
|
|
### Atualizar Runner
|
|
|
|
```bash
|
|
ssh root@154.12.253.40
|
|
cd /srv/forgejo-runner
|
|
systemctl stop forgejo-runner
|
|
|
|
# Baixar nova versao
|
|
RUNNER_VERSION="6.2.2" # ajustar versao
|
|
curl -sL -o forgejo-runner "https://code.forgejo.org/forgejo/runner/releases/download/v${RUNNER_VERSION}/forgejo-runner-${RUNNER_VERSION}-linux-amd64"
|
|
chmod +x forgejo-runner
|
|
|
|
systemctl start forgejo-runner
|
|
```
|
|
|
|
### Re-registrar Runner
|
|
|
|
Se o runner perder a conexao:
|
|
|
|
```bash
|
|
ssh root@154.12.253.40
|
|
cd /srv/forgejo-runner
|
|
|
|
# Gerar novo token no Forgejo
|
|
docker exec -u 1000:1000 $(docker ps -q --filter "name=forgejo_forgejo") \
|
|
/usr/local/bin/gitea --config /data/gitea/conf/app.ini actions generate-runner-token
|
|
|
|
# Re-registrar
|
|
systemctl stop forgejo-runner
|
|
rm .runner
|
|
./forgejo-runner register \
|
|
--instance https://git.esdrasrenan.com.br \
|
|
--token "NOVO_TOKEN" \
|
|
--name "vps-runner" \
|
|
--labels "ubuntu-latest:docker://node:20-bookworm,self-hosted:host,linux:host,vps:host" \
|
|
--no-interactive
|
|
systemctl start forgejo-runner
|
|
```
|
|
|
|
### Backup
|
|
|
|
```bash
|
|
# Backup do volume do Forgejo
|
|
docker run --rm -v forgejo_forgejo_data:/data -v /backup:/backup alpine \
|
|
tar czf /backup/forgejo-backup-$(date +%Y%m%d).tar.gz /data
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Runner nao aparece online
|
|
|
|
```bash
|
|
# Verificar status
|
|
systemctl status forgejo-runner
|
|
journalctl -u forgejo-runner --no-pager -n 50
|
|
|
|
# Verificar conectividade
|
|
curl -s https://git.esdrasrenan.com.br/api/healthz
|
|
|
|
# Se o runner mostrar erro "404 Not Found" apos reinicio do Forgejo:
|
|
systemctl restart forgejo-runner
|
|
```
|
|
|
|
### Workflow nao dispara apos push
|
|
|
|
1. Verificar se o arquivo esta em `.forgejo/workflows/`
|
|
2. Verificar se Actions esta habilitado no repositorio (Settings > Actions)
|
|
3. Verificar se o runner esta online (Settings > Actions > Runners)
|
|
4. **Regenerar hooks do repositorio:**
|
|
```bash
|
|
docker exec -u 1000:1000 $(docker ps -q --filter "name=forgejo_forgejo") \
|
|
/usr/local/bin/gitea admin regenerate hooks --config /data/gitea/conf/app.ini
|
|
```
|
|
|
|
### Erro de LevelDB Lock (queue nao inicia)
|
|
|
|
Se o Forgejo mostrar erro `unable to lock level db at /data/gitea/queues/common`:
|
|
|
|
1. O stack.yml ja usa `FORGEJO__queue__TYPE=channel` para evitar esse problema
|
|
2. Se o erro persistir, limpe o diretorio de queues:
|
|
```bash
|
|
docker exec $(docker ps -q --filter "name=forgejo_forgejo") \
|
|
rm -rf /data/gitea/queues/*
|
|
docker service update --force forgejo_forgejo
|
|
```
|
|
|
|
### Erro de permissao no deploy
|
|
|
|
O runner precisa de acesso ao Docker:
|
|
|
|
```bash
|
|
# Verificar grupo docker
|
|
groups runner
|
|
# Adicionar se necessario
|
|
usermod -aG docker runner
|
|
systemctl restart forgejo-runner
|
|
```
|
|
|
|
## Referencias
|
|
|
|
- [Forgejo Documentation](https://forgejo.org/docs/)
|
|
- [Forgejo Actions](https://forgejo.org/docs/latest/user/actions/)
|
|
- [Forgejo Runner](https://code.forgejo.org/forgejo/runner)
|