scripts/butler-prod-playbook-seed.sh
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env bash
# Seed + verify PROD_PLAYBOOK_* experiences (delegate rescue, path error, read_state).
#
# Usage:
# bash scripts/butler-prod-playbook-seed.sh # dry-run
# bash scripts/butler-prod-playbook-seed.sh --apply # write L4 tenant file
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"
export PYTHONPATH="$ROOT"
APPLY=0
for arg in "$@"; do
case "$arg" in
--apply) APPLY=1 ;;
-h|--help)
sed -n '1,6p' "$0"
exit 0
;;
esac
done
if [[ -f "$ROOT/.env" ]]; then
# shellcheck source=scripts/lib/butler-source-env.sh
source "$ROOT/scripts/lib/butler-source-env.sh"
butler_source_env "$ROOT/.env" 2>/dev/null || true
fi
DRY=$([[ "$APPLY" -eq 1 ]] && echo 0 || echo 1)
export BUTLER_PROD_PLAYBOOK_DRY="$DRY"
python3 - <<'PY'
import os
import sys
from butler.dev_engine.prod_playbook_seeds import (
seed_prod_playbooks,
verify_prod_playbook_retrieval,
)
dry = os.environ.get("BUTLER_PROD_PLAYBOOK_DRY", "1").strip() not in ("0", "false", "no")
print("=== Prod playbook seed ===")
print(f"mode: {'dry-run' if dry else 'apply'}")
result = seed_prod_playbooks(dry_run=dry)
print(f"l4={result.get('l4_path')}")
print(f"added={result.get('added')} updated={result.get('updated')} total={result.get('total')}")
if dry:
print()
print("ACTION: re-run with --apply to persist L4 playbooks")
sys.exit(0)
verify = verify_prod_playbook_retrieval()
print()
print("=== Retrieval verify ===")
for row in verify.get("checks") or []:
tag = "PASS" if row.get("hit") else "FAIL"
print(f" [{tag}] {row.get('query')} -> {row.get('expected')} (top={row.get('top')})")
print(f"blocks_ok count={verify.get('block_count')}")
if not verify.get("ok"):
print("FAIL: playbook retrieval incomplete")
sys.exit(1)
print("OK: prod playbooks seeded and retrievable")
PY