El intento anterior (correr cada celda por nombre, sin --all) también
aborta en el runner real ("Parsing files..." → "could not execute
command: aborted") — el problema no era --all. --dry-run sí funciona en
ese runner (nunca ejecuta nada él mismo), pero escribe el script
resuelto a stderr, no a stdout: el primer intento de "| bash" no
ejecutaba nada porque el pipe sólo captura stdout, y lo que se veía en
pantalla era stderr yendo directo a la terminal. Corregido con "2>&1
>/dev/null | bash". Probado localmente de extremo a extremo: las 4
celdas ejecutan de verdad (incluye verify-head devolviendo valid:true
real, no sólo el texto del comando).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
88 lines
4.3 KiB
Markdown
88 lines
4.3 KiB
Markdown
# RUNBOOK
|
|
|
|
Punto de entrada de la documentación ejecutable de esta **instancia** de
|
|
`clusterlog` (MCPS). Cada celda envuelve un comando canónico existente
|
|
(`make`, `./bin/clusterlog`, un script en `scripts/`) — ninguna celda
|
|
contiene lógica propia. El desarrollo del motor mismo (compilar, probar,
|
|
`bootstrap-instance`) vive en
|
|
[fenandosr/clusterlog](https://github.com/fenandosr/clusterlog); ver
|
|
[`runbooks/README.md`](runbooks/README.md) para la convención completa de
|
|
nombres y etiquetas.
|
|
|
|
Este archivo funciona igual con o sin Runme instalado: cada bloque es un
|
|
comando de shell normal que también puede copiarse y ejecutarse a mano.
|
|
|
|
## Runbooks disponibles
|
|
|
|
- [`runbooks/weekly-review.md`](runbooks/weekly-review.md) — versión ejecutable de la reunión semanal ([`docs/WEEKLY_REVIEW.md`](docs/WEEKLY_REVIEW.md) conserva la agenda).
|
|
- [`runbooks/_template.md`](runbooks/_template.md) — plantilla para runbooks nuevos.
|
|
|
|
## Comprobaciones rápidas
|
|
|
|
```sh {"name":"clusterlog-runme-preflight","tag":"role-operator,env-local,risk-read-only,ci-safe","interactive":"false"}
|
|
set -euo pipefail
|
|
test -f zola.toml && test -f .clusterlog-version || { echo "ejecute esto desde la raíz de la instancia" >&2; exit 1; }
|
|
echo "clusterlog-version: $(cat .clusterlog-version)"
|
|
if command -v zola >/dev/null 2>&1; then echo "zola: $(zola --version)"; else echo "zola: no instalado (validate --skip-zola sigue funcionando)"; fi
|
|
if command -v runme >/dev/null 2>&1; then echo "runme: $(runme --version)"; else echo "runme: no instalado (make runme-install)"; fi
|
|
```
|
|
|
|
```sh {"name":"clusterlog-sync-check","tag":"role-operator,env-local,risk-read-only,ci-safe","interactive":"false"}
|
|
make sync-check
|
|
```
|
|
|
|
```sh {"name":"clusterlog-validate-local","tag":"role-operator,env-local,risk-read-only,ci-safe","interactive":"false"}
|
|
make validate-local
|
|
```
|
|
|
|
```sh {"name":"clusterlog-site-build","tag":"role-operator,env-local,risk-read-only","interactive":"false"}
|
|
make site
|
|
```
|
|
|
|
`clusterlog-site-build` no lleva `ci-safe`: descarga el tema y las plantillas
|
|
del motor por red (`make theme templates`). La CI (`.gitea/workflows/ci.yml`)
|
|
ya construye el sitio en su propio paso; repetirlo aquí sería una segunda
|
|
copia de la misma lógica, no una celda adicional útil.
|
|
|
|
```sh {"name":"clusterlog-review-mine","tag":"role-reviewer,env-local,risk-read-only","interactive":"false"}
|
|
: "${CLUSTERLOG_SSH_KEY:?defina CLUSTERLOG_SSH_KEY con la ruta a su llave pública}"
|
|
./bin/clusterlog --root . --json --ssh-key "$CLUSTERLOG_SSH_KEY" review list --mine
|
|
```
|
|
|
|
`clusterlog-review-mine` tampoco lleva `ci-safe`: `--mine` resuelve identidad
|
|
a partir de una llave SSH personal, y CI no tiene ni debe tener acceso a
|
|
ninguna llave privada real.
|
|
|
|
```sh {"name":"clusterlog-verify-head","tag":"role-reviewer,env-local,risk-read-only,ci-safe","interactive":"false"}
|
|
./bin/clusterlog --root . --json verify commit HEAD
|
|
```
|
|
|
|
## Ejecutar
|
|
|
|
Localmente, fuera de este runner, `runme run --filename RUNBOOK.md --tag
|
|
ci-safe --all --skip-prompts` funciona normalmente. En este repositorio,
|
|
`make runme-ci` en cambio corre `scripts/runme-ci.sh`, que para cada celda
|
|
`ci-safe` extrae su script con `runme run --dry-run <celda>` (nunca ejecuta
|
|
nada por sí solo) y lo corre con `bash`, deteniéndose en el primer fallo:
|
|
|
|
```text
|
|
runme run --filename RUNBOOK.md --dry-run clusterlog-runme-preflight | bash
|
|
runme run --filename RUNBOOK.md --dry-run clusterlog-sync-check | bash
|
|
runme run --filename RUNBOOK.md --dry-run clusterlog-validate-local | bash
|
|
runme run --filename RUNBOOK.md --dry-run clusterlog-verify-head | bash
|
|
```
|
|
|
|
Tanto `runme run --all` como invocar cada celda por nombre (sin `--all`)
|
|
abortan de inmediato en el runner real de esta instancia
|
|
("could not execute command: aborted", justo al entrar a "Parsing
|
|
files..."), algo que no se pudo reproducir en ninguna terminal local. Sólo
|
|
`--dry-run` evita esa ruta de código en ambos lados — ver `scripts/runme-ci.sh`
|
|
para el detalle completo, incluida la comprobación real
|
|
(`clusterlog-verify-head` corriendo y devolviendo `valid: true` de verdad).
|
|
|
|
Nunca ejecute `runme run --all --skip-prompts` sobre este archivo ni sobre
|
|
`runbooks/weekly-review.md`: sin filtrar por nombre o etiqueta, `--all`
|
|
también incluiría celdas que mutan estado real de esta instancia. Ésas
|
|
deben correrse una por una, a mano, después de revisar sus
|
|
prerrequisitos.
|