Pipelines de despliegue

Orquestador

Cola de ejecución que consume el runner externo. Sólo entran aprobaciones autorizadas por vos.

runner sin token data: d1

En cola

QUE

1

esperando runner

Ejecutando

RUN

0

reclamados ahora

Exitosos

OK

1

deploys verificados

Fallidos

ERR

1

requieren revisión

Aprobadas listas para ejecutar

bandeja hitl →
  • Deploy PachaRooms · villa-norte

    deploy-orchestrator · villanorte.pacha.dev

    en cola
  • Deploy Turnkey 720 · seguros-johan

    deploy-orchestrator · johan.pacha.dev

Cola de ejecución

3 runs · orden FIFO

Run Acción Agente Estado Runner Creado Duración
b81d5c43

Deploy PachaRooms · villa-norte

deploy-orchestrator En cola —

25 oct 2026

hace 1 h

—
c92e6d54

Deploy PachaRooms · villa-norte

Build 312 falló: no se pudo resolver @pacha/ui.

deploy-orchestrator Fallido runner-gh-actions

23 oct 2026

hace 3 d

92.4s
da3f7e65

Deploy Turnkey 720 · seguros-johan

Release 1.4.0 publicada y verificada.

deploy-orchestrator Exitoso runner-gh-actions

22 oct 2026

hace 3 d

48.2s

Contrato del runner

polling · bearer token

El runner vive fuera de Cloudflare (GitHub Actions, VPS, tu máquina). Hace polling de la cola, ejecuta el job y reporta el resultado. Sin token válido no puede reclamar nada, y todo POST debe declarar Content-Type: application/json (guarda CSRF de Astro).

1 · reclamar trabajo

curl -sX POST $HUB/api/runs/claim \
  -H "Authorization: Bearer $PACHA_RUNNER_TOKEN" \
  -H "Content-Type: application/json" \
  -H "X-Runner-Id: gh-actions"
# 200 → { run: {...} }
# 204 → cola vacía

2 · reportar resultado

curl -sX POST $HUB/api/runs/$RUN_ID/complete \
  -H "Authorization: Bearer $PACHA_RUNNER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ok":true,"durationMs":48211}'
# 200 → run cerrado
# 409 → ya estaba cerrado

estado del secreto

PACHA_RUNNER_TOKEN · falta

Local: .dev.vars (copiá .dev.vars.example). Producción: variable de entorno del proyecto en Cloudflare Pages.

invariante

Un run sólo puede nacer de una aprobación approved. Rechazar cierra el paso: no hay forma de encolar trabajo sin tu click. El claim es atómico, así que dos runners nunca ejecutan el mismo job.