66 lines
3.0 KiB
Bash
Executable File
66 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Refresh the vendored engine + sanad_pkg from a full monorepo checkout.
|
|
# P1 ships a SELF-CONTAINED copy under ./vendor so the repo builds standalone.
|
|
# P1 now vendors from SanadV3 (the active engine — same evolved voice/audio/gemini
|
|
# as P2; P1 just mounts only its comms slice). Override with SANAD_SRC=/abs/path.
|
|
#
|
|
# ./sync_vendor.sh [/path/to/G1] # default: ../../ (G1/Packages/.. = G1/)
|
|
#
|
|
# Excludes runtime data (recordings/audio/faces), Logs, caches, the temp3d 3D
|
|
# viewer (P1 hides that tab), and tests — keeps code + config + dashboard SPA.
|
|
set -euo pipefail
|
|
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
PROJECT="${1:-$(cd "$HERE/../.." && pwd)}" # G1/Packages/Sanad_Package_1 -> ../../ = G1/
|
|
SRC_SANAD="${SANAD_SRC:-$PROJECT/Sanadv3}"
|
|
SRC_PKG="$PROJECT/Packages/sanad_pkg"
|
|
SRC_LIC="$PROJECT/Packages/licensing"
|
|
|
|
[ -d "$SRC_SANAD" ] || { echo "ERROR: no engine at $SRC_SANAD (set SANAD_SRC=/path)"; exit 1; }
|
|
[ -d "$SRC_PKG" ] || { echo "ERROR: no sanad_pkg at $SRC_PKG"; exit 1; }
|
|
|
|
echo ">> vendoring Sanad engine from $SRC_SANAD"
|
|
rm -rf "$HERE/vendor"; mkdir -p "$HERE/vendor"
|
|
rsync -a \
|
|
--exclude 'data/' --exclude 'Logs/' --exclude '__pycache__/' --exclude '*.pyc' \
|
|
--exclude '.git/' --exclude 'dashboard/static/temp3d/' --exclude 'tests/' \
|
|
"$SRC_SANAD/" "$HERE/vendor/Sanad/"
|
|
|
|
echo ">> seeding minimal data/"
|
|
mkdir -p "$HERE/vendor/Sanad/data/motions"
|
|
cp "$SRC_SANAD/data/motions/config.json" "$HERE/vendor/Sanad/data/motions/config.json"
|
|
for j in audio_device.json camera_device.json; do
|
|
[ -f "$SRC_SANAD/data/$j" ] && cp "$SRC_SANAD/data/$j" "$HERE/vendor/Sanad/data/$j" || true
|
|
done
|
|
for d in recordings audio faces photos; do mkdir -p "$HERE/vendor/Sanad/data/$d"; touch "$HERE/vendor/Sanad/data/$d/.gitkeep"; done
|
|
|
|
echo ">> vendoring sanad_pkg + public key"
|
|
rm -rf "$HERE/vendor/sanad_pkg"; cp -r "$SRC_PKG" "$HERE/vendor/sanad_pkg"
|
|
find "$HERE/vendor/sanad_pkg" -name __pycache__ -type d -prune -exec rm -rf {} + 2>/dev/null || true
|
|
mkdir -p "$HERE/license"
|
|
cp "$SRC_LIC/pubkey.ed25519" "$HERE/license/pubkey.ed25519"
|
|
|
|
echo ">> ship keyless (blank any baked Gemini key in the seed)"
|
|
python3 - "$HERE" <<'PY'
|
|
import json, sys
|
|
h = sys.argv[1]
|
|
for p, sec in ((h+"/vendor/Sanad/config/core_config.json", "gemini_defaults"),
|
|
(h+"/vendor/Sanad/data/motions/config.json", "gemini")):
|
|
try:
|
|
d = json.load(open(p))
|
|
except Exception:
|
|
continue
|
|
s = d.get(sec)
|
|
if isinstance(s, dict) and s.get("api_key"):
|
|
s["api_key"] = ""
|
|
json.dump(d, open(p, "w"), ensure_ascii=False, indent=2)
|
|
print(" blanked", sec, "in", p)
|
|
PY
|
|
|
|
echo ">> refresh ./data seed mirror (keep structure, drop runtime media)"
|
|
rsync -a --delete \
|
|
--exclude 'recordings/*' --exclude 'audio/*' --exclude 'faces/*' --exclude 'photos/*' \
|
|
"$HERE/vendor/Sanad/data/" "$HERE/data/"
|
|
for d in recordings audio faces photos; do mkdir -p "$HERE/data/$d"; touch "$HERE/data/$d/.gitkeep"; done
|
|
|
|
echo ">> done. vendor: $(du -sh "$HERE/vendor" | cut -f1) — review & commit ./vendor ./data ./license"
|