# 🚀 CI/CD con Gitea Actions - Francia Ocupada

## 📋 Configuración Actual

### Runner Configurado
- **Nombre**: `runner-01-ci-vm`
- **Etiqueta**: `production-ready:host`
- **URL Gitea**: `http://gitea.local:3000`
- **Estado**: ✅ Corriendo sin problemas

### Workflow Creado
- **Ubicación**: `.gitea/workflows/deployment.yml`
- **Trigger**: Push a `main` o `master`, o ejecución manual
- **Acciones**: Build y deploy automático con Docker Compose

## 🔄 Flujo de Despliegue

El workflow ejecuta los siguientes pasos:

1. **🚀 Checkout del Código**: Descarga el código del repositorio
2. **⚙️ Configurar Node.js**: Instala Node.js 20 para las acciones
3. **🛑 Detener Contenedores Anteriores**: Para y elimina los contenedores existentes
4. **🧹 Limpiar Imágenes Antiguas**: Elimina imágenes Docker sin usar
5. **🔨 Construir Imágenes Docker**: Construye las imágenes con `docker-compose_prod.yml`
6. **📦 Desplegar Aplicación**: Levanta los contenedores en modo producción
7. **✅ Verificar Despliegue**: Comprueba que los contenedores están corriendo
8. **📋 Mostrar Logs Recientes**: Muestra logs para debugging

## 🧪 Cómo Hacer Pruebas de Despliegue

### Opción 1: Push a la rama principal (Automático)

```bash
# Hacer algún cambio en el código
echo "# Test CI/CD" >> README.md

# Commit y push
git add .
git commit -m "test: Prueba de CI/CD automático"
git push origin main  # o master, según tu rama principal
```

### Opción 2: Ejecución Manual desde Gitea

1. Ve a tu repositorio en Gitea: `http://gitea.local:3000/[tu-usuario]/resistencia`
2. Navega a la pestaña **Actions**
3. Selecciona el workflow **"CI/CD - Francia Ocupada (La Resistencia)"**
4. Haz clic en **"Run workflow"**
5. Selecciona la rama y confirma

### Opción 3: Forzar un push vacío (sin cambios)

```bash
# Esto dispara el workflow sin hacer cambios reales
git commit --allow-empty -m "test: Trigger CI/CD workflow"
git push origin main
```

## 📊 Monitorear el Despliegue

### Desde Gitea Web UI
1. Ve a **Actions** en tu repositorio
2. Verás el workflow ejecutándose en tiempo real
3. Haz clic en el workflow para ver los logs detallados de cada paso

### Desde el Servidor (SSH)
```bash
# Ver estado de los contenedores
docker compose -f docker-compose_prod.yml ps

# Ver logs en tiempo real
docker compose -f docker-compose_prod.yml logs -f

# Ver logs de un servicio específico
docker compose -f docker-compose_prod.yml logs -f client
docker compose -f docker-compose_prod.yml logs -f server
docker compose -f docker-compose_prod.yml logs -f db

# Ver imágenes Docker
docker images | grep resistencia
```

## 🔧 Solución de Problemas

### El workflow falla en el checkout
**Problema**: Error de autenticación con Gitea

**Solución**:
- Verifica que el token de registro del runner sea correcto
- Asegúrate de que el runner tenga acceso al repositorio

### El workflow falla en la construcción
**Problema**: Error al construir las imágenes Docker

**Solución**:
```bash
# En el servidor, construir manualmente para ver el error
cd /ruta/al/proyecto
docker compose -f docker-compose_prod.yml build --no-cache
```

### Los contenedores no inician
**Problema**: Los contenedores se detienen inmediatamente

**Solución**:
```bash
# Ver logs de error
docker compose -f docker-compose_prod.yml logs

# Verificar configuración
docker compose -f docker-compose_prod.yml config
```

### Puerto ya en uso
**Problema**: Los puertos 3000, 4000 o 5432 están ocupados

**Solución**:
```bash
# Ver qué está usando los puertos
sudo lsof -i :3000
sudo lsof -i :4000
sudo lsof -i :5432

# Detener contenedores anteriores
docker compose -f docker-compose_prod.yml down
```

## 🎯 Verificación Post-Despliegue

Después de un despliegue exitoso, verifica:

1. **Frontend accesible**: https://franciaocupada.martivich.es
2. **API accesible**: https://api.franciaocupada.martivich.es
3. **Contenedores corriendo**:
   ```bash
   docker compose -f docker-compose_prod.yml ps
   ```
   Deberías ver 3 contenedores: `client`, `server`, `db`

4. **Logs sin errores**:
   ```bash
   docker compose -f docker-compose_prod.yml logs --tail=100
   ```

## 📝 Notas Importantes

- **Rama principal**: El workflow se activa en push a `main` o `master`
- **Etiqueta del runner**: Debe ser `production-ready` (configurada en tu runner)
- **Docker Compose**: Usa `docker-compose_prod.yml` para producción
- **Variables de entorno**: Configuradas en `docker-compose_prod.yml`:
  - `NEXT_PUBLIC_API_URL=https://api.franciaocupada.martivich.es`
  - `CORS_ORIGIN=https://franciaocupada.martivich.es`

## 🔐 Seguridad

- El workflow usa el token de Gitea automáticamente (`${{ gitea.token }}`)
- No es necesario configurar secrets adicionales para este workflow básico
- Si necesitas secrets (API keys, passwords), agrégalos en:
  - Gitea → Repositorio → Settings → Secrets

## 🚀 Próximos Pasos Recomendados

1. **Pruebas automatizadas**: Agregar tests antes del deploy
2. **Notificaciones**: Configurar notificaciones de éxito/fallo
3. **Rollback automático**: Implementar rollback si el deploy falla
4. **Health checks**: Verificar que la app responde correctamente
5. **Backup de DB**: Hacer backup antes de cada deploy
