🐧 Godot 4 headless MORE #157
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: 🐧 Godot 4 headless MORE | |
on: | |
push: | |
pull_request: | |
schedule: | |
- cron: '0 0 * * *' | |
env: | |
GODOT_BASE_BRANCH: master | |
SCONS_CACHE_LIMIT: 4096 | |
jobs: | |
linux-sanitizer: | |
runs-on: "ubuntu-22.04" | |
name: Editor and project | |
steps: | |
- uses: actions/checkout@v4 | |
# Azure repositories are not reliable, we need to prevent azure giving us packages. | |
- name: Make apt sources.list use the default Ubuntu repositories | |
run: | | |
sudo rm -f /etc/apt/sources.list.d/* | |
sudo cp -f misc/ci/sources.list /etc/apt/sources.list | |
sudo apt-get update | |
# Install all packages (except scons) | |
- name: Configure dependencies | |
run: | | |
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list | |
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EB8B81E14DA65431D7504EA8F63F0F2B90935439 | |
sudo add-apt-repository "deb https://ppa.launchpadcontent.net/kisak/turtle/ubuntu focal main" | |
sudo apt update | |
sudo apt install -qq mesa-vulkan-drivers | |
sudo apt install build-essential pkg-config libx11-dev libxcursor-dev \ | |
libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev yasm \ | |
xvfb wget2 unzip scons git curl earlyoom | |
sudo apt install mold | |
- name: Download and install mold | |
run: | | |
wget -q https://github.com/rui314/mold/releases/download/v2.30.0/mold-2.30.0-x86_64-linux.tar.gz -O a.tar.gz | |
tar -xvf a.tar.gz | |
#sudo cp mold-2.30.0-x86_64-linux/bin/mold /usr/local/bin/mold | |
#sudo cp mold-2.30.0-x86_64-linux/bin/ld.mold /usr/local/bin/ld.mold | |
#sudo cp mold-2.30.0-x86_64-linux/bin/mold /usr/local/mold | |
#sudo cp mold-2.30.0-x86_64-linux/bin/ld.mold /usr/local/ld.mold | |
- name: Copy Basic Data | |
run: | | |
mv Autoloads/BasicData2.gd Autoloads/BasicData.gd | |
- name: Set version | |
run: | | |
export GODOT_VERSION=$(curl -s https://api.github.com/repos/godotengine/godot/commits/master | jq -r '.sha') | |
#echo "$GODOT_VERSION" > GODOT_VERSION.txt | |
- name: Configure Project Data | |
run: | | |
echo "[rendering]" >> project.godot | |
echo "renderer/rendering_method=\"forward_plus\"" >> project.godot | |
- name: Download reproducer | |
run: | | |
wget -nv https://github.com/qarmin/Qarminer/releases/download/reproducer/find_minimal_godot_crash_02 -O reproducer | |
chmod +x ./reproducer | |
- name: Compile Godot | |
run: | | |
wget -nv https://github.com/qarmin/GodotBuilds/releases/download/Nightly/linux4-editor-sanitizers.7z -O linux4-editor-sanitizers.7z | |
7z x linux4-editor-sanitizers.7z | |
rm linux4-editor-sanitizers.7z | |
# Make backup of project.godot | |
- name: Backup project.godot | |
run: | | |
cp project.godot project.godot.old | |
- name: Open Godot Editor | |
run: | | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san -e --quit --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 300 sanitizers_log.txt > editor_results.txt | |
- name: Store editor results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: editor-results | |
path: editor_results.txt | |
- name: Check Godot Editor Log | |
run: | | |
misc/check_ci_log.py editor_results.txt | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
- name: Run Project SimpleThings | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== SimpleThings" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 660 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san SimpleThings.tscn 300 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
echo "add_to_tree: true" >> settings.txt | |
echo "use_parent_methods: true" >> settings.txt | |
echo "test_one_class_multiple_times: true" >> settings.txt | |
echo "maximum_executed_functions_on_object: 3" >> settings.txt | |
- name: Run Project One by One | Parent | Add to tree | Maximum Tested | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== One by One | Parent | Add to tree | Maximum Tested" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 960 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 600 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_one_by_one_parent_add_to_tree_maximum_tested_45 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_one_by_one_parent_add_to_tree_maximum_tested_45 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
echo "add_to_tree: true" >> settings.txt | |
echo "use_parent_methods: true" >> settings.txt | |
echo "maximum_executed_functions_on_object: 20" >> settings.txt | |
echo "max_random_tested_classes: 10" >> settings.txt | |
- name: Run Project Parent | Add to tree | Maximum Tested | Max Random | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== Parent | Add to tree | Maximum Tested | Max Random" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 960 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 600 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_parent_add_to_tree_maximum_tested_max_random_46 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_parent_add_to_tree_maximum_tested_max_random_46 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
- name: Run Project Default | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== Default" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 960 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 600 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_default_47 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_default_47 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
echo "add_to_tree: true" >> settings.txt | |
echo "use_parent_methods: true" >> settings.txt | |
echo "delay_removing_added_nodes_to_next_frame: true" >> settings.txt | |
echo "maximum_executed_functions_on_object: 3" >> settings.txt | |
- name: Run Project Delaying | Parent | Add to tree | Maximum Tested | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== Delaying | Parent | Add to tree | Maximum Tested" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 960 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 600 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_delaying_parent_add_to_tree_maximum_tested_48 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_delaying_parent_add_to_tree_maximum_tested_48 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
echo "use_parent_methods: true" >> settings.txt | |
echo "delay_removing_added_nodes_to_next_frame: true" >> settings.txt | |
echo "test_one_class_multiple_times: true" >> settings.txt | |
- name: Run Project Delaying | One by One | Parent | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== Delaying | One by One | Parent" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 960 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 600 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_delaying_one_by_one_parent_49 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_delaying_one_by_one_parent_49 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
echo "used_number: 10000" >> settings.txt | |
echo "use_parent_methods: true" >> settings.txt | |
echo "test_one_class_multiple_times: true" >> settings.txt | |
- name: Run Project Big Numbers | Parent | One by One | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== Big Numbers | Parent | One by One" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 960 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 600 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_big_numbers_parent_one_by_one_50 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_big_numbers_parent_one_by_one_50 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
echo "used_number: 20" >> settings.txt | |
echo "use_parent_methods: true" >> settings.txt | |
echo "test_one_class_multiple_times: true" >> settings.txt | |
- name: Run Project Small Numbers | Parent | One by One | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== Small Numbers | Parent | One by One" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 960 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 600 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_small_numbers_parent_one_by_one_51 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_small_numbers_parent_one_by_one_51 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
echo "used_number: 8" >> settings.txt | |
echo "add_to_tree: true" >> settings.txt | |
echo "maximum_executed_functions_on_object: 7" >> settings.txt | |
echo "use_parent_methods: true" >> settings.txt | |
echo "test_one_class_multiple_times: true" >> settings.txt | |
- name: Run Project Small Numbers | Parent | One by One | Add to tree | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== Small Numbers | Parent | One by One | Add to tree" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 960 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 600 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_small_numbers_parent_one_by_one_add_to_tree_52 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_small_numbers_parent_one_by_one_add_to_tree_52 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
echo "add_arguments_to_tree: true" >> settings.txt | |
echo "delay_removing_added_arguments_to_next_frame: true" >> settings.txt | |
- name: Run Project Add arguments to tree | Delaying | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== Add arguments to tree | Delaying" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 960 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 600 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_add_arguments_to_tree_delaying_53 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_add_arguments_to_tree_delaying_53 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
echo "number_of_function_repeats: 6" >> settings.txt | |
echo "use_parent_methods: true" >> settings.txt | |
echo "test_one_class_multiple_times: true" >> settings.txt | |
echo "how_many_times_test_one_class: 2" >> settings.txt | |
- name: Run Project One By one, very big amount of functions | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== One By one, very big amount of functions" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 1260 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 900 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_one_by_one_very_big_amount_of_functions_54 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_one_by_one_very_big_amount_of_functions_54 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
echo "number_of_function_repeats: 3" >> settings.txt | |
echo "add_to_tree: true" >> settings.txt | |
echo "use_parent_methods: true" >> settings.txt | |
echo "test_one_class_multiple_times: true" >> settings.txt | |
echo "how_many_times_test_one_class: 2" >> settings.txt | |
echo "maximum_executed_functions_on_object: 15" >> settings.txt | |
- name: Run Project One By one, very big amount of functions, Add to tree | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== One By one, very big amount of functions, Add to tree" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 1260 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 900 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_one_by_one_very_big_amount_of_functions_add_to_tree_55 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_one_by_one_very_big_amount_of_functions_add_to_tree_55 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Configure Project Data | |
run: | | |
rm timer.txt || true | |
rm CRASH_INFO -rf || true | |
rm memory_usage.txt || true | |
rm results.txt || true | |
rm crash_reproduce.gd || true | |
echo "" > settings.txt | |
cp project.godot.old project.godot | |
echo "number_of_function_repeats: 2" >> settings.txt | |
echo "use_parent_methods: true" >> settings.txt | |
echo "how_many_times_test_one_class: 2" >> settings.txt | |
echo "maximum_executed_functions_on_object: 15" >> settings.txt | |
- name: Run Project Multiple classes, very big amount of functions | |
run: | | |
for i in {0..50}; do echo "" >> project_results.txt; done; | |
echo "======================================== Multiple classes, very big amount of functions" 2>&1 | tee sanitizers_log.txt | |
UBSAN_OPTIONS=suppressions=suppressions.supp DRI_PRIME=0 timeout -v 1260 xvfb-run ./godot.linuxbsd.editor.dev.x86_64.san FunctionExecutor.tscn 900 --audio-driver Dummy --headless --path $(pwd) 2>&1 | tee sanitizers_log.txt || true | |
tail -n 200 sanitizers_log.txt >> project_results.txt | |
if [ -f "results.txt" ]; then | |
if [ -f "results_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "results.txt" "t.txt" "results_end.txt" > "temp.txt" | |
mv "temp.txt" "results_end.txt" | |
else | |
cp "results.txt" "results_end.txt" | |
fi | |
fi | |
if [ -f "memory_usage.txt" ]; then | |
if [ -f "memory_usage_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "memory_usage.txt" "t.txt" "memory_usage_end.txt" > "temp.txt" | |
mv "temp.txt" "memory_usage_end.txt" | |
else | |
cp "memory_usage.txt" "memory_usage_end.txt" | |
fi | |
fi | |
if [ -f "timer.txt" ]; then | |
if [ -f "timer_end.txt" ]; then | |
for i in {0..50}; do echo "" >> t.txt; done; | |
cat "timer.txt" "t.txt" "timer_end.txt" > "temp.txt" | |
mv "temp.txt" "timer_end.txt" | |
else | |
cp "timer.txt" "timer_end.txt" | |
fi | |
fi | |
- name: Run reproducer | |
run: | | |
echo "extends Node" > temp.txt | |
echo "func _process(delta):" >> temp.txt | |
if [ -f results.txt ]; then | |
cat temp.txt results.txt > Node.gd.test || true | |
UBSAN_OPTIONS=suppressions=suppressions.supp RUST_BACKTRACE=1 DRI_PRIME=0 timeout -v 3600 ./reproducer godot.linuxbsd.editor.dev.x86_64.san 60_50 . --headless --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE" | |
fi | |
- name: Store reproducer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reproducer_4_headless_normal_multiple_classes_very_big_amount_of_functions_56 | |
path: crash_reproduce.gd | |
if-no-files-found: ignore | |
- name: Store report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: report_reproducer_4_headless_normal_multiple_classes_very_big_amount_of_functions_56 | |
path: CRASH_INFO | |
if-no-files-found: ignore | |
- name: Store project results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: project-results | |
path: project_results.txt | |
- name: Store test results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: last-run-functions | |
path: results_end.txt | |
- name: Store timer results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: timer | |
path: timer_end.txt | |
if-no-files-found: ignore | |
- name: Store memory usage results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: memory-usage | |
path: memory_usage_end.txt | |
if-no-files-found: ignore | |
- name: Check Log | |
run: | | |
misc/check_ci_log.py project_results.txt |