#!/usr/bin/env bash # Valida una Tarjeta Semilla pasándola por el parser+validate de brahman-card. # Uso: seeds/validate.sh seeds/arje-prod.card.json # # Método: copiamos la Card como `seed.card.json` en un cwd vacío y corremos # arje-zero en dev-mode 4 s. Si carga, valida, e instancia genesis, la # Card es estructuralmente correcta — los binarios de los hijos pueden # faltar en el host (vivirán en /usr/sbin del initrd). set -euo pipefail if [ "$#" -ne 1 ]; then echo "uso: $0 " >&2 exit 2 fi SEED="$(realpath "$1")" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" BIN="$REPO_DIR/target/release/arje-zero" if [ ! -x "$BIN" ]; then echo "[validate] compilando arje-zero (release)…" (cd "$REPO_DIR" && cargo build --quiet --release -p arje-zero) fi SCRATCH="$(mktemp -d -t arje-validate.XXXXXX)" trap 'rm -rf "$SCRATCH"' EXIT cp "$SEED" "$SCRATCH/seed.card.json" cd "$SCRATCH" LOG="$SCRATCH/arje-zero.log" # `timeout` retorna 124 al matar el proceso (dev-mode termina solo a los 4 s # de todas formas). Aceptamos cualquier exit code aquí; lo que importa es lo # que escribió al log. set +e timeout 5 "$BIN" >"$LOG" 2>&1 set -e # Mostrar las líneas relevantes (no es fatal si no aparecen — el check real # es el `grep -q` siguiente). grep -E "Tarjeta Semilla cargada|semilla inválida|JSON no contiene|Caused by" \ "$LOG" | head -5 || true if grep -q "Tarjeta Semilla cargada y validada" "$LOG"; then echo "[validate] OK: $SEED" exit 0 fi echo "[validate] FALLÓ: $SEED" >&2 echo "[validate] log completo:" >&2 sed -n '1,40p' "$LOG" >&2 exit 1