From f1d69f4f99e0bf82459facb9bd6137f2cefd2f5e Mon Sep 17 00:00:00 2001 From: Sergio Date: Tue, 8 Sep 2026 18:52:51 +0000 Subject: [PATCH] granja: la siembra de la flota fallaba justo en el caso que existe para arreglar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Con '.fleet' ausente —el hub recién clonado, o sea el único caso que importa— el 'cat' de un fichero inexistente devuelve 1, y como el script corre con 'set -o pipefail' la tubería hereda ese estado y el '&& mv' no dispara: el fichero se generaba correctamente y se quedaba sin mover. Se añaden los '|| true' que faltaban. ⚠ Y por qué mi prueba no lo vio, que es lo que vale anotar: extraje el bloque real del script para probarlo, pero le puse 'set -u' en vez del 'set -uo pipefail' que el script trae. Copié el código y no el ENTORNO en que corre, y sin pipefail el caso pasaba. El extractor ahora lee la línea 'set -' del propio script en vez de que yo la escriba de memoria. Verificado con un ciclo REAL tras borrar .fleet a mano: ── cosecha-cron arranca ==> dev.gioser.net (154.197.1.13) siembra ✓ manifiesto ✓ (worker: 764 · total: 4743) .fleet quedó: dev.gioser.net 154.197.1.13 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2 --- scripts/farm/cosecha-cron.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/farm/cosecha-cron.sh b/scripts/farm/cosecha-cron.sh index 5c63489b..04cb61cb 100755 --- a/scripts/farm/cosecha-cron.sh +++ b/scripts/farm/cosecha-cron.sh @@ -71,7 +71,11 @@ FLEET="$ROOT/scripts/farm/.fleet" # falla. Se unen por NOMBRE (el fijo gana) para que lo efímero de hcloud conviva sin duplicarse. FLEET_FIJA="$ROOT/scripts/farm/flota-permanente" if [ -s "$FLEET_FIJA" ]; then - { grep -vE '^[[:space:]]*(#|$)' "$FLEET_FIJA"; cat "$FLEET" 2>/dev/null; } \ + # Los `|| true` NO son adorno: este script corre con `set -o pipefail`, y un `.fleet` ausente + # —que es EXACTAMENTE el caso que esta siembra existe para arreglar— hace fallar al `cat`, la + # tubería hereda ese estado y el `&& mv` no dispara. Resultado medido: el fichero se generaba + # bien y se quedaba sin mover, o sea que la siembra fallaba justo en el único caso que importa. + { grep -vE '^[[:space:]]*(#|$)' "$FLEET_FIJA" || true; cat "$FLEET" 2>/dev/null || true; } \ | awk 'NF && !visto[$1]++' > "$FLEET.seed" && mv "$FLEET.seed" "$FLEET" fi HAMMER="${HAMMER:-$ROOT/target/release/hammer}"