Add workflow to run detox Android tests #155
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/outputs/apk/debug/app-debug.apk | |
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: 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: create AVD and generate snapshot for caching | |
# if: steps.avd-cache.outputs.cache-hit != 'true' | |
# uses: reactivecircus/android-emulator-runner@v2 | |
# with: | |
# api-level: ${{ env.API_LEVEL }} | |
# force-avd-creation: false | |
# emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
# disable-animations: false | |
# script: echo "Generated AVD snapshot for caching." | |
- name: Download Android APK | |
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 | |
with: | |
name: android-build-apk-${{ github.run_id }} | |
path: android/app/build/outputs/apk/debug/ | |
- 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: Run Detox E2E Tests | |
# run: cd detox && npm run e2e:android-test -- ${{ matrix.specs }} | |
# - name: Run Detox E2E Tests | |
# uses: reactivecircus/android-emulator-runner@v2 | |
# with: | |
# api-level: ${{ env.API_LEVEL }} | |
# force-avd-creation: false | |
# emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
# disable-animations: true | |
# 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 |