CreaRack-SL

GitHub Actions · presupuesto, consumo y workflows operativos

GitHub Actions · presupuesto y workflows

Estado operativo del consumo GitHub Actions de la cuenta CreaRackSL (User account, plan Pro). Inventario completo de los 18 workflows activos (workspace + CreaRack-Pro), optimizaciones acumuladas y procedimiento ante alertas de uso. Documento de referencia para decidir cambios futuros: si vuelves a plantearte mejorar el consumo, este es tu punto de partida.

Plan + spending limit (estado 2026-05-16)

ConceptoValorDetalle
Plan GitHubPro · $4/mesCuenta CreaRackSL (User, no Organization). Compartido por Edu + Dani + Txell como collaborators (pool del owner, no per-usuario).
Minutos Actions incluidos3000 min/mesReset el 1 de cada mes. Linux runners cuentan 1x. Windows = 2x, macOS = 10x (no usamos ninguno).
Spending limit Actions$20/mes (16-05-2026)Subido tras hit del cap en s65 (overage real $1.04). Cubre ~2500 min adicionales como colchón. Pago real solo si excede.
Pro vs TeamdescartadoTeam tiene el mismo cap 3000 min. Enterprise Cloud da 50000 min pero cuesta $21/user × 3 = $63/mes (sobreescalado).

Inventario de workflows (18 totales · audit s66 2026-05-16)

Workspace CreaRackSL/CreaRackSL-workspace · 13 workflows

#WorkflowTriggerFrecuencia actualOptims aplicadasRespeta BIBLIOTECARIO_PAUSADO
1ci.ymlpush + PRpor eventotypecheck + prettier (≈55s · sin Backend/Docker, es workspace puro)n/a
2cf-pages-deploy.ymlpush a mainpor eventoconcurrency cancel-in-progress: true (s60) → coalesce rachas del botn/a
3post-merge-ingest.ymlpush a mainpor eventofiltro !startsWith(commit.message, 'wiki(') (s60) → no se dispara a sí mismon/a
4wiki-curator.ymlcronL+J 05:00 UTC (0 5 * * 1,4)bajado de diario a 2x/semana (s60 d13) · ahorra ~70% del coste Curator✅
5wiki-lint.ymlcrondiario 04:30 UTC (30 4 * * *)sin cambio✅
6wiki-lint-consolidation.ymlcrondomingos 03:00 UTC (0 3 * * 0)sin cambio (1x/sem ya óptimo)✅
7wiki-drift-check.ymlcron + dispatchdiario 06:00 UTC (0 6 * * *)dry_run=true max_pages=5 inicial s62; activación final ~28-05-2026✅
8wiki-translate.ymlcron + dispatchdiario 06:00 UTC (0 6 * * *)AbortController timeout 30s + retry 1 (s60 d22) · fuera del build crítico CF Pages✅
9wiki-catalog.ymlcronL+M+V 06:30 UTC (30 6 * * 1,3,5)bajado de diario a 3x/sem (s66 · -57%)✅
10wiki-utility.ymlcronL+M+V 06:00 UTC (0 6 * * 1,3,5)bajado de diario a 3x/sem (s66 · -57%)✅
11wiki-weekly-report.ymlcrondomingos 08:00 UTC (0 8 * * 0)sin cambio (1x/sem ya óptimo)✅
12bib-reindex-ts.ymlpush (*.ts/.tsx/.mjs) + cronpush event-driven + cron diario 00:15 UTCconcurrency cancel-in-progress: true · paths estrechos · cron 6h→12h (s50)→24h (s66)✅
13drift-cron.ymlcrondiario 04:15 UTC (15 4 * * *)sin cambio (1x/día safety net razonable)✅

CreaRack-Pro CreaRackSL/CreaRack-Pro · 5 workflows

#WorkflowTriggerFrecuencia actualOptims aplicadas
1ci.ymlpush + PRpor eventopaths-ignore docs-only en push (s66) · 4 jobs paralelos en PR siempre
2post-merge-ingest.ymlpush a mainpor eventofiltro wiki( igual que workspace
3push-drift.ymlpush (no docs)por eventopaths-ignore docs-only/configs (s60 d12)
4audit-docs-drift.ymlcron1er domingo de mes 08:00 UTCsin cambio (mensual, ~3 min/mes)
5agent-pip-audit.ymlpush paths estrechos + cronlunes 06:00 UTCpaths estrechos (requirements-agent.lock, fetch_licenses.py)

Consumo histórico y optimizaciones acumuladas

Mayo 2026 (1-13) · pre-optims s60

  • Workspace: 784 runs / 872 min wall-clock.
  • CreaRack-Pro: 347 runs / 1055 min wall-clock (CI top consumer ~1000 min con 4 jobs paralelos).
  • Total billable estimado: 2763 min / 3000 (reportado por GitHub al 13-may).

Optimizaciones aplicadas s60 (13-05-2026) · ~400-450 min/mes ahorrados

  1. cf-pages-deploy.yml workspace · concurrency cancel-in-progress: true → coalesce rachas de 3-6 commits del bot Bibliotecario · ~150 min/mes.
  2. post-merge-ingest.yml workspace · filtro !startsWith('wiki(') → bot ya no se dispara a sí mismo · ~97 min/mes + tokens LLM Anthropic.
  3. push-drift.yml CreaRack-Pro · paths-ignore docs/configs/CHANGELOG · ~150-200 min/mes (cron diario 04:15 sigue como safety net).
  4. wiki-curator.yml workspace · cron diario → L+J · ahorra ~70% del coste Curator.

s65 (15-05-2026) · emergencia · cap hit pese a optims s60

Acumulación de actividad intensa (19 PRs en 4 días s61-s64 · cron wiki-drift-check nuevo s62) llevó al cap al 100% el 15-05-2026. Salvados por $5 spending limit ya activo (overage $1.04).

Acción temporal aplicada al cierre s65 (commit workspace 1b97de8):

  • Var BIBLIOTECARIO_PAUSADO=true seteada → cubrió 5 crons que sí respetaban la var.
  • 5 crons que NO la respetaban (bib-reindex-ts, drift-cron, wiki-catalog, wiki-utility, wiki-weekly-report) comentados de emergencia en yaml.

Optimizaciones normalizadas s66 (16-05-2026) · ~600-800 min/mes adicionales

Cierre del PRIMER TEMA arrastrado de s65. 2 PRs: workspace #43 + CreaRack-Pro #35.

CambioImplementaciónAhorro estimado
Pausa uniformeLos 5 crons sin if BIBLIOTECARIO_PAUSADO ahora la respetan (patrón canónico igual que los otros 5)Operativo: 1 click pausa toda la cadena del Bibliotecario
wiki-catalog diario → L+M+V30 6 * * 1,3,5~−57% de su consumo
wiki-utility diario → L+M+V0 6 * * 1,3,5~−57%
bib-reindex-ts 12h → 24h15 0 * * *~−50% (push trigger ya cubre cambios .ts/.tsx/.mjs al instante)
CI CreaRack-Pro paths-ignore pushdocs-only no dispara los 4 jobs · PR sigue con CI completo~−30% del consumo CI (~250-300 min/mes)
Spending limit$5 → $20/mes (acción manual Edu)Colchón ~2500 min overage

Ahorro acumulado total (s60 + s66): ~1000-1200 min/mes liberados del cap 3000.

Multiplicador silencioso del Bibliotecario (audit s60)

Cuando un push humano dispara Bibliotecario-Ingest, el bot puede crear N commits autónomos (wiki(create|update|catalog|archive-query|weekly-report|fix|archive):) que disparan otra vez CF Pages Deploy + Bibliotecario-Ingest.

Cada wiki creada = 2 runs adicionales mínimo. En mayo 1-13: 129 commits autónomos del bot → ~258 runs adicionales solo del multiplicador.

Mitigaciones activas:

  • post-merge-ingest.yml filtra wiki( (s60) → el bot no se dispara a sí mismo.
  • cf-pages-deploy.yml con concurrency cancel-in-progress: true (s60) → si hay rachas, solo se completa el último deploy.

Toggle de pausa global BIBLIOTECARIO_PAUSADO

Cómo usarlo:

# Pausar todos los crons del Bibliotecario (10 crons workspace)
gh variable set BIBLIOTECARIO_PAUSADO --body true --repo CreaRackSL/CreaRackSL-workspace

# Reactivar
gh variable delete BIBLIOTECARIO_PAUSADO --repo CreaRackSL/CreaRackSL-workspace

Patrón canónico (cubre los 10 crons del Bibliotecario desde s66):

jobs:
  <job>:
    if: ${{ vars.BIBLIOTECARIO_PAUSADO != 'true' }}

Cuando la var no existe, vars.BIBLIOTECARIO_PAUSADO != 'true' evalúa a true y el job corre (estado normal).

Cuándo pausar:

  • Hit del cap antes de fin de mes (como s65).
  • Sesiones intensivas con muchos PRs en pocos días (s61-s64 patrón).
  • Mantenimiento BD D1 o handlers MCP que no quieres re-disparar mientras tocas el código.

Procedimiento ante alerta de uso alto

  1. Identificar top consumer:
    gh api repos/CreaRackSL/CreaRackSL-workspace/actions/runs --paginate \
      | jq '.workflow_runs | group_by(.name) | map({name: .[0].name, count: length})'
  2. Sospechar del multiplicador del bot:
    git -C C:/dev/CreaRackSL-workspace log --since='1 month ago' --pretty='%s' | grep -E '^wiki\(' | wc -l
    Si >100/mes, el multiplicador silencioso está activo y las mitigaciones s60 deberían estar activas.
  3. Verificar optims activas:
    grep -r "concurrency" .github/workflows/cf-pages-deploy.yml
    grep -r "startsWith.*wiki" .github/workflows/post-merge-ingest.yml
    grep -r "paths-ignore" .github/workflows/push-drift.yml
    grep -r "paths-ignore" .github/workflows/ci.yml  # CreaRack-Pro
  4. Pausa inmediata si rompe operativa:
    gh variable set BIBLIOTECARIO_PAUSADO --body true --repo CreaRackSL/CreaRackSL-workspace
  5. Investigar causa raíz (ver Ideas futuras abajo).

Ideas futuras (cuando vuelvas a plantearte mejorar)

Áreas con margen adicional sin tocar la calidad operativa:

IdeaAhorro estimadoCoste implementarRiesgo
Bajar wiki-lint diario → L+J~57% lint5 min yaml + memoriaBajo (lint es safety net)
bib-reindex-ts push trigger más estrecho~5-10 runs/mes10 min (excluir *.test.ts, *.spec.ts, *.d.ts)Mínimo
CI CreaRack-Pro Backend job split~30% del backendRefactor profundo (tests por dominio, parallelize internos)Medio (refactor tests)
Drift-Cron mensual en lugar de diario~25 runs/mes5 min yamlBajo (es Escriba drift dry-run, no operativo)
wiki-weekly-report bisemanal~2 runs/mes5 min yamlBajo (informe Bibliotecario, no usuario final)
Cron audit-docs-drift trimestral~9 runs/año5 min yamlBajo (es manual mostly)
Self-hosted runner (Hetzner)minutos ilimitadosSetup runner Hetzner + token + mantenimientoMedio (otra infra que mantener)
GitHub Enterprise Cloud50000 min/mes$63/mes (3 users)Sobreescalado actualmente

Cuándo activar estas:

  • Si vuelves a alcanzar 80% del cap antes del día 25 del mes.
  • Si proyectas un mes con >25 PRs (sesiones arquitectónicas s61-s64 tipo).
  • Si Dani entra a fase intensa de desarrollo paralelo (más pushes).

Lo que NO se ha optimizado y por qué

  • CI CreaRack-Pro 4 jobs paralelos en PR: deliberado, son gates de seguridad antes del merge. Refactorizar para serializar daría min pero más lento por PR.
  • CF Pages Deploy: ya tiene concurrency cancel-in-progress. Más allá rompería deploys legítimos del usuario.
  • Bibliotecario-Ingest post-merge: necesita correr en cada push de código real. Filtro wiki( ya neutralizó el bucle del bot.
  • bib-reindex-ts push trigger: paths estrechos ya. Quitarlo rompería el flujo “push código TS → grafo fresco al instante”.

Véase también

  • [[ia-tech—automatismos—metodo—ci-workflows]]
  • [[ia-tech—automatismos—metodo—cf-pages-deploy]]
  • [[ia-tech—automatismos—metodo—bibliotecario-procesos]]
  • [[ia-tech—inventario-automatismos]]