# Manual de Infraestructura, Despliegue y DevOps — Radar GovTech

Este documento describe la topología de infraestructura, la estrategia de distribución en el Edge, los dominios en producción y el pipeline de integración continua de **Radar** ([licitacion.co](https://licitacion.co)).

---

## 1. Topología de Infraestructura Edge & Serverless

Radar opera bajo un modelo de arquitectura **Serverless y Edge-First**, alojado en la red global de Cloudflare. Esto garantiza tiempos de respuesta mínimos en Colombia y el resto del mundo, alta disponibilidad y cero mantenimiento de servidores tradicionales.

```mermaid
flowchart LR
    Usuario["Usuario / Navegador"] --> DNS["DNS Anycast & Cloudflare Edge"]
    DNS --> Dominio["licitacion.co"]
    
    subgraph Cloudflare["Red Global Cloudflare Edge CDN"]
        Dominio --> Worker["Edge Worker / Pages"]
        Worker --> Cache["Edge Cache (Brotli / HTTP/3)"]
    end
    
    Cache --> Entrega["index.html (Client-Side SPA)"]
    Entrega --> Navegador["Navegador del Usuario"]
    
    Navegador -- "Consultas Directas HTTPS" --> Socrata["Portal Datos Abiertos Colombia (Socrata)"]
```

### Características de la Infraestructura
* **Cero Servidores Backend:** La lógica de la aplicación se ejecuta íntegramente en el navegador del cliente; los servidores perimetrales de Cloudflare únicamente sirven los activos estáticos y optimizan la entrega.
* **Latencia Mínima:** Rutas optimizadas con Cloudflare Anycast entregando el contenido desde los puntos de presencia (PoP) más cercanos en Bogotá y la región andina (< 30ms).
* **Compresión y Protocolos Modernos:** Soporte nativo para HTTP/3, TLS 1.3 y compresión Brotli activada automáticamente.

---

## 2. Dominios y Puntos de Acceso en Producción

| Entorno | URL / Dominio | Proveedor / Servicio | Estado |
| :--- | :--- | :--- | :--- |
| **Producción Principal** | [https://licitacion.co](https://licitacion.co) | Dominio Canónico Cloudflare | Activo |
| **Producción Alternativo** | [https://www.licitacion.co](https://www.licitacion.co) | Redirección 301 a canónico | Activo |
| **Edge Worker Primario** | [https://radar.licitar.workers.dev](https://radar.licitar.workers.dev) | Cloudflare Worker | Activo |
| **Edge Worker Secundario** | [https://radari.licitar.workers.dev](https://radari.licitar.workers.dev) | Cloudflare Worker (Fallback) | Activo |

---

## 3. Portabilidad Estática y Cero Bloqueo de Proveedor (Vendor Lock-in)

Al ser una aplicación de **archivo único (`index.html`)** sin paso de compilación (*build-less*), el proyecto ofrece portabilidad total e inmediata en cualquier servicio de hosting estático:

### A. Cloudflare Pages / Workers
* Se sincroniza automáticamente con la rama `main` del repositorio Git.
* No requiere comando de construcción (`Build command: none`) ni directorio de salida especial (`Output directory: .`).

### B. Vercel / Netlify
* Solo requiere conectar el repositorio GitHub o arrastrar la carpeta del proyecto.
* Se despliega en menos de 10 segundos con certificados SSL/TLS automáticos.

### C. GitHub Pages
* Puede activarse directamente desde la configuración del repositorio en la rama `main` apuntando a la raíz (`/`).

### D. Servidor Local de Desarrollo
Para pruebas locales en cualquier máquina:
```bash
python -m http.server 8000
```
Luego ingresar a `http://localhost:8000`.

---

## 4. Pipeline de Integración Continua (CI/CD)

El proyecto cuenta con un flujo automatizado en GitHub Actions definido en [`.github/workflows/ci.yml`](file:///c:/Users/Darg/Documents/Volrisk/Herramientas/Radar/.github/workflows/ci.yml):

```yaml
name: Radar CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    name: Pruebas automatizadas (394 tests)
    runs-on: ubuntu-latest

    steps:
      - name: Descargar codigo fuente
        uses: actions/checkout@v4

      - name: Configurar Python 3.11
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: Instalar Google Chrome / Chromium
        run: |
          sudo apt-get update
          sudo apt-get install -y google-chrome-stable

      - name: Ejecutar suite de pruebas (test_runner.py)
        run: python test_runner.py
```

### Puntos Clave del Pipeline
1. **Cero Instalación de Paquetes (`pip`):** No consume tiempo descargando librerías de Python; todo se ejecuta con la librería estándar.
2. **Ambiente Real en Ubuntu:** Levanta Google Chrome en modo headless dentro del contenedor Linux y corre las 394 pruebas verificando compatibilidad de renderizado y JavaScript.
3. **Tiempo de Ejecución en Nube:** El flujo completo (desde la inicialización del contenedor hasta la finalización de los 394 tests) toma menos de **30 segundos**.

---

## 5. Control de Versiones y Gancho Local de Git

Para evitar el envío inadvertido de código con fallas a la nube, el repositorio cuenta con un gancho local configurado:

* **Ruta del Gancho:** [`.githooks/pre-push`](file:///c:/Users/Darg/Documents/Volrisk/Herramientas/Radar/.githooks/pre-push)
* **Activación para nuevos colaboradores:**
  ```bash
  git config core.hooksPath .githooks
  ```
* **Comportamiento:** Cada intento de `git push` ejecuta automáticamente `python test_runner.py`. Si alguna de las 394 pruebas falla, el envío se detiene localmente.

### Convención de Commits y Regla Tipográfica
Los mensajes de commit siguen la convención estándar *Conventional Commits*:
* `feat:` Nuevas funcionalidades de usuario.
* `fix:` Corrección de defectos.
* `ci:` Ajustes de integración continua y pipelines.
* `docs:` Creación y actualización de manuales.
* `test:` Adición de casos a la suite de pruebas.

> [!IMPORTANT]
> Todos los mensajes de commit y ramas deben respetar estrictamente la regla tipográfica: cero mayúsculas sostenidas para palabras o siglas de 4 o más letras (`Secop`, `GitHub`, `Actions`, `Ubuntu`, etc.).

---

## 6. Telemetría y Monitoreo de Salud

* **Telemetría Client-Side:** Mediante las funciones [`trackRadarEvent`](file:///c:/Users/Darg/Documents/Volrisk/Herramientas/Radar/index.html#L8228) y [`fetchCloudflareTelemetry`](file:///c:/Users/Darg/Documents/Volrisk/Herramientas/Radar/index.html#L3776), el sistema registra eventos anónimos de búsqueda y monitorea los tiempos de respuesta de la red Socrata.
* **Diagnóstico en Vivo de Endpoints Estatales:**
  ```bash
  python test_runner.py --live
  ```
  Permite auditar el estado operativo, códigos de respuesta HTTP y latencia de los datasets oficiales de Secop I (`f789-7hwg`) y Secop II (`p6dx-8zbt`) desde la consola.
