devolutions-crypto 0.9.2

An abstraction layer for the cryptography used by Devolutions
Documentation
name: Unit Tests Android Nuget
description: This tests the Android nuget package.
runs:
  using: composite
  steps:
    - name: Download Nugets Libs
      uses: actions/download-artifact@v4
      with:
        pattern: nugets-*
        merge-multiple: true
        path: ./wrappers/csharp/tests/unit-tests/nugets/Nugets

    - name: Add local nuget source
      shell: bash
      run: |
        dotnet nuget add source /home/runner/work/devolutions-crypto/devolutions-crypto/wrappers/csharp/tests/unit-tests/nugets/Nugets -n LocalPackages
        dotnet nuget list source

    - name: Install android Workload
      shell: bash
      run: sudo dotnet workload install android

    - name: Enable KVM group perms
      shell: bash
      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

    - name: Install required android dependencies
      shell: bash
      working-directory: /usr/local/lib/android/sdk/cmdline-tools/latest/bin
      run: |
        echo "yes" | ./sdkmanager emulator
        echo "yes" | ./sdkmanager "platform-tools"

        sudo apt-get install libpulse0

        echo "/usr/local/lib/android/sdk/platform-tools" >> $GITHUB_PATH
        echo "/usr/local/lib/android/sdk/emulator" >> $GITHUB_PATH
        echo "/usr/local/lib/android/sdk/cmdline-tools/latest/bin" >> $GITHUB_PATH

    - name: Starting ADB Server
      shell: bash
      run: adb start-server

    - name: Installing SDK Android-33 arm64-v8a
      shell: bash
      run: echo "y" | sdkmanager --install "system-images;android-33;google_apis;x86_64"

    - name: Creating Android device
      shell: bash
      run: echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-33;google_apis;x86_64"

    - name: Starting emulator
      shell: bash
      run: |
        export QT_QPA_PLATFORM=offscreen
        emulator @test_emulator -no-audio -no-window -no-snapshot -no-boot-anim -accel auto -gpu auto -qemu -m 2048 &

    - name: Waiting for emulator to boot
      shell: bash
      run: |
        adb wait-for-device

        A=$(adb shell getprop sys.boot_completed | tr -d '\r')
        I=0
        while [ "$A" != "1" ] && [ $I -le 900 ]; do
                sleep 5
                A=$(adb shell getprop sys.boot_completed | tr -d '\r')
                ((I=I+5))
                echo "Waiting : $I seconds"
        done

        if [ $I -ge 900 ]; then
          echo "Device did not boot in 15 minutes, cancelling."
          exit 1
        else
          echo "Boot Time : $I seconds"
        fi

        adb shell input keyevent 82

    - name: Show adb devices
      shell: bash
      run: adb devices

    - name: Unit tests Android
      working-directory: ./wrappers/csharp/tests/unit-tests/nugets/android
      shell: bash
      run: dotnet build -t:run --configuration Debug

    - name: Pipe logcat to file
      shell: bash
      run: |
        adb logcat -c
        adb logcat > build.log &

    - name: Wait for tests
      shell: bash
      run: |
        while true; do
            if grep -q "====ENDOFTESTS====" build.log; then
                echo "Found '====ENDOFTESTS===='."
                cat build.log
                exit 0
            fi
            sleep 5
        done
        
    - name: Check fail
      shell: bash
      run: |
        grep "Failed: 0" build.log
        if [ $? -ne 0 ]; then
          exit 1
        fi