feat(runme): integrar Runme como sidecar de documentación ejecutable
Agrega RUNBOOK.md y runbooks/ (fuera de content/, para no interferir con la publicación de Zola), con reglas de nombres/etiquetas/aislamiento de celdas mutantes verificadas por clusterlog validate. Instalación pinneada a v3.17.4 con checksum verificado (scripts/runme-install.sh), un job de CI separado (.gitea/workflows/ci.yml) que sólo corre celdas ci-safe, y la decisión documentada en docs/adr/0004-runme-sidecar.md y docs/RUNME.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Executable
+41
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
# Comprobación de compatibilidad de los runbooks. No escribe nada en el
|
||||
# repositorio. Las reglas duras (nombres únicos, etiquetas, aislamiento de
|
||||
# celdas mutantes, secretos, referencias a scripts/targets inexistentes)
|
||||
# viven en `clusterlog validate` (internal/clusterlog/runbooks.go) y corren
|
||||
# siempre, con o sin Runme instalado. Este script agrega, por encima, un
|
||||
# chequeo blando de que Runme puede parsear cada runbook de verdad.
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
BIN="${CLUSTERLOG_BIN:-$ROOT/bin/clusterlog}"
|
||||
|
||||
echo "== Reglas de clusterlog validate (obligatorio) =="
|
||||
"$BIN" --root "$ROOT" --json validate --skip-zola
|
||||
|
||||
if ! command -v runme >/dev/null 2>&1; then
|
||||
echo "== runme no está instalado: se omite el chequeo de compatibilidad de Runme (make runme-install) =="
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "== Compatibilidad con la versión fijada de Runme (blando) =="
|
||||
status=0
|
||||
files=("$ROOT/RUNBOOK.md")
|
||||
while IFS= read -r -d '' f; do
|
||||
files+=("$f")
|
||||
done < <(find "$ROOT/runbooks" -name '*.md' -print0 2>/dev/null)
|
||||
|
||||
for f in "${files[@]}"; do
|
||||
rel="${f#"$ROOT"/}"
|
||||
if runme ls --filename "$f" >/dev/null 2>&1; then
|
||||
echo " ok: $rel"
|
||||
else
|
||||
echo " ADVERTENCIA: runme no pudo parsear $rel" >&2
|
||||
status=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$status" -ne 0 ]; then
|
||||
echo "runme-check: advertencias de compatibilidad de Runme (no bloqueante)." >&2
|
||||
fi
|
||||
exit 0
|
||||
Executable
+84
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env bash
|
||||
# Instala una versión fijada de Runme (nunca "latest") verificando su
|
||||
# checksum SHA-256 contra los valores publicados en el release oficial.
|
||||
# No sustituye ni toca bin/clusterlog. No usa curl|sh.
|
||||
set -euo pipefail
|
||||
|
||||
RUNME_VERSION="3.17.4"
|
||||
INSTALL_DIR="${RUNME_INSTALL_DIR:-$HOME/.local/bin}"
|
||||
BASE_URL="https://github.com/runmedev/runme/releases/download/v${RUNME_VERSION}"
|
||||
|
||||
# SHA-256 tomados del checksums.txt publicado en el release v3.17.4 y
|
||||
# verificados de forma independiente (sha256sum) contra el tarball real
|
||||
# durante la implementación de esta integración.
|
||||
CHECKSUM_LINUX_X86_64="78af7ed33a84ff91a617a018886730038f10af8f73027451d322c21c417fed2c"
|
||||
CHECKSUM_LINUX_ARM64="fd016b92115d7f77806c70619ee113dc951c49398863e54bc83eadb9d48665e4"
|
||||
CHECKSUM_DARWIN_X86_64="7c69077ad7331725fa5224fab95562089a42c95baad42b130e1b0b3774ebc480"
|
||||
CHECKSUM_DARWIN_ARM64="cba556395ca24ccee641ee2faa20cc5a4150826205371de354aafc4a4d830381"
|
||||
|
||||
os="$(uname -s)"
|
||||
arch="$(uname -m)"
|
||||
|
||||
case "$os" in
|
||||
Linux)
|
||||
case "$arch" in
|
||||
x86_64) asset="runme_linux_x86_64.tar.gz"; checksum="$CHECKSUM_LINUX_X86_64" ;;
|
||||
aarch64|arm64) asset="runme_linux_arm64.tar.gz"; checksum="$CHECKSUM_LINUX_ARM64" ;;
|
||||
*) echo "Arquitectura Linux no soportada por este script: $arch" >&2; exit 1 ;;
|
||||
esac
|
||||
;;
|
||||
Darwin)
|
||||
case "$arch" in
|
||||
x86_64) asset="runme_darwin_x86_64.tar.gz"; checksum="$CHECKSUM_DARWIN_X86_64" ;;
|
||||
arm64) asset="runme_darwin_arm64.tar.gz"; checksum="$CHECKSUM_DARWIN_ARM64" ;;
|
||||
*) echo "Arquitectura macOS no soportada por este script: $arch" >&2; exit 1 ;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
echo "Sistema operativo no soportado por este script: $os" >&2
|
||||
echo "En Windows, descargue manualmente runme_windows_{x86_64,arm64}.zip desde" >&2
|
||||
echo " https://github.com/runmedev/runme/releases/tag/v${RUNME_VERSION}" >&2
|
||||
echo "y verifique su checksum contra checksums.txt del mismo release." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if command -v runme >/dev/null 2>&1; then
|
||||
current="$(runme --version 2>/dev/null | awk '{print $3}')"
|
||||
if [ "$current" = "$RUNME_VERSION" ]; then
|
||||
echo "runme $RUNME_VERSION ya está instalado en $(command -v runme); nada que hacer."
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
tmp_dir="$(mktemp -d)"
|
||||
trap 'rm -rf "$tmp_dir"' EXIT
|
||||
|
||||
echo "Descargando $asset (runme v${RUNME_VERSION})..."
|
||||
curl -fsSL -o "$tmp_dir/$asset" "$BASE_URL/$asset"
|
||||
|
||||
echo "Verificando checksum SHA-256..."
|
||||
computed="$(sha256sum "$tmp_dir/$asset" | awk '{print $1}')"
|
||||
if [ "$computed" != "$checksum" ]; then
|
||||
echo "ERROR: checksum no coincide para $asset" >&2
|
||||
echo " esperado: $checksum" >&2
|
||||
echo " obtenido: $computed" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "Checksum verificado."
|
||||
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
tar xzf "$tmp_dir/$asset" -C "$tmp_dir" runme
|
||||
install -m 0755 "$tmp_dir/runme" "$INSTALL_DIR/runme"
|
||||
|
||||
if [ -e "$INSTALL_DIR/clusterlog" ] || [ -e "$INSTALL_DIR/bin/clusterlog" ]; then
|
||||
echo "ERROR: se detectó un binario 'clusterlog' en $INSTALL_DIR; abortando para no sobrescribirlo." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "runme instalado en $INSTALL_DIR/runme"
|
||||
"$INSTALL_DIR/runme" --version
|
||||
case ":$PATH:" in
|
||||
*":$INSTALL_DIR:"*) ;;
|
||||
*) echo "Agregue $INSTALL_DIR a su PATH para usar 'runme' directamente." ;;
|
||||
esac
|
||||
Reference in New Issue
Block a user