Volver a la wiki

Feature: Herramienta de frescura de dependencias (s93)

Descripción general

Sesión 93: herramienta interna que da visibilidad única sobre el estado de frescura de las dependencias de terceros en dos repositorios (CreaRack-Pro + CreaRackSL-Workspace).

Muestra, de un vistazo, qué librerías se han quedado viejas sin necesidad de Dependabot ni Renovate:

Ordena por mayor desfase primero.

Motivación

No había detección automatizada de dependencias desactualizadas. Con ~112 deps (22 major desactualizadas al día de entrega), el riesgo de quedar peligrosamente atrás era alto.

Alcance en s93

CreaRack-Pro (este repo)

Workspace (repo separado, PR propio)

Manifiestos cubiertos

RepoRutaEcosistema
CreaRack-Prorequirements.txtPyPI
CreaRack-Profrontend/package.jsonnpm
CreaRack-Proterminal/agent/requirements-agent.lockPyPI (lockfile 100% ==)
CreaRack-Protests/requirements.txtPyPI (is_dev=1, desde 11-07-2026)
CreaRack-Protests/parity_validation/requirements.txtPyPI (is_dev=1, desde 11-07-2026)
Workspacepackage.jsonnpm

Desde el 28-08-2026 las filas se deduplican por (repo, ecosistema, paquete): un paquete que aparece en varios de estos manifiestos sale una sola vez, con la horquilla más restrictiva, y la fila lista el resto en el campo manifests.

Flujo de datos

┌─ CreaRack-Pro/main
│  ├─ requirements.txt ─┐
│  ├─ frontend/package.json ├─> scripts/deps_freshness.py
│  ├─ terminal/agent/requirements-agent.lock ─┤ (+ deps_specs.py, deps_sources.py)
│  ├─ tests/**/requirements.txt ──────────────┤ • latest + versiones via PyPI/npm
│  └─ Workspace/package.json ─────────────────┘ • resuelve cada horquilla
│                                                • "instalada": PROD → CI → lock
│  Fuentes de "instalada", por orden:
│   1. PROD   GET crearack.com/api/installed-packages  (Bearer INTERNAL_TOOLS_TOKEN)
│   2. runner pip list / pnpm list del job de CI       (respaldo)
│   3. lock   package-lock.json · requirements-agent.lock
│
│  .github/workflows/deps-freshness.yml
│  └─> POST /api/tools/deps (Workspace) ──────────────────┐
│                                                            │
└──────────────────────────────────────────────────────────┤
                                                            │
                                          Workspace/D1 table
                                          deps_freshness
                                               │
                                               v
                                        /tools/deps (UI)
                                        ┌────────────────────────────┐
                                        │ PKG | PEDIDA | EN USO | LAG│
                                        │ django | ==6.0.8 | prod |  │
                                        │ ...                        │
                                        └────────────────────────────┘

Desde el 28-08-2026 (task #275) la columna «en uso» sale por defecto del contenedor de producción, no de lo que resuelve el runner: el colector consulta GET /api/installed-packages (endpoint interno de Django, Bearer INTERNAL_TOOLS_TOKEN, mismo patrón que /openapi-export) y guarda en installed_source de dónde vino cada valor (prod / runner / lockfile). Falla suave: si PROD no contesta, la pasada sigue con el respaldo del runner. El paso «Probe PROD installed packages» del workflow (continue-on-error) deja el código HTTP en el log.

Datos de entrada / verificación en local

Dry-run real (28-05-2026):

112 dependencias · major=22 · minor=25 · patch=17 · unknown=0 · uptodate=48

Cronograma

Reglas aplicadas

Fase 2

Complementaridad con otras herramientas

Véase también

Subir