Skip to content

Add workflow to run detox Android tests #159

Add workflow to run detox Android tests

Add workflow to run detox Android tests #159

Workflow file for this run

name: Detox E2E Tests
on:
push:
branches:
- main
pull_request:
branches:
- ios_detox_job
- main
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
env:
DEVICE_NAME: "iPhone 15 Pro"
DEVICE_OS_VERSION: "iOS 17.2"
BRANCH: ${{ github.head_ref || github.ref_name }}
BUILD_ID: ${{ github.run_id }}
COMMIT_HASH: ${{ github.sha }}
AWS_REGION: 'us-east-1'
DETOX_AWS_S3_BUCKET: 'mattermost-detox-report'
DETOX_AWS_ACCESS_KEY_ID: ${{ secrets.MM_MOBILE_DETOX_AWS_ACCESS_KEY_ID }}
DETOX_AWS_SECRET_ACCESS_KEY: ${{ secrets.MM_MOBILE_DETOX_AWS_SECRET_ACCESS_KEY }}
HEADLESS: 'false'
TYPE: 'PR'
PULL_REQUEST: 'https://github.com/mattermost/mattermost-mobile/pull/7822'
ZEPHYR_ENABLE: false
JIRA_PROJECT_KEY: 'MM'
ZEPHYR_API_KEY: ${{ secrets.MM_MOBILE_E2E_ZEPHYR_API_KEY }}
ZEPHYR_FOLDER_ID: '3233873'
TEST_CYCLE_LINK_PREFIX: ${{ secrets.MM_MOBILE_E2E_TEST_CYCLE_LINK_PREFIX }}
WEBHOOK_URL: ${{ secrets.MM_MOBILE_E2E_WEBHOOK_URL }}
FAILURE_MESSAGE: "Something has failed"
jobs:
generate-specs:
runs-on: ubuntu-22.04
outputs:
specs: ${{ steps.generate-specs.outputs.specs }}
steps:
- name: Checkout Repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Generate Test Specs
id: generate-specs
uses: ./.github/actions/generate-specs
with:
parallelism: 10
directory: detox/e2e
search_path: test
# build-ios-simulator:
# runs-on: macos-14-large
# steps:
# - name: Checkout Repository
# uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
# - name: Prepare iOS Build
# uses: ./.github/actions/prepare-ios-build
# - name: Build iOS Simulator
# env:
# TAG: "${{ github.ref_name }}"
# AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_BETA_AWS_ACCESS_KEY_ID }}"
# AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_BETA_AWS_SECRET_ACCESS_KEY }}"
# GITHUB_TOKEN: "${{ secrets.MM_MOBILE_GITHUB_TOKEN }}"
# run: bundle exec fastlane ios simulator --env ios.simulator || true
# working-directory: ./fastlane
# - name: Upload iOS Simulator Build
# uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
# with:
# name: ios-build-simulator-${{ github.run_id }}
# path: Mattermost-simulator-x86_64.app.zip
# e2e-ios:
# env:
# IOS: true
# runs-on: macos-14-large
# name: ios-detox-e2e-${{ matrix.runId }}
# needs:
# - generate-specs
# - build-ios-simulator
# strategy:
# fail-fast: false
# matrix: ${{ fromJSON(needs.generate-specs.outputs.specs) }}
# steps:
# - name: Checkout Repository
# uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
# - name: Set Build ID
# run: echo "BUILD_ID=${{ github.run_id }}-${{ env.BUILD_SUFFIX }}" >> $GITHUB_ENV
# - name: Install Homebrew Dependencies
# run: |
# brew tap wix/brew
# brew install applesimutils
# - name: Download iOS Simulator Build
# uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
# with:
# name: ios-build-simulator-${{ github.run_id }}
# path: mobile-artifacts
# - name: Unzip iOS Simulator Build
# run: unzip -o mobile-artifacts/*.zip -d mobile-artifacts/
# - name: Start React Native Metro Server
# run: npm run start &
# - name: Install Detox Dependencies
# run: cd detox && npm ci
# - name: Run Detox E2E Tests
# run: cd detox && npm run e2e:ios-test -- ${{ matrix.specs }}
# - name: Upload iOS Test Report
# if: always()
# uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
# with:
# name: ios-results-${{ matrix.runId }}
# path: detox/artifacts/
build-android-apk:
runs-on: ubuntu-22.04
steps:
- name: Checkout Repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Free up space on the runner
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: ci/prepare-android-build
uses: ./.github/actions/prepare-android-build
env:
STORE_FILE: "${{ secrets.MM_MOBILE_STORE_FILE }}"
STORE_ALIAS: "${{ secrets.MM_MOBILE_STORE_ALIAS }}"
STORE_PASSWORD: "${{ secrets.MM_MOBILE_STORE_PASSWORD }}"
MATTERMOST_BUILD_GH_TOKEN: "${{ secrets.MATTERMOST_BUILD_GH_TOKEN }}"
- name: Install Detox dependencies
run: cd detox && npm ci
- name: Build android apk
run: |
cd detox
npm run e2e:android-build
- name: Upload Android APK
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: android-build-apk-${{ github.run_id }}
path: android/app/build
# build-android-apk:
# runs-on: ubuntu-22.04
# steps:
# - name: ci/checkout-repo
# uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
# with:
# ref: ${{ github.event.pull_request.head.sha }}
# - name: ci/prepare-android-build
# uses: ./.github/actions/prepare-android-build
# env:
# STORE_FILE: "${{ secrets.MM_MOBILE_STORE_FILE }}"
# STORE_ALIAS: "${{ secrets.MM_MOBILE_STORE_ALIAS }}"
# STORE_PASSWORD: "${{ secrets.MM_MOBILE_STORE_PASSWORD }}"
# MATTERMOST_BUILD_GH_TOKEN: "${{ secrets.MATTERMOST_BUILD_GH_TOKEN }}"
# - name: ci/build-android-pr
# env:
# BRANCH_TO_BUILD: "${{ github.event.pull_request.head.ref }}"
# AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_PR_AWS_ACCESS_KEY_ID }}"
# AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_PR_AWS_SECRET_ACCESS_KEY }}"
# MATTERMOST_WEBHOOK_URL: "${{ secrets.MM_MOBILE_PR_MATTERMOST_WEBHOOK_URL }}"
# run: bundle exec fastlane android build --env android.pr
# working-directory: ./fastlane
# - name: ci/upload-android-pr-build
# uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
# with:
# name: android-build-apk-${{ github.run_id }}
# path: "*.apk"
e2e-android:
env:
IOS: false
GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4096m"
API_LEVEL: 31
ANDROID_EMULATOR_IMAGE: 'system-images;android-33;google_apis;x86_64'
ANDROID_EMULATOR_NAME: 'pixel_6_pro_android_33'
ANDROID_EMULATOR_DEVICE: 'pixel_6_pro'
runs-on: ubuntu-22.04
name: android-detox-e2e-${{ matrix.runId }}
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 required libraries for emulator
run: sudo apt-get install libpulse0 libpulse-dev
- name: ci/prepare-node-deps
uses: ./.github/actions/prepare-node-deps
- name: Set Build ID
run: echo "BUILD_ID=${{ github.run_id }}-${{ env.BUILD_SUFFIX }}" >> $GITHUB_ENV
- name: Set up Android SDK
uses: android-actions/setup-android@v2
with:
android-sdk-tools: 'latest'
android-emulator-image: ${{ env.ANDROID_EMULATOR_IMAGE }}
android-emulator-name: ${{ env.ANDROID_EMULATOR_NAME }}
android-emulator-device: ${{ env.ANDROID_EMULATOR_DEVICE }}
- name: Free up space on the runner
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- 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: Gradle cache
uses: gradle/actions/setup-gradle@v3
- name: AVD cache
uses: actions/cache@v4
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-${{ env.API_LEVEL }}
- name: Download Android APK
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
with:
name: android-build-apk-${{ github.run_id }}
path: android/app/build
- name: List files in android/app/build
run: ls -l android/app/build
- name: Start React Native Metro Server
run: npm run start &
- name: Install Detox Dependencies
run: cd detox && npm i
- name: Detox test
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 31
arch: x86_64
avd-name: pixel_6_pro
script: 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
download-e2e-results:
runs-on: ubuntu-22.04
if: always()
needs:
- generate-specs
# - e2e-ios
- e2e-android
steps:
- name: Checkout Repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: ci/prepare-node-deps
uses: ./.github/actions/prepare-node-deps
- name: Create artifacts directory
run: |
mkdir -p detox/artifacts/
- name: Download All Android Artifacts
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
with:
path: detox/artifacts/
pattern: android-results-*
- name: Save report Detox Dependencies
run: |
cd detox
npm ci
npm run e2e:save-report
env:
IOS: false