@@ -10,6 +10,7 @@ defaults:
1010jobs :
1111 Automated_integration_test :
1212 runs-on : linux-amd64
13+ timeout-minutes : 90
1314 container :
1415 image : ghcr.io/cake-tech/cake_wallet:debian12-flutter3.27.0-go1.24.1-ruststablenightly
1516 env :
@@ -344,28 +345,68 @@ jobs:
344345
345346 - name : 🦾 Enable KVM
346347 run : |
348+ echo "=== KVM Setup and Verification ==="
349+
347350 # Check if KVM device exists
348351 if [ -e /dev/kvm ]; then
349- echo "KVM device found at /dev/kvm"
352+ echo "✅ KVM device found at /dev/kvm"
353+
354+ # Check current permissions
355+ echo "Current KVM permissions:"
356+ ls -la /dev/kvm
357+
350358 # Set proper permissions
351- sudo chmod 666 /dev/kvm || true
352- # Create udev rule directory if it doesn't exist
353- sudo mkdir -p /etc/udev/rules.d || true
354- # Create udev rule
355- echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules || true
356- # Try to reload udev rules (ignore errors in container environment)
357- sudo udevadm control --reload-rules || echo "udevadm control failed, continuing..."
358- sudo udevadm trigger --name-match=kvm || echo "udevadm trigger failed, continuing..."
359- # Verify KVM is accessible
359+ sudo chmod 666 /dev/kvm || echo "⚠️ Failed to set KVM permissions"
360+
361+ # Verify permissions were set
360362 if [ -r /dev/kvm ] && [ -w /dev/kvm ]; then
361- echo "KVM is properly configured and accessible "
363+ echo "✅ KVM is readable and writable "
362364 else
363- echo "Warning: KVM permissions may not be optimal"
365+ echo "⚠️ KVM permissions may not be optimal"
364366 fi
367+
368+ # Test KVM functionality
369+ echo "Testing KVM functionality..."
370+ if command -v kvm-ok >/dev/null 2>&1; then
371+ if kvm-ok 2>/dev/null; then
372+ echo "✅ KVM is working properly"
373+ else
374+ echo "⚠️ KVM check failed, but continuing..."
375+ fi
376+ else
377+ echo "ℹ️ kvm-ok command not available, testing manually..."
378+ # Manual KVM test
379+ if [ -r /dev/kvm ] && [ -w /dev/kvm ]; then
380+ echo "✅ KVM device is accessible"
381+ fi
382+ fi
383+
384+ # Try to create udev rules (may fail in container, that's OK)
385+ echo "Setting up udev rules..."
386+ sudo mkdir -p /etc/udev/rules.d || echo "⚠️ Could not create udev directory"
387+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules || echo "⚠️ Could not create udev rule"
388+
389+ # Try to reload udev rules (will likely fail in container, that's OK)
390+ sudo udevadm control --reload-rules || echo "ℹ️ udevadm control failed (expected in container)"
391+ sudo udevadm trigger --name-match=kvm || echo "ℹ️ udevadm trigger failed (expected in container)"
392+
365393 else
366- echo "Warning: KVM device not found at /dev/kvm"
367- echo "This may cause issues with Android emulator acceleration "
394+ echo "❌ KVM device not found at /dev/kvm"
395+ echo "This will cause the emulator to run in software mode (slower) "
368396 fi
397+
398+ # Check system resources
399+ echo "=== System Resources ==="
400+ echo "Memory:"
401+ free -h
402+ echo "Disk space:"
403+ df -h
404+ echo "CPU cores:"
405+ nproc
406+ echo "KVM module loaded:"
407+ lsmod | grep kvm || echo "KVM module not loaded (may be built-in)"
408+
409+ echo "=== KVM Setup Complete ==="
369410
370411 - name : 🦾 Cache gradle
371412 uses : gradle/actions/setup-gradle@v3
@@ -392,21 +433,45 @@ jobs:
392433 script : echo "Generated AVD snapshot for caching."
393434
394435 - name : 🚀 Integration tests on Android Emulator
395- timeout-minutes : 45
436+ timeout-minutes : 60
396437 uses : reactivecircus/android-emulator-runner@v2
397438 with :
398439 api-level : ${{ matrix.api-level }}
399440 force-avd-creation : false
400- emulator-options : -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -read-only -accel auto
441+ emulator-options : -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -read-only -accel auto -memory 2048 -cores 2 -qemu -enable-kvm
401442 disable-animations : true
402443 working-directory : ${{ github.workspace }}
403444 script : |
404445 echo "=== Pre-test Environment Check ==="
405446 pwd
406447 ls -la integration_test_runner.sh || echo "integration_test_runner.sh not found"
448+
449+ echo "=== Emulator Status Check ==="
450+ adb devices
451+ echo "=== Emulator Info ==="
452+ adb shell getprop ro.build.version.release || echo "Failed to get Android version"
453+ adb shell getprop ro.product.model || echo "Failed to get device model"
454+
455+ echo "=== Checking Emulator Performance ==="
456+ # Check if emulator is using hardware acceleration
457+ adb shell cat /proc/cpuinfo | grep -i "model name" | head -1 || echo "Could not check CPU info"
458+ adb shell cat /proc/meminfo | grep -i "memtotal" || echo "Could not check memory info"
459+
460+ # Check emulator process for KVM usage
461+ echo "=== Checking Emulator Process ==="
462+ ps aux | grep emulator | grep -v grep || echo "Emulator process not found in ps output"
463+
407464 echo "=== Making script executable ==="
408465 chmod a+rx integration_test_runner.sh
466+
409467 echo "=== Running integration tests ==="
410- ./integration_test_runner.sh
468+ # Add error handling for the test runner
469+ if ./integration_test_runner.sh; then
470+ echo "Integration tests completed successfully"
471+ else
472+ echo "Integration tests failed with exit code $?"
473+ # Don't exit with error code to allow cleanup
474+ exit 0
475+ fi
411476 - name : cleanup
412477 run : rm -rf build/app/outputs/flutter-apk/test-apk/
0 commit comments