Skip to content

🐧 Godot 4 GL3 Normal #905

🐧 Godot 4 GL3 Normal

🐧 Godot 4 GL3 Normal #905

name: 🐧 Godot 4 GL3 Normal
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: 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=\"gl_compatibility\"" >> 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 --rendering-driver opengl3 --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 --rendering-driver opengl3 --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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_one_by_one_parent_add_to_tree_maximum_tested_32
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_one_by_one_parent_add_to_tree_maximum_tested_32
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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_parent_add_to_tree_maximum_tested_max_random_33
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_parent_add_to_tree_maximum_tested_max_random_33
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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_default_34
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_default_34
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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_delaying_parent_add_to_tree_maximum_tested_35
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_delaying_parent_add_to_tree_maximum_tested_35
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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_delaying_one_by_one_parent_36
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_delaying_one_by_one_parent_36
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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_big_numbers_parent_one_by_one_37
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_big_numbers_parent_one_by_one_37
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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_small_numbers_parent_one_by_one_38
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_small_numbers_parent_one_by_one_38
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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_small_numbers_parent_one_by_one_add_to_tree_39
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_small_numbers_parent_one_by_one_add_to_tree_39
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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_add_arguments_to_tree_delaying_40
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_add_arguments_to_tree_delaying_40
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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_one_by_one_very_big_amount_of_functions_41
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_one_by_one_very_big_amount_of_functions_41
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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_one_by_one_very_big_amount_of_functions_add_to_tree_42
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_one_by_one_very_big_amount_of_functions_add_to_tree_42
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 --rendering-driver opengl3 --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 . --rendering-driver opengl3 --audio-driver Dummy # || echo "ERROR: REPRODUCER FAILURE"
fi
- name: Store reproducer
uses: actions/upload-artifact@v4
with:
name: reproducer_4_gl3_normal_multiple_classes_very_big_amount_of_functions_43
path: crash_reproduce.gd
if-no-files-found: ignore
- name: Store report
uses: actions/upload-artifact@v4
with:
name: report_reproducer_4_gl3_normal_multiple_classes_very_big_amount_of_functions_43
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