diff --git a/.github/workflows/e2e-detox-android-template.yml b/.github/workflows/e2e-detox-android-template.yml index c4852c2220f..aed4142e659 100644 --- a/.github/workflows/e2e-detox-android-template.yml +++ b/.github/workflows/e2e-detox-android-template.yml @@ -145,16 +145,11 @@ jobs: # name: android-build-apk-${{ github.run_id }} # path: "android/app/build/outputs/apk/**/app-*.apk" - e2e-android: - continue-on-error: true + e2e-android-on-mac: name: android-detox-e2e-${{ matrix.runId }}-${{ matrix.deviceName }}-${{ matrix.deviceOsVersion }} - env: - IOS: false - GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4096m" - ARCH: x86_64 - DEVICE_NAME: ${{ needs.generate-specs.outputs.device_name }} - DEVICE_OS_VERSION: ${{ needs.generate-specs.outputs.device_os_version }} - runs-on: ubuntu-22.04 + continue-on-error: true + runs-on: macos-latest + timeout-minutes: 15 needs: - generate-specs # - build-android-apk @@ -162,116 +157,198 @@ jobs: fail-fast: false matrix: ${{fromJson(needs.generate-specs.outputs.specs)}} steps: - - name: Checkout Repository - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - name: Checkout + uses: actions/checkout@v1 + with: + fetch-depth: 1 + + - name: ci/prepare-node-deps + uses: ./.github/actions/prepare-node-deps + + - name: Install Java + uses: actions/setup-java@v4 + with: + java-version: "17" + distribution: "adopt" + cache: "gradle" + - name: Create destination path + run: mkdir -p android/app/build/outputs/apk + + - name: Download artifact + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + curl -L -H "Authorization: token $GITHUB_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/mattermost/mattermost-mobile/actions/artifacts/1578521977/zip \ + --output android/app/build/outputs/apk/artifact.zip + + - name: Unzip artifact + run: unzip android/app/build/outputs/apk/artifact.zip -d android/app/build/outputs/apk + + - name: Cleanup + run: rm android/app/build/outputs/apk/artifact.zip + + - name: Download Android Emulator Image + run: | + echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-29;google_apis;x86" + echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd --force --name emu --device "Nexus 5X" -k 'system-images;android-29;google_apis;x86' + $ANDROID_HOME/emulator/emulator -list-avds + + - name: Android Emulator + timeout-minutes: 10 + continue-on-error: true + run: | + echo "Starting emulator" + nohup $ANDROID_HOME/emulator/emulator -avd emu -no-audio -no-snapshot -no-window & + $ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82' + $ANDROID_HOME/platform-tools/adb devices + echo "Emulator started" + + - name: Start React Native Metro Server + run: npm run start & + + - name: Install Detox Dependencies + run: cd detox && npm i + + - name: Run Detox Tests + run: | + cd detox && npm run e2e:android-test -- ${{ matrix.specs }} + + - name: Upload Android Test Report + if: always() + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: android-results-${{ matrix.runId }} + path: detox/artifacts + + # e2e-android: + # continue-on-error: true + # name: android-detox-e2e-${{ matrix.runId }}-${{ matrix.deviceName }}-${{ matrix.deviceOsVersion }} + # env: + # IOS: false + # GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4096m" + # ARCH: x86_64 + # DEVICE_NAME: ${{ needs.generate-specs.outputs.device_name }} + # DEVICE_OS_VERSION: ${{ needs.generate-specs.outputs.device_os_version }} + # runs-on: ubuntu-22.04 + # needs: + # - generate-specs + # # - build-android-apk + # strategy: + # fail-fast: false + # matrix: ${{fromJson(needs.generate-specs.outputs.specs)}} + # steps: + # - name: Checkout Repository + # uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - name: Install Java - uses: actions/setup-java@v4 - with: - java-version: "17" - distribution: "adopt" - cache: "gradle" + # - name: Install Java + # uses: actions/setup-java@v4 + # with: + # java-version: "17" + # distribution: "adopt" + # cache: "gradle" - - name: Create destination path - run: mkdir -p android/app/build/outputs/apk + # - name: Create destination path + # run: mkdir -p android/app/build/outputs/apk - - name: Download artifact - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - curl -L -H "Authorization: token $GITHUB_TOKEN" \ - -H "Accept: application/vnd.github.v3+json" \ - https://api.github.com/repos/mattermost/mattermost-mobile/actions/artifacts/1578521977/zip \ - --output android/app/build/outputs/apk/artifact.zip + # - name: Download artifact + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # run: | + # curl -L -H "Authorization: token $GITHUB_TOKEN" \ + # -H "Accept: application/vnd.github.v3+json" \ + # https://api.github.com/repos/mattermost/mattermost-mobile/actions/artifacts/1578521977/zip \ + # --output android/app/build/outputs/apk/artifact.zip - - name: Unzip artifact - run: unzip android/app/build/outputs/apk/artifact.zip -d android/app/build/outputs/apk + # - name: Unzip artifact + # run: unzip android/app/build/outputs/apk/artifact.zip -d android/app/build/outputs/apk - - name: Cleanup - run: rm android/app/build/outputs/apk/artifact.zip + # - name: Cleanup + # run: rm android/app/build/outputs/apk/artifact.zip - - 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 + # - 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 - - name: ci/prepare-node-deps - uses: ./.github/actions/prepare-node-deps + # - name: ci/prepare-node-deps + # uses: ./.github/actions/prepare-node-deps - - name: Gradle cache - uses: gradle/actions/setup-gradle@v3 + # - name: Gradle cache + # uses: gradle/actions/setup-gradle@v3 - - name: Empty disk space - uses: jlumbroso/free-disk-space@main - with: - tool-cache: false - android: false - dotnet: true - haskell: true - large-packages: false - docker-images: true - swap-storage: false - - - name: Install Android SDK - run: | - sudo apt-get update - sudo apt-get install -y openjdk-11-jdk wget unzip - mkdir -p $HOME/android-sdk/cmdline-tools/latest - wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip -O cmdline-tools.zip - unzip cmdline-tools.zip -d $HOME/android-sdk/cmdline-tools/latest - mv $HOME/android-sdk/cmdline-tools/latest/cmdline-tools/* $HOME/android-sdk/cmdline-tools/latest/ - yes | $HOME/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses - $HOME/android-sdk/cmdline-tools/latest/bin/sdkmanager "platform-tools" "platforms;android-33" "system-images;android-33;default;x86_64" "emulator" + # - name: Empty disk space + # uses: jlumbroso/free-disk-space@main + # with: + # tool-cache: false + # android: false + # dotnet: true + # haskell: true + # large-packages: false + # docker-images: true + # swap-storage: false + + # - name: Install Android SDK + # run: | + # sudo apt-get update + # sudo apt-get install -y openjdk-11-jdk wget unzip + # mkdir -p $HOME/android-sdk/cmdline-tools/latest + # wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip -O cmdline-tools.zip + # unzip cmdline-tools.zip -d $HOME/android-sdk/cmdline-tools/latest + # mv $HOME/android-sdk/cmdline-tools/latest/cmdline-tools/* $HOME/android-sdk/cmdline-tools/latest/ + # yes | $HOME/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses + # $HOME/android-sdk/cmdline-tools/latest/bin/sdkmanager "platform-tools" "platforms;android-33" "system-images;android-33;default;x86_64" "emulator" - - name: Create AVD - run: | - echo no | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd --force -n pixel_6_pro --abi 'default/x86_64' --package 'system-images;android-33;default;x86_64' - printf 'hw.cpu.ncore=2\n' >> $HOME/.android/avd/pixel_6_pro.avd/config.ini + # - name: Create AVD + # run: | + # echo no | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd --force -n pixel_6_pro --abi 'default/x86_64' --package 'system-images;android-33;default;x86_64' + # printf 'hw.cpu.ncore=2\n' >> $HOME/.android/avd/pixel_6_pro.avd/config.ini - - name: Start emulator - run: | - $ANDROID_HOME/emulator/emulator -avd pixel_6_pro -no-snapshot -no-audio -no-boot-anim -gpu swiftshader_indirect & - adb wait-for-device - adb shell getprop sys.boot_completed - sleep 60 - adb shell input keyevent 82 + # - name: Start emulator + # run: | + # $ANDROID_HOME/emulator/emulator -avd pixel_6_pro -no-snapshot -no-audio -no-boot-anim -gpu swiftshader_indirect & + # adb wait-for-device + # adb shell getprop sys.boot_completed + # sleep 60 + # adb shell input keyevent 82 - - name: Disable animations - run: | - adb shell settings put global window_animation_scale 0.0 - adb shell settings put global transition_animation_scale 0.0 - adb shell settings put global animator_duration_scale 0.0 + # - name: Disable animations + # run: | + # adb shell settings put global window_animation_scale 0.0 + # adb shell settings put global transition_animation_scale 0.0 + # adb shell settings put global animator_duration_scale 0.0 - # - name: Download Android APK - # uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 - # with: - # # name: android-build-apk-${{ github.run_id }} - # name: android-build-apk-9414649994 - # path: android/app/build/outputs/apk/ + # # - name: Download Android APK + # # uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 + # # with: + # # # name: android-build-apk-${{ github.run_id }} + # # name: android-build-apk-9414649994 + # # path: android/app/build/outputs/apk/ - - name: Start React Native Metro Server - run: npm run start & + # - name: Start React Native Metro Server + # run: npm run start & - - name: Install Detox Dependencies - run: cd detox && npm i + # - name: Install Detox Dependencies + # run: cd detox && npm i - - name: Run Detox Tests - run: | - cd detox && npm run e2e:android-test -- ${{ matrix.specs }} + # - name: Run Detox Tests + # run: | + # cd detox && npm run e2e:android-test -- ${{ matrix.specs }} - - name: Upload Android Test Report - if: always() - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - name: android-results-${{ matrix.runId }} - path: detox/artifacts + # - name: Upload Android Test Report + # if: always() + # uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + # with: + # name: android-results-${{ matrix.runId }} + # path: detox/artifacts download-e2e-results: runs-on: ubuntu-22.04 needs: - generate-specs - - e2e-android + - e2e-android-on-mac steps: - name: Checkout Repository uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1