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)
| Concepto | Valor | Detalle |
|---|---|---|
| Plan GitHub | Pro · $4/mes | Cuenta CreaRackSL (User, no Organization). Compartido por Edu + Dani + Txell como collaborators (pool del owner, no per-usuario). |
| Minutos Actions incluidos | 3000 min/mes | Reset 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 Team | descartado | Team 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
| # | Workflow | Trigger | Frecuencia actual | Optims aplicadas | Respeta BIBLIOTECARIO_PAUSADO |
|---|---|---|---|---|---|
| 1 | ci.yml | push + PR | por evento | typecheck + prettier (≈55s · sin Backend/Docker, es workspace puro) | n/a |
| 2 | cf-pages-deploy.yml | push a main | por evento | concurrency cancel-in-progress: true (s60) → coalesce rachas del bot | n/a |
| 3 | post-merge-ingest.yml | push a main | por evento | filtro !startsWith(commit.message, 'wiki(') (s60) → no se dispara a sí mismo | n/a |
| 4 | wiki-curator.yml | cron | L+J 05:00 UTC (0 5 * * 1,4) | bajado de diario a 2x/semana (s60 d13) · ahorra ~70% del coste Curator | ✅ |
| 5 | wiki-lint.yml | cron | diario 04:30 UTC (30 4 * * *) | sin cambio | ✅ |
| 6 | wiki-lint-consolidation.yml | cron | domingos 03:00 UTC (0 3 * * 0) | sin cambio (1x/sem ya óptimo) | ✅ |
| 7 | wiki-drift-check.yml | cron + dispatch | diario 06:00 UTC (0 6 * * *) | dry_run=true max_pages=5 inicial s62; activación final ~28-05-2026 | ✅ |
| 8 | wiki-translate.yml | cron + dispatch | diario 06:00 UTC (0 6 * * *) | AbortController timeout 30s + retry 1 (s60 d22) · fuera del build crítico CF Pages | ✅ |
| 9 | wiki-catalog.yml | cron | L+M+V 06:30 UTC (30 6 * * 1,3,5) | bajado de diario a 3x/sem (s66 · -57%) | ✅ |
| 10 | wiki-utility.yml | cron | L+M+V 06:00 UTC (0 6 * * 1,3,5) | bajado de diario a 3x/sem (s66 · -57%) | ✅ |
| 11 | wiki-weekly-report.yml | cron | domingos 08:00 UTC (0 8 * * 0) | sin cambio (1x/sem ya óptimo) | ✅ |
| 12 | bib-reindex-ts.yml | push (*.ts/.tsx/.mjs) + cron | push event-driven + cron diario 00:15 UTC | concurrency cancel-in-progress: true · paths estrechos · cron 6h→12h (s50)→24h (s66) | ✅ |
| 13 | drift-cron.yml | cron | diario 04:15 UTC (15 4 * * *) | sin cambio (1x/día safety net razonable) | ✅ |
CreaRack-Pro CreaRackSL/CreaRack-Pro · 5 workflows
| # | Workflow | Trigger | Frecuencia actual | Optims aplicadas |
|---|---|---|---|---|
| 1 | ci.yml | push + PR | por evento | paths-ignore docs-only en push (s66) · 4 jobs paralelos en PR siempre |
| 2 | post-merge-ingest.yml | push a main | por evento | filtro wiki( igual que workspace |
| 3 | push-drift.yml | push (no docs) | por evento | paths-ignore docs-only/configs (s60 d12) |
| 4 | audit-docs-drift.yml | cron | 1er domingo de mes 08:00 UTC | sin cambio (mensual, ~3 min/mes) |
| 5 | agent-pip-audit.yml | push paths estrechos + cron | lunes 06:00 UTC | paths 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
cf-pages-deploy.ymlworkspace ·concurrency cancel-in-progress: true→ coalesce rachas de 3-6 commits del bot Bibliotecario · ~150 min/mes.post-merge-ingest.ymlworkspace · filtro!startsWith('wiki(')→ bot ya no se dispara a sí mismo · ~97 min/mes + tokens LLM Anthropic.push-drift.ymlCreaRack-Pro ·paths-ignoredocs/configs/CHANGELOG · ~150-200 min/mes (cron diario 04:15 sigue como safety net).wiki-curator.ymlworkspace · 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=trueseteada → 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.
| Cambio | Implementación | Ahorro estimado |
|---|---|---|
| Pausa uniforme | Los 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+V | 30 6 * * 1,3,5 | ~−57% de su consumo |
wiki-utility diario → L+M+V | 0 6 * * 1,3,5 | ~−57% |
bib-reindex-ts 12h → 24h | 15 0 * * * | ~−50% (push trigger ya cubre cambios .ts/.tsx/.mjs al instante) |
| CI CreaRack-Pro paths-ignore push | docs-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.ymlfiltrawiki((s60) → el bot no se dispara a sí mismo.cf-pages-deploy.ymlconconcurrency 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
- Identificar top consumer:
gh api repos/CreaRackSL/CreaRackSL-workspace/actions/runs --paginate \ | jq '.workflow_runs | group_by(.name) | map({name: .[0].name, count: length})' - Sospechar del multiplicador del bot:
Si >100/mes, el multiplicador silencioso está activo y las mitigaciones s60 deberían estar activas.git -C C:/dev/CreaRackSL-workspace log --since='1 month ago' --pretty='%s' | grep -E '^wiki\(' | wc -l - 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 - Pausa inmediata si rompe operativa:
gh variable set BIBLIOTECARIO_PAUSADO --body true --repo CreaRackSL/CreaRackSL-workspace - Investigar causa raíz (ver Ideas futuras abajo).
Ideas futuras (cuando vuelvas a plantearte mejorar)
Áreas con margen adicional sin tocar la calidad operativa:
| Idea | Ahorro estimado | Coste implementar | Riesgo |
|---|---|---|---|
Bajar wiki-lint diario → L+J | ~57% lint | 5 min yaml + memoria | Bajo (lint es safety net) |
bib-reindex-ts push trigger más estrecho | ~5-10 runs/mes | 10 min (excluir *.test.ts, *.spec.ts, *.d.ts) | Mínimo |
| CI CreaRack-Pro Backend job split | ~30% del backend | Refactor profundo (tests por dominio, parallelize internos) | Medio (refactor tests) |
| Drift-Cron mensual en lugar de diario | ~25 runs/mes | 5 min yaml | Bajo (es Escriba drift dry-run, no operativo) |
wiki-weekly-report bisemanal | ~2 runs/mes | 5 min yaml | Bajo (informe Bibliotecario, no usuario final) |
Cron audit-docs-drift trimestral | ~9 runs/año | 5 min yaml | Bajo (es manual mostly) |
| Self-hosted runner (Hetzner) | minutos ilimitados | Setup runner Hetzner + token + mantenimiento | Medio (otra infra que mantener) |
| GitHub Enterprise Cloud | 50000 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-tspush 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]]