57 lines
2.2 KiB
Bash
Executable File
57 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Public entry for the first playable client gate. It delegates process
|
|
# ownership and post-exit validation to run_client_gate.sh.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
app="${MT_PLAYABLE_APP:-$PWD/build/export-native-trees-20260911/mtgodot-poc.app}"
|
|
config=""
|
|
output=""
|
|
mode="playable"
|
|
timeout="180"
|
|
allow=0
|
|
repeat=1
|
|
suite="full"
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
用法: script/playable_test.sh --config CONFIG [选项]
|
|
--app APP 导出包路径
|
|
--output DIR 单次运行输出目录(repeat=1)
|
|
--suite full 当前固定为 full/playable
|
|
--allow-gameplay 允许发送游戏状态变更请求
|
|
--repeat N 独立进程运行次数,默认 1
|
|
--timeout-seconds N 每次墙钟超时,默认 180
|
|
EOF
|
|
}
|
|
while [ "$#" -gt 0 ]; do
|
|
case "$1" in
|
|
--app) app="$2"; shift 2 ;;
|
|
--config) config="$2"; shift 2 ;;
|
|
--output) output="$2"; shift 2 ;;
|
|
--suite) suite="$2"; shift 2 ;;
|
|
--allow-gameplay) allow=1; shift ;;
|
|
--repeat) repeat="$2"; shift 2 ;;
|
|
--timeout-seconds) timeout="$2"; shift 2 ;;
|
|
--help) usage; exit 0 ;;
|
|
*) echo "未知选项: $1" >&2; usage >&2; exit 2 ;;
|
|
esac
|
|
done
|
|
if [ -z "$config" ] || [ ! -f "$config" ]; then echo "需要 --config CONFIG" >&2; exit 2; fi
|
|
if [ "$suite" != "full" ] && [ "$suite" != "playable" ]; then echo "--suite 只支持 full/playable" >&2; exit 2; fi
|
|
if ! [[ "$repeat" =~ ^[1-9][0-9]*$ ]]; then echo "--repeat 必须是正整数" >&2; exit 2; fi
|
|
if [ "$repeat" -gt 1 ] && [ -n "$output" ]; then echo "repeat>1 时不能指定单一 --output" >&2; exit 2; fi
|
|
|
|
root="$output"
|
|
if [ -z "$root" ]; then root="${MT_PLAYABLE_OUTPUT:-$PWD/build/playable/suite-$(date +%Y%m%d-%H%M%S)-$$}"; fi
|
|
mkdir -p "$root"
|
|
failed=0
|
|
for index in $(seq 1 "$repeat"); do
|
|
run_dir="$root"
|
|
if [ "$repeat" -gt 1 ]; then run_dir="$root/run-$index"; fi
|
|
args=(--app "$app" --config "$config" --output "$run_dir" --mode "$mode" --timeout-seconds "$timeout")
|
|
if [ "$allow" -eq 1 ]; then args+=(--allow-gameplay); fi
|
|
if ! bash script/run_client_gate.sh "${args[@]}"; then failed=$((failed + 1)); fi
|
|
done
|
|
if [ "$failed" -ne 0 ]; then echo "PLAYABLE SUITE: FAIL runs=$failed/$repeat" >&2; exit 1; fi
|
|
echo "PLAYABLE SUITE: PASS runs=$repeat root=$root"
|