Skip to content
Open
Show file tree
Hide file tree
Changes from 103 commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
9299f56
Custom test runner, env vars, tests in demo
limbonaut Oct 30, 2025
5f2bf48
Disable hooks
limbonaut Oct 30, 2025
081d363
Bump gdUnit4 to specific commit
limbonaut Oct 31, 2025
325503c
Use in CI
limbonaut Oct 31, 2025
dce009e
Explain status codes
limbonaut Oct 31, 2025
e8d3015
Handle warnings
limbonaut Oct 31, 2025
38b64ee
Extract formatting functions into Fmt class
limbonaut Oct 31, 2025
0222ed3
Remove mobile basic tests
limbonaut Oct 31, 2025
0325390
Tests: Unset broken context
limbonaut Oct 31, 2025
a89e7d0
Deeper stack as example
limbonaut Oct 31, 2025
b0b526f
Better suite color
limbonaut Oct 31, 2025
88a1060
Use threads interface on Android, same as Native and Cocoa
limbonaut Nov 4, 2025
2ff5e48
Use threads interface on Android, same as Native and Cocoa
limbonaut Nov 4, 2025
5ab9003
Clean up
limbonaut Nov 4, 2025
d531767
Remove debug print
limbonaut Nov 4, 2025
1cd182d
Rename eventAddStackTrace to eventAddThreadStackTrace
limbonaut Nov 4, 2025
65c7052
Fix adding thread twice
limbonaut Nov 4, 2025
6a51669
Fix crashed flag
limbonaut Nov 4, 2025
5f0547c
Simplify exception handling
limbonaut Nov 4, 2025
c7b8df8
Remove unnecessary toLongOrNull conversion
limbonaut Nov 4, 2025
47c9a73
Style fix
limbonaut Nov 4, 2025
dcb1c37
Read test params from Android intent extras
limbonaut Nov 4, 2025
c32df3a
Add script to run tests on Android locally
limbonaut Nov 4, 2025
77f58d0
Update .gitignore
limbonaut Nov 4, 2025
c122428
Fix user tests on Android
limbonaut Nov 4, 2025
505e26a
Fix event tests on Android
limbonaut Nov 4, 2025
3fa272d
Fix breadcrumbs test on Android
limbonaut Nov 4, 2025
38f22bb
Merge branch 'ref/threads-android' into sentry-godot-mobile-testing
limbonaut Nov 4, 2025
2109c14
Update .gitignore
limbonaut Nov 4, 2025
2d546d2
Merge branch 'main' into sentry-godot-mobile-testing
limbonaut Nov 5, 2025
9b65eac
Clarify env vars in doc comments
limbonaut Nov 5, 2025
ccdc837
Include default tests if specs not provided
limbonaut Nov 5, 2025
c6a5faa
Clarify print statement
limbonaut Nov 5, 2025
ac83d04
Reset warning counter in test statistics
limbonaut Nov 5, 2025
d1f782f
Pretty output
limbonaut Nov 5, 2025
844b62f
Remove leftovers
limbonaut Nov 5, 2025
a2c5b93
Handle nulls in intent extras
limbonaut Nov 5, 2025
8c40c35
Add validation for Godot executable
limbonaut Nov 5, 2025
109348b
Refine script
limbonaut Nov 5, 2025
754e0d0
Update run-android-tests.sh
limbonaut Nov 5, 2025
17eb824
Add error handling and retry logic
limbonaut Nov 5, 2025
e44c07b
Fix wording in isolated test suites message
limbonaut Nov 5, 2025
7c9b8f5
Fix upper bound in event test
limbonaut Nov 5, 2025
5b27fb5
Adjust exit code
limbonaut Nov 5, 2025
29db578
Adjust test completion wording
limbonaut Nov 5, 2025
ea6f36b
Fix SentryLog.set_attribute() not working on Android
limbonaut Nov 5, 2025
d780488
Add delay in breadcrumb test for Android
limbonaut Nov 5, 2025
e92c15d
Newlines for output readability
limbonaut Nov 5, 2025
c314427
Set compat renderer to avoid emulator errors
limbonaut Nov 5, 2025
fadbd51
Fix and improve script
limbonaut Nov 5, 2025
adb289d
Don't use OS-reserved 126+ return codes
limbonaut Nov 6, 2025
482f518
Clarify comments
limbonaut Nov 6, 2025
6ec9726
Tests: Pass crashes through
limbonaut Nov 6, 2025
4bd567d
Fix crashing on exit on Android
limbonaut Nov 6, 2025
e1aa9d7
Merge branch 'main' into sentry-godot-mobile-testing
limbonaut Nov 6, 2025
954312c
Fixes and improvements to the script
limbonaut Nov 6, 2025
d8ef114
Fix crashing on exit on Android
limbonaut Nov 6, 2025
a5d14fd
Harden logger
limbonaut Nov 6, 2025
11a82cd
Update CHANGELOG.md
limbonaut Nov 6, 2025
c354130
Fix order
limbonaut Nov 6, 2025
766781c
Harden AndroidSDK in case of plugin destruction
limbonaut Nov 6, 2025
d2bd80d
Merge branch 'fix/android-crash-on-exit' into sentry-godot-mobile-tes…
limbonaut Nov 6, 2025
786dc97
Revert "Harden AndroidSDK in case of plugin destruction"
limbonaut Nov 6, 2025
84131c2
Harden AndroidSDK
limbonaut Nov 6, 2025
0796ccf
Merge branch 'fix/android-crash-on-exit' into sentry-godot-mobile-tes…
limbonaut Nov 6, 2025
17ab4ed
Remove --debug flag from Godot test runs
limbonaut Nov 6, 2025
54758a9
Tweaks
limbonaut Nov 6, 2025
80c18b0
Merge branch 'main' into sentry-godot-mobile-testing
limbonaut Nov 6, 2025
1451d33
Merge branch 'main' into sentry-godot-mobile-testing
limbonaut Nov 7, 2025
d6f3c87
WIP android CI setup
limbonaut Oct 31, 2025
57e5f5e
Update .gitignore
limbonaut Nov 7, 2025
e747261
Create build version file for gradle project
limbonaut Nov 7, 2025
423a27a
Simplify unzipping
limbonaut Nov 7, 2025
6a3fa80
Simplify CI script
limbonaut Nov 7, 2025
0c1909d
Fix Android export template extraction path
limbonaut Nov 7, 2025
6053032
Create deploy-android-template.sh
limbonaut Nov 7, 2025
fc4f62c
Fix variables in deploy script
limbonaut Nov 7, 2025
6a6af24
Update test_android.yml
limbonaut Nov 7, 2025
0ca9114
Verbose flag
limbonaut Nov 7, 2025
dc4e093
adb install with -r
limbonaut Nov 7, 2025
8ee160f
Add validation for isolated test suite discovery
limbonaut Nov 7, 2025
93cdca3
Script: Kill app if hanging
limbonaut Nov 7, 2025
98d572b
Allow Android export to fail in CI workflow
limbonaut Nov 7, 2025
3094e3d
enable KVM
limbonaut Nov 7, 2025
ff5cad2
Update deploy-android-template.sh
limbonaut Nov 7, 2025
77a9324
Update test_android.yml
limbonaut Nov 7, 2025
cdb7070
x86_64
limbonaut Nov 7, 2025
a824909
Fix missing export config
limbonaut Nov 7, 2025
719d86d
Try something
limbonaut Nov 7, 2025
49545a9
Re-add Java step
limbonaut Nov 8, 2025
4897a4d
Add retry logic for getting app PID
limbonaut Nov 8, 2025
b518fe6
Move Android testing setup into prepare action
limbonaut Nov 8, 2025
10fc159
Change test summary heading to "Final Results"
limbonaut Nov 8, 2025
e79122e
Inline Android template deployment script
limbonaut Nov 8, 2025
ff0f6ed
Stylistic changes
limbonaut Nov 8, 2025
746ba09
Replace newline escapes with echo in test script
limbonaut Nov 9, 2025
549e826
Corrections
limbonaut Nov 9, 2025
f3ded3c
Normalize indentation to spaces in run-android-tests.sh
limbonaut Nov 9, 2025
1be9a28
Improve test script reliability and performance
limbonaut Nov 9, 2025
f965520
Update run-android-tests.sh
limbonaut Nov 9, 2025
718535d
Update run-android-tests.sh
limbonaut Nov 9, 2025
0c6541c
Group export log
limbonaut Nov 9, 2025
76692c8
Fix export error reporting
limbonaut Nov 9, 2025
f3617e9
Make abort accept custom code, check for APK file
limbonaut Nov 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion .github/actions/prepare-testing/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ inputs:
arch:
description: Architecture to use for testing.
required: true
android:
description: Whether to prepare for Android testing.
default: "false"

runs:
using: "composite"
Expand All @@ -29,6 +32,13 @@ runs:
python --version
scons --version

- name: Set up Java 17
if: inputs.android == 'true'
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
distribution: temurin
java-version: 17

- name: Set up Godot
shell: bash
env:
Expand All @@ -44,6 +54,7 @@ runs:
fi

echo "Using Godot version: $version"
echo "GODOT_VERSION=$version" >> $GITHUB_ENV

if [[ "$RUNNER_OS" == "Windows" ]]; then
if [[ "$ARCH" == "x86_32" ]]; then
Expand Down Expand Up @@ -104,9 +115,26 @@ runs:
run: |
scons project/addons/gdUnit4

- name: Prepare export configuration
shell: bash
run: cp exports/export_presets.cfg project/export_presets.cfg

- name: Deploy Android build template
if: inputs.android == 'true'
shell: bash
run: |
# Download Godot templates
archive_file=Godot_v${GODOT_VERSION}_export_templates.tpz
url=https://github.com/godotengine/godot-builds/releases/download/${GODOT_VERSION}/${archive_file}
echo "Downloading templates from: $url"
curl -L -o templates.zip "${url}"

echo "Extracting Android source template..."
unzip -j templates.zip templates/android_source.zip -d exports/
rm templates.zip

- name: Prepare project
shell: bash
# timeout-minutes: 5
run: |
find project/addons/sentry/bin/ -name "crashpad_handler" -exec chmod 755 "{}" \;
echo "--- Rebuilding import cache"
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ jobs:
needs: build-extension
uses: ./.github/workflows/unit_tests.yml

test-android:
name: 🧪 Android tests
needs: build-extension
uses: ./.github/workflows/test_android.yml

package:
name: 📦 Package
needs: build-extension
Expand All @@ -49,7 +54,7 @@ jobs:
# See issue: https://github.com/getsentry/sentry-godot/issues/41
cleanup:
name: 🗑️ Cleanup
needs: [package, unit-tests, static-checks]
needs: [package, unit-tests, test-android, static-checks]
runs-on: ubuntu-latest
steps:
- name: Delete sentry-godot-gdextension artifact
Expand Down
59 changes: 59 additions & 0 deletions .github/workflows/test_android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: 🧪 Android tests

on:
workflow_call:

permissions:
contents: read

jobs:
test-android:
name: Test Android
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
submodules: false # don't initialize submodules automatically

- name: Prepare testing
uses: ./.github/actions/prepare-testing
timeout-minutes: 15
with:
arch: x86_64
android: true

# Needed for Android emulator
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm

# Make sure that the required directories and .cfg do exists. Workaround to keep ADV happy on `ubuntu-latest`.
- name: Setup Android directories
run: |
mkdir -p $HOME/.android
mkdir -p $HOME/.android/avd
touch $HOME/.android/repositories.cfg

- name: Run Android Tests
uses: reactivecircus/android-emulator-runner@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b # [email protected]
timeout-minutes: 30
with:
api-level: 30
target: "google_apis"
channel: "stable"
force-avd-creation: true
disable-animations: true
disable-spellchecker: true
emulator-options: >
-no-window
-no-snapshot-save
-gpu swiftshader_indirect
-noaudio
-no-boot-anim
-camera-back none
-camera-front none
arch: x86_64
script: ./scripts/run-android-tests.sh
11 changes: 5 additions & 6 deletions .github/workflows/unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,12 @@ jobs:
- name: Run tests
shell: bash
timeout-minutes: 5
env:
SENTRY_TEST: 1
SENTRY_TEST_INCLUDE: "res://test/suites/"
run: |
# Exit status codes: 0 - success, 100 - ends with test failures, 101 - ends with test warnings.
${GODOT} --headless --debug --path project/ \
--script "res://addons/gdUnit4/bin/GdUnitCmdTool.gd" \
--ignoreHeadlessMode \
--continue \
--add test/suites/
# Exit status codes: 0 - success, 100 - failures, 101 - warnings, 104 - tests not found, 105 - didn't run.
${GODOT} --headless --path project/

- name: Run isolated tests
if: success() || failure()
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ project/reports/
project/android/
project/.godot/

# Export related
exports/*
!exports/export_presets.cfg

# Source tree
src/gen/

Expand Down
220 changes: 220 additions & 0 deletions exports/export_presets.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
[preset.0]

name="Android CI"
platform="Android"
runnable=false
advanced_options=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=0

[preset.0.options]

custom_template/debug=""
custom_template/release=""
gradle_build/use_gradle_build=true
gradle_build/gradle_build_directory=""
gradle_build/android_source_template="../exports/android_source.zip"
gradle_build/compress_native_libraries=false
gradle_build/export_format=0
gradle_build/min_sdk=""
gradle_build/target_sdk=""
gradle_build/custom_theme_attributes={}
architectures/armeabi-v7a=false
architectures/arm64-v8a=true
architectures/x86=false
architectures/x86_64=true
version/code=1
version/name=""
package/unique_name="io.sentry.godot.project"
package/name=""
package/signed=true
package/app_category=2
package/retain_data_on_uninstall=false
package/exclude_from_recents=false
package/show_in_android_tv=false
package/show_in_app_library=true
package/show_as_launcher_app=false
launcher_icons/main_192x192=""
launcher_icons/adaptive_foreground_432x432=""
launcher_icons/adaptive_background_432x432=""
launcher_icons/adaptive_monochrome_432x432=""
graphics/opengl_debug=false
shader_baker/enabled=false
xr_features/xr_mode=0
gesture/swipe_to_dismiss=false
screen/immersive_mode=true
screen/edge_to_edge=false
screen/support_small=true
screen/support_normal=true
screen/support_large=true
screen/support_xlarge=true
screen/background_color=Color(0, 0, 0, 1)
user_data_backup/allow=false
command_line/extra_args=""
apk_expansion/enable=false
apk_expansion/SALT=""
apk_expansion/public_key=""
permissions/custom_permissions=PackedStringArray()
permissions/access_checkin_properties=false
permissions/access_coarse_location=false
permissions/access_fine_location=false
permissions/access_location_extra_commands=false
permissions/access_media_location=false
permissions/access_mock_location=false
permissions/access_network_state=false
permissions/access_surface_flinger=false
permissions/access_wifi_state=false
permissions/account_manager=false
permissions/add_voicemail=false
permissions/authenticate_accounts=false
permissions/battery_stats=false
permissions/bind_accessibility_service=false
permissions/bind_appwidget=false
permissions/bind_device_admin=false
permissions/bind_input_method=false
permissions/bind_nfc_service=false
permissions/bind_notification_listener_service=false
permissions/bind_print_service=false
permissions/bind_remoteviews=false
permissions/bind_text_service=false
permissions/bind_vpn_service=false
permissions/bind_wallpaper=false
permissions/bluetooth=false
permissions/bluetooth_admin=false
permissions/bluetooth_privileged=false
permissions/brick=false
permissions/broadcast_package_removed=false
permissions/broadcast_sms=false
permissions/broadcast_sticky=false
permissions/broadcast_wap_push=false
permissions/call_phone=false
permissions/call_privileged=false
permissions/camera=false
permissions/capture_audio_output=false
permissions/capture_secure_video_output=false
permissions/capture_video_output=false
permissions/change_component_enabled_state=false
permissions/change_configuration=false
permissions/change_network_state=false
permissions/change_wifi_multicast_state=false
permissions/change_wifi_state=false
permissions/clear_app_cache=false
permissions/clear_app_user_data=false
permissions/control_location_updates=false
permissions/delete_cache_files=false
permissions/delete_packages=false
permissions/device_power=false
permissions/diagnostic=false
permissions/disable_keyguard=false
permissions/dump=false
permissions/expand_status_bar=false
permissions/factory_test=false
permissions/flashlight=false
permissions/force_back=false
permissions/get_accounts=false
permissions/get_package_size=false
permissions/get_tasks=false
permissions/get_top_activity_info=false
permissions/global_search=false
permissions/hardware_test=false
permissions/inject_events=false
permissions/install_location_provider=false
permissions/install_packages=false
permissions/install_shortcut=false
permissions/internal_system_window=false
permissions/internet=false
permissions/kill_background_processes=false
permissions/location_hardware=false
permissions/manage_accounts=false
permissions/manage_app_tokens=false
permissions/manage_documents=false
permissions/manage_external_storage=false
permissions/master_clear=false
permissions/media_content_control=false
permissions/modify_audio_settings=false
permissions/modify_phone_state=false
permissions/mount_format_filesystems=false
permissions/mount_unmount_filesystems=false
permissions/nfc=false
permissions/persistent_activity=false
permissions/post_notifications=false
permissions/process_outgoing_calls=false
permissions/read_calendar=false
permissions/read_call_log=false
permissions/read_contacts=false
permissions/read_external_storage=false
permissions/read_frame_buffer=false
permissions/read_history_bookmarks=false
permissions/read_input_state=false
permissions/read_logs=false
permissions/read_media_audio=false
permissions/read_media_images=false
permissions/read_media_video=false
permissions/read_media_visual_user_selected=false
permissions/read_phone_state=false
permissions/read_profile=false
permissions/read_sms=false
permissions/read_social_stream=false
permissions/read_sync_settings=false
permissions/read_sync_stats=false
permissions/read_user_dictionary=false
permissions/reboot=false
permissions/receive_boot_completed=false
permissions/receive_mms=false
permissions/receive_sms=false
permissions/receive_wap_push=false
permissions/record_audio=false
permissions/reorder_tasks=false
permissions/restart_packages=false
permissions/send_respond_via_message=false
permissions/send_sms=false
permissions/set_activity_watcher=false
permissions/set_alarm=false
permissions/set_always_finish=false
permissions/set_animation_scale=false
permissions/set_debug_app=false
permissions/set_orientation=false
permissions/set_pointer_speed=false
permissions/set_preferred_applications=false
permissions/set_process_limit=false
permissions/set_time=false
permissions/set_time_zone=false
permissions/set_wallpaper=false
permissions/set_wallpaper_hints=false
permissions/signal_persistent_processes=false
permissions/status_bar=false
permissions/subscribed_feeds_read=false
permissions/subscribed_feeds_write=false
permissions/system_alert_window=false
permissions/transmit_ir=false
permissions/uninstall_shortcut=false
permissions/update_device_stats=false
permissions/use_credentials=false
permissions/use_sip=false
permissions/vibrate=false
permissions/wake_lock=false
permissions/write_apn_settings=false
permissions/write_calendar=false
permissions/write_call_log=false
permissions/write_contacts=false
permissions/write_external_storage=false
permissions/write_gservices=false
permissions/write_history_bookmarks=false
permissions/write_profile=false
permissions/write_secure_settings=false
permissions/write_settings=false
permissions/write_sms=false
permissions/write_social_stream=false
permissions/write_sync_settings=false
permissions/write_user_dictionary=false
2 changes: 1 addition & 1 deletion modules/gdUnit4
Submodule gdUnit4 updated 173 files
Loading
Loading