From 38c04ca62f9a91741c477b05a22b0ccaef778948 Mon Sep 17 00:00:00 2001 From: Fernando Rivas Date: Thu, 27 Aug 2026 01:50:57 -0600 Subject: [PATCH] fix(ci): runme-ci.sh vuelve a fallar con nombres exactos; usar --dry-run MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- RUNBOOK.md | 27 ++++++++++++++++----------- scripts/runme-ci.sh | 29 ++++++++++++++++++----------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/RUNBOOK.md b/RUNBOOK.md index 79479ef..ca37911 100644 --- a/RUNBOOK.md +++ b/RUNBOOK.md @@ -59,21 +59,26 @@ ninguna llave privada real. ## Ejecutar -`make runme-ci` corre `scripts/runme-ci.sh`, que invoca cada celda `ci-safe` -por su nombre exacto, una por una, deteniéndose en el primer fallo: +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 ` (nunca ejecuta +nada por sí solo) y lo corre con `bash`, deteniéndose en el primer fallo: ```text -runme run --filename RUNBOOK.md --skip-prompts clusterlog-runme-preflight -runme run --filename RUNBOOK.md --skip-prompts clusterlog-sync-check -runme run --filename RUNBOOK.md --skip-prompts clusterlog-validate-local -runme run --filename RUNBOOK.md --skip-prompts clusterlog-verify-head +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 ``` -No usa `runme run --tag ci-safe --all`: esa forma sí funciona en una -terminal normal, pero en el runner real de esta instancia aborta al entrar a -su UI interactiva de progreso multi-tarea (no se pudo reproducir en local -para diagnosticarlo más a fondo — ver `scripts/runme-ci.sh`). Invocar cada -celda por nombre evita esa ruta de código. +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` diff --git a/scripts/runme-ci.sh b/scripts/runme-ci.sh index bd3963b..38e0804 100755 --- a/scripts/runme-ci.sh +++ b/scripts/runme-ci.sh @@ -1,15 +1,21 @@ #!/usr/bin/env bash -# Corre cada celda ci-safe de RUNBOOK.md por nombre exacto, una por una. +# Corre cada celda ci-safe de RUNBOOK.md, una por una, extrayendo su script +# real con "runme run --dry-run " y ejecutándolo con bash — sin usar +# el motor de ejecución de Runme. # -# No usa "runme run --tag ci-safe --all": esa forma sí funciona en una -# terminal normal (verificado), pero en el runner real de Gitea Actions -# de esta instancia aborta de inmediato ("could not execute command: -# aborted") apenas entra a su UI interactiva de progreso multi-tarea -# ("Initializing...'/"Parsing files..."), sin producir log útil pese a -# --log/--log-file. No se pudo reproducir el crash localmente para -# diagnosticarlo más a fondo. Invocar cada celda por nombre, sin --all, -# usa una ruta de código distinta (confirmado con --dry-run: no dispara -# esa UI) y evita el problema. +# Se intentó "runme run --tag ci-safe --all --skip-prompts" y también +# invocar cada celda por nombre sin --all: ambas formas 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 (interactiva, con stdin/stdout +# redirigidos, con CI=true/TERM=dumb). "--dry-run" sí funciona en ambos +# lados: no dispara esa ruta de código porque nunca ejecuta nada él mismo, +# sólo imprime el script resuelto de la celda. +# +# Esto sacrifica que sea Runme quien de verdad ejecute el comando en CI, +# pero preserva lo esencial: el Markdown con atributos de celda sigue +# siendo la única fuente de verdad de qué corre, y localmente (fuera de +# este runner) "runme run " sigue funcionando de forma normal. # # La lista debe coincidir con las celdas "ci-safe" de RUNBOOK.md. set -euo pipefail @@ -26,5 +32,6 @@ CI_SAFE_CELLS=( for cell in "${CI_SAFE_CELLS[@]}"; do echo "== $cell ==" - runme run --filename RUNBOOK.md --skip-prompts "$cell" + # --dry-run escribe el script resuelto a stderr, no a stdout. + runme run --filename RUNBOOK.md --dry-run "$cell" 2>&1 >/dev/null | bash done