94 lines
3.8 KiB
Bash
Executable file
94 lines
3.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Identitäts-Vertrag (Karte t_1da96275 — „Editor-Playtest-Physik = Quest 3
|
|
# identisch"): dieselbe Probe-Map läuft durch
|
|
# A) Editor-Playtest (KolliderBau + PlaytestBody im SubViewport)
|
|
# B) Quest-Client (SvmapWorld + TestmapPlayer, im CLIENT-Projekt)
|
|
# Beide drucken `IDENT <name>=<wert>`-Zeilen; der Runner verlangt, dass die
|
|
# Zeilen IDENTISCH sind (gleiche Block/Walk-Entscheidungen in beiden Welten)
|
|
# und dass beide Suiten ihre Soll-Erwartungen erfüllen (Exit 0).
|
|
#
|
|
# Environment:
|
|
# GODOT Godot-Binary (Default: $HOME/bin/godot4, dann $PATH)
|
|
# SVR_CLIENT_DIR Client-Projektordner (Default: ../scopedvr-client neben
|
|
# diesem Repo — erkannt an project.godot)
|
|
# Exit 0 = Identität bestätigt.
|
|
set -u
|
|
if [ -n "${GODOT:-}" ]; then :
|
|
elif [ -x "$HOME/bin/godot4" ]; then
|
|
GODOT="$HOME/bin/godot4"
|
|
elif command -v godot4 >/dev/null 2>&1; then
|
|
GODOT=$(command -v godot4)
|
|
else
|
|
echo "FAIL: Kein Godot gefunden — GODOT=<pfad> setzen." >&2
|
|
exit 1
|
|
fi
|
|
EDITOR_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
|
|
# Client-Projekt finden: Env gewinnt, sonst Nachbar-Klon des Editors.
|
|
CLIENT_DIR="${SVR_CLIENT_DIR:-}"
|
|
if [ -z "$CLIENT_DIR" ]; then
|
|
for cand in "$EDITOR_DIR/../scopedvr-client" "$EDITOR_DIR/client"; do
|
|
if [ -f "$cand/project.godot" ]; then CLIENT_DIR="$cand"; break; fi
|
|
done
|
|
fi
|
|
if [ -z "$CLIENT_DIR" ] || [ ! -f "$CLIENT_DIR/project.godot" ]; then
|
|
echo "FAIL: Client-Projekt nicht gefunden (SVR_CLIENT_DIR setzen)." >&2
|
|
exit 1
|
|
fi
|
|
export GODOT_SILENCE_ROOT_WARNING=1
|
|
LOGDIR="${SVR_IDENTITAET_LOGDIR:-/tmp/svr_identitaet_logs_$$}"
|
|
mkdir -p "$LOGDIR"
|
|
MAP="${SVR_IDENTITAET_MAP:-/tmp/svr_identitaet_probe.svmap}"
|
|
export SVR_IDENTITAET_MAP="$MAP"
|
|
fail=0
|
|
|
|
echo "== 0) Probe-Map erzeugen =="
|
|
"$GODOT" --headless --path "$EDITOR_DIR" -s res://tests/gen_identitaet_map.gd \
|
|
> "$LOGDIR/gen.log" 2>&1
|
|
if ! grep -q "^IDENT_MAP=" "$LOGDIR/gen.log"; then
|
|
echo "FAIL: Probe-Map nicht erzeugt (siehe $LOGDIR/gen.log)" >&2
|
|
cat "$LOGDIR/gen.log" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "== 1) Import (beide Projekte) =="
|
|
"$GODOT" --headless --path "$EDITOR_DIR" --import > "$LOGDIR/import_editor.log" 2>&1
|
|
grep -E "Parse Error|SCRIPT ERROR" "$LOGDIR/import_editor.log" | head -5 >&2
|
|
"$GODOT" --headless --path "$CLIENT_DIR" --import > "$LOGDIR/import_client.log" 2>&1
|
|
grep -E "Parse Error|SCRIPT ERROR" "$LOGDIR/import_client.log" | head -5 >&2
|
|
|
|
echo "== 2) Editor-Playtest-Probe =="
|
|
"$GODOT" --headless --path "$EDITOR_DIR" -s res://tests/test_playtest_identitaet.gd \
|
|
> "$LOGDIR/editor.log" 2>&1
|
|
code=$?
|
|
grep -E "^IDENT [a-z_0-9]+=" "$LOGDIR/editor.log" > "$LOGDIR/editor.ident"
|
|
grep -E "ALL OK|FAILED" "$LOGDIR/editor.log" | tail -1
|
|
[ $code -ne 0 ] && fail=1 && echo "Editor-Suite rot (exit=$code):" >&2 && cat "$LOGDIR/editor.log" >&2
|
|
|
|
echo "== 3) Quest-Client-Probe =="
|
|
"$GODOT" --headless --path "$CLIENT_DIR" -s "$EDITOR_DIR/tests/test_identitaet_client.gd" \
|
|
> "$LOGDIR/client.log" 2>&1
|
|
code=$?
|
|
grep -E "^IDENT [a-z_0-9]+=" "$LOGDIR/client.log" > "$LOGDIR/client.ident"
|
|
grep -E "ALL OK|FAILED" "$LOGDIR/client.log" | tail -1
|
|
[ $code -ne 0 ] && fail=1 && echo "Client-Suite rot (exit=$code):" >&2 && cat "$LOGDIR/client.log" >&2
|
|
|
|
echo "== 4) Identitäts-Vergleich =="
|
|
n_editor=$(wc -l < "$LOGDIR/editor.ident")
|
|
n_client=$(wc -l < "$LOGDIR/client.ident")
|
|
if [ "$n_editor" -lt 6 ] || [ "$n_client" -lt 6 ]; then
|
|
echo "FAIL: Zu wenige IDENT-Zeilen (editor=$n_editor, client=$n_client) — Suiten sind gecrasht." >&2
|
|
tail -20 "$LOGDIR/editor.log" >&2
|
|
tail -20 "$LOGDIR/client.log" >&2
|
|
fail=1
|
|
elif diff -u "$LOGDIR/editor.ident" "$LOGDIR/client.ident" > "$LOGDIR/diff.txt"; then
|
|
echo "IDENTITAET OK: $n_editor Entscheidungen identisch."
|
|
else
|
|
echo "FAIL: Entscheidungen weichen ab:" >&2
|
|
cat "$LOGDIR/diff.txt" >&2
|
|
fail=1
|
|
fi
|
|
|
|
[ $fail -eq 0 ] && echo "Logs: $LOGDIR" && exit 0
|
|
echo "Logs: $LOGDIR"
|
|
exit 1
|