Descripción general
Workflow de GitHub Actions (.github/workflows/deps-freshness.yml) que ejecuta el colector [[entity—ci—service—deps-freshness-collector]] de forma automatizada:
- Trigger semanal: lunes 06:30 UTC (cron)
- Trigger push: push a
mainque toque un manifiesto o alguno de los 3 módulos del colector - Trigger manual:
workflow_dispatch
Resuelve las versiones “instaladas” — con PROD real como primera fuente desde task #275 (28-08-2026) — ejecuta el colector y publica el snapshot en el endpoint POST /api/tools/deps del Workspace.
Configuración requerida
Secrets (obligatorios + opcionales)
| Secret | Obligatorio | Descripción |
|---|---|---|
MCP_TOKEN | ✓ | Bearer token del Workspace (para POST /api/tools/deps) |
INTERNAL_TOOLS_TOKEN | ✗ | Bearer de GET https://crearack.com/api/installed-packages ([[entity—api—endpoint—installed-packages]]) — mismo valor que el env var de Dokploy PROD. Da la columna “instalada” REAL del contenedor. Si falta, se usa lo que resuelve el runner |
CF_ACCESS_CLIENT_ID | ✗ | Service token Cloudflare Access (si la tool está protegida) |
CF_ACCESS_CLIENT_SECRET | ✗ | Secret Cloudflare Access |
WORKSPACE_REPO_TOKEN | ✗ | PAT read-only al repo CreaRackSL/CreaRackSL-workspace (para incluir deps del Workspace; sin él, solo CreaRack-Pro) |
Configuración: [Repo settings] → [Secrets and variables] → [Actions].
Steps del workflow
1-6. Checkout, setup Python/Node, resolve installed (sin cambios)
Checkout de CreaRack-Pro y del Workspace (opcional), setup Python 3.14.3 + Node 22, instala deps de sistema para Pillow, resuelve pip-list.json y pnpm-list.json (fuente “runner”).
7. Probe PROD installed packages (nuevo, task #275)
if [ -z "${INTERNAL_TOOLS_TOKEN:-}" ]; then
echo "Sin INTERNAL_TOOLS_TOKEN — 'instalada' saldra del runner (respaldo)"
else
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 20 -H "Authorization: Bearer $INTERNAL_TOOLS_TOKEN" "$PROD_PACKAGES_URL")
echo "GET $PROD_PACKAGES_URL -> HTTP $code (200 = 'instalada' vendra de PROD)"
fi
continue-on-error: true — solo deja constancia en el log de si PROD respondió; nunca rompe el run. PROD_PACKAGES_URL es https://crearack.com/api/installed-packages (env var del job).
8. Collect & publish
ARGS=(--workspace-root workspace-repo --base-url "https://workspace.crearack.com")
[ -f pip-list.json ] && ARGS+=(--backend-installed pip-list.json)
[ -f pnpm-list.json ] && ARGS+=(--workspace-installed pnpm-list.json)
if [ -n "${INTERNAL_TOOLS_TOKEN:-}" ]; then
ARGS+=(--prod-versions-url "$PROD_PACKAGES_URL" --prod-token "$INTERNAL_TOOLS_TOKEN")
fi
python scripts/deps_freshness.py "${ARGS[@]}" --token "$MCP_TOKEN" ...
Construye args dinámicamente: fuentes de “instalada” (PROD si hay token, runner si hay JSON), --token (obligatorio) y opcionalmente CF Access.
Triggers detallados
Cron semanal
schedule:
- cron: '30 6 * * 1' # Lunes 06:30 UTC
Push a manifiestos y a los 3 módulos del colector
on:
push:
branches: [main]
paths:
- 'requirements.txt'
- 'frontend/package.json'
- 'terminal/agent/requirements-agent.lock'
- 'tests/requirements.txt'
- 'tests/parity_validation/requirements.txt'
- 'scripts/deps_freshness.py'
- 'scripts/deps_specs.py'
- 'scripts/deps_sources.py'
- '.github/workflows/deps-freshness.yml'
Ampliado en task #275: antes solo escuchaba a deps_freshness.py; ahora también a deps_specs.py y deps_sources.py (el troceo de Regla 5 no debe dejar de disparar el workflow).
Manual
workflow_dispatch:
Concurrency
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
Environment variables
env:
PYTHON_VERSION: '3.14.3'
NODE_VERSION: '22'
PROD_PACKAGES_URL: 'https://crearack.com/api/installed-packages'
Timeout
timeout-minutes: 12
Ventajas vs Dependabot
- Sin webhooks external: todo dentro de GitHub.
- Multi-repo sin problema: configurable con
WORKSPACE_REPO_TOKEN. - “Instalada” real: desde task #275, prioriza PROD sobre lo que resuelve el runner.
- Fallido graceful: si PROD o el workspace no están disponibles, degrada sin romper el run.
Reglas aplicadas
- Regla 17 (cloud, no PC): ejecuta en Ubuntu latest de GitHub, nunca requiere PC personal.
Véase también
- [[entity—ci—service—deps-freshness-collector]]
- [[entity—api—endpoint—installed-packages]]
- [[feature—ci—herramienta-frescura-dependencias]]
- [[concept—infra—automation]]
- [[concept—saas—observability]]