#!/usr/bin/env bash # Repeatable, non-network regression sweep; logs retain failures and warnings. set -uo pipefail cd "$(dirname "$0")/.." run_dir="$(pwd)/build/rendering/batch-$(date +%Y%m%d-%H%M%S)-$$" mkdir -p "$run_dir" failed=0 run_test() { local mode="$1" test_script="$2" log="$run_dir/$1-${2%.gd}.log" local options=(--path project) if [ "$mode" = headless ]; then options+=(--headless); fi "${GODOT:-godot}" "${options[@]}" --script "$test_script" --quit-after 1800 >"$log" 2>&1 local status=$? if [ "$status" -ne 0 ] || grep -qE 'SCRIPT ERROR|Parse Error|^FAIL:|check\(s\) failed' "$log" || ! grep -qE 'PASS|failures=0' "$log"; then echo "FAIL $mode $test_script (exit=$status): $log" failed=$((failed + 1)) else echo "PASS $mode $test_script" fi if grep -q 'leaked at exit' "$log"; then echo "WARN resource leak: $log"; fi } for test_script in animation_cache_test.gd target_effect_test.gd effect_space_test.gd effect_faces_test.gd motion_effect_anchor_test.gd mob_winding_test.gd water_reference_test.gd effect_texture_animation_test.gd dds_lifecycle_test.gd effect_color_operation_test.gd effect_color_test.gd effect_scale_test.gd effect_rotation_test.gd effect_surface_test.gd effect_emission_test.gd effect_render_regression_test.gd effect_playback_test.gd fx_test.gd skill_fx_test.gd player_skill_test.gd skill_test.gd damage_effect_test.gd combat_fx_test.gd app_flow_lifecycle_test.gd playable_harness_test.gd playable_adapter_test.gd playable_combat_test.gd gamescene_test.gd equip_model_test.gd equip_rules_test.gd race_motion_assembly_test.gd character_winding_test.gd mob_view_test.gd net_world_vis_test.gd forest_viewpoints_test.gd playable_metrics_test.gd; do run_test headless "$test_script" done for test_script in effect_faces_test.gd effect_lie_test.gd effect_texture_animation_test.gd effect_color_operation_test.gd effect_surface_test.gd effect_emission_test.gd effect_rotation_test.gd model_render_test.gd gpu_lod_attachment_test.gd gpu_pose_bounds_test.gd forest_mob_render_test.gd; do run_test metal "$test_script" done for mode in headless metal; do MT_TREE_OUTPUT="$run_dir/native-trees-$mode" run_test "$mode" native_tree_test.gd run_test "$mode" effect_random_rotation_test.gd run_test "$mode" fly_target_bounds_test.gd done echo "BATCH failures=$failed logs=$run_dir" test "$failed" -eq 0