Resumen
El 08-08-2026 se activó F1 del plan de migración Forgejo: los automatismos de CI/CD y mantenimiento corren en paralelo en GitHub y Forgejo durante 14 días. GitHub sigue siendo la fuente de verdad; Forgejo compara y aprende.
Hito entregado:
- ✅ Runner Forgejo Actions (
forgejo-runnerv12.13.2, concurrencia 1) en OPS - ✅ Sincronización de espejos de Pro y workspace acelerada a 1 h
- ✅ Workflows portados al
.forgejo/de cada repo (4 flujos sin efectos: CI Pro/workspace, Security Scan, pip-audit) - ✅ Comparador centralizado (
f1-comparador, repoautomatizaciones) - ✅ Espejo de Releases (nuevo, copiador de releases+artefactos desde GitHub a Forgejo)
- ✅ Backup diario de Forgejo con restore probado el mismo día (Capa 3 operativa)
Estructura de Forgejo Actions (§4d de AUTOMATISMOS.md)
| Componente | Localización | Frecuencia | Propósito |
|---|---|---|---|
| Runner | OPS, servicio systemd forgejo-runner v12.13.2 | Continuo | Ejecuta workflows de Forgejo Actions, concurrencia 1 (sin sobrecargar el host) |
Comparador (f1-comparador) | Repo automatizaciones de Forgejo | Cada 6 h | Empareja corridas GitHub↔Forgejo por SHA, mantiene f1/LEDGER.jsonl (append-only) + f1/RESUMEN.md (métrica: % coincidencia = dato de apuesta #8) |
Espejo de Releases (infra-espejo-releases) | Repo automatizaciones de Forgejo | Diario 06:30 Madrid | Copia Releases + artefactos desde GitHub (Forgejo nativo solo trae git, no releases); en Forgejo nunca borra |
| Workflows portados (4 flujos) | .forgejo/workflows/ de Pro, workspace, automatizaciones | Según triggers (pull_request→push, schedule) | CI de Pro, CI del workspace, Security Scan, Agent pip-audit; GitHub ignora la carpeta .forgejo/, Forgejo ignora .github/workflows/ → sin dobles |
Configuración de coexistencia (sin dobles ejecuciones)
Los workflows viven en .forgejo/workflows/ commiteados en GitHub. Al llegar a Forgejo por el espejo:
- GitHub ignora silenciosamente la carpeta
.forgejo/(no es estándar) - Forgejo ignora silenciosamente
.github/workflows/si.forgejo/existe - Cada plataforma ejecuta su copia, sin conflictos
Triggers reconfigurados para Forgejo:
pull_request→pusha ramas ≠ main (Forgejo no tiene PRs; el SHA coincide con el espejo para emparejabilidad)schedule→ mantiene hora UTC (comparable entre plataformas por fecha)
Capa 3 Operativa: Backup de Forgejo (08-08-2026)
Decisión explícita de Edu: el backup de Forgejo es una excepción deliberada a la centralización en Forgejo Actions — no puede depender de que Forgejo esté vivo.
Cadena de copia:
OPS (cron 05:15 UTC)
↓ forgejo dump (repos + BD + config + adjuntos, ~126 MB)
↓ 7 días en local (/opt/forgejo-backup/dumps/)
↓
STAGE (/opt/dr-backups/forgejo/, llave rrsync solo-escritura, 14 días)
↓
Google Drive (/CreaRackSL/backups/workspace/forgejo/, 60 días, gdrive-sync semanal)
Vigilancia: cron-heartbeat en OPS monitorea la entrada forgejo-backup con ventana de 26 h.
Restore probado: 08-08-2026, mismo día del deploy. Verificaciones: fsck del repo nativo + BD integrity: ok + instalador del Agente byte a byte.
Criterio de éxito de F1
14 días seguidos de coincidencia en todas las corridas (GitHub manda; Forgejo compara). Cualquier discrepancia en el RESUMEN.md detiene el avance (investigación antes de F2).
Incógnita resuelta: ¿el espejo dispara workflows de push?
SÍ. Probado con commit real: el espejo sincroniza el SHA y Forgejo Actions lanza las corridas push sobre ese commit. Por eso se aceleró la sincronización a 1 h (antes 8 h).
Segunda tanda (pendiente dentro de F1)
Flujos CON efectos secundarios (ingest, wiki-*, deps-freshness, atlas-check, d1-cleanup…):
- Decisión pendiente: portarlos en modo sombra (escritura desactivada) o dejarlos fuera de la métrica hasta F2.
Véase también
- [[concept—infra—ops-server]]
- [[concept—infra—staging-server]]
- [[entity—public—forgejo-backup-cron]]
- [[entity—public—forgejo-espejo-releases]]
- [[decision—20260808—forgejo-backup-cron-excepcion-centralizacion]]