CreaRack-SL

Workflow GitHub Actions: deps-freshness

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:

  1. Trigger semanal: lunes 06:30 UTC (cron)
  2. Trigger push: push a main que toque un manifiesto o alguno de los 3 módulos del colector
  3. 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)

SecretObligatorioDescripció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]]