Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Testing #8536

Draft
wants to merge 98 commits into
base: main
Choose a base branch
from
Draft

Testing #8536

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
bd59982
init
yasserfaraazkhan Jan 30, 2025
4cad4c2
test-1
yasserfaraazkhan Jan 30, 2025
6bdfe5d
test-2
yasserfaraazkhan Jan 30, 2025
16e7618
test-3
yasserfaraazkhan Jan 30, 2025
92aa984
test-4
yasserfaraazkhan Jan 30, 2025
fd40f4f
Revert "test-4"
yasserfaraazkhan Jan 30, 2025
062d702
test-5
yasserfaraazkhan Jan 30, 2025
6196ef2
test-6
yasserfaraazkhan Jan 30, 2025
5fd5de9
test-7
yasserfaraazkhan Jan 30, 2025
2277b3f
test-8
yasserfaraazkhan Jan 30, 2025
57e6345
test-9
yasserfaraazkhan Jan 30, 2025
f39a665
test-10
yasserfaraazkhan Jan 31, 2025
92ee7bd
Manually Install Emulator Dependencies
yasserfaraazkhan Jan 31, 2025
811157c
Use preinstalled emulator and change the archi to armv8
yasserfaraazkhan Jan 31, 2025
d1a416f
use v8 archi emulator
yasserfaraazkhan Jan 31, 2025
b9d9d4b
use macos-14-arm
yasserfaraazkhan Jan 31, 2025
205196c
use macos-14-arm
yasserfaraazkhan Jan 31, 2025
d807e43
Java 8
yasserfaraazkhan Jan 31, 2025
7598bd3
Java 8 zulu distribution
yasserfaraazkhan Jan 31, 2025
170fc16
use asop
yasserfaraazkhan Jan 31, 2025
8e66c48
java 11 and asop
yasserfaraazkhan Jan 31, 2025
196c32d
java 17 and asop
yasserfaraazkhan Jan 31, 2025
16e8e97
wait for emulator
yasserfaraazkhan Jan 31, 2025
ae09543
with google_apis
yasserfaraazkhan Jan 31, 2025
f978fcb
with google_apis_playstore
yasserfaraazkhan Jan 31, 2025
421efef
with accel off
yasserfaraazkhan Jan 31, 2025
569944c
with hvf
yasserfaraazkhan Jan 31, 2025
c666be8
set 2 cores
yasserfaraazkhan Jan 31, 2025
8b8344a
accel off
yasserfaraazkhan Jan 31, 2025
380857b
macos-13
yasserfaraazkhan Jan 31, 2025
7b67af0
restart adb server
yasserfaraazkhan Jan 31, 2025
821a0cd
use reactivecircus/android-emulator-runner@v2
yasserfaraazkhan Jan 31, 2025
22c6087
use reactivecircus/android-emulator-runner@v2 with no snapshot
yasserfaraazkhan Jan 31, 2025
d7a1279
remove reactivecircus
yasserfaraazkhan Jan 31, 2025
f3befde
try reactivecircus again with options
yasserfaraazkhan Jan 31, 2025
4419d72
add prepare-android-build step
yasserfaraazkhan Jan 31, 2025
1e24511
custom avd creation
yasserfaraazkhan Feb 1, 2025
065d6e4
custom avd creation
yasserfaraazkhan Feb 1, 2025
736663a
custom avd creation
yasserfaraazkhan Feb 1, 2025
07882e6
kill and start adb server
yasserfaraazkhan Feb 1, 2025
ad141f2
agressive adb clean up
yasserfaraazkhan Feb 1, 2025
b1bcf1e
try linux
yasserfaraazkhan Feb 1, 2025
1c84479
try linux
yasserfaraazkhan Feb 1, 2025
e907a4a
install sdk
yasserfaraazkhan Feb 1, 2025
e2a584f
fix adb path
yasserfaraazkhan Feb 1, 2025
6bb1590
fix adb path
yasserfaraazkhan Feb 1, 2025
938bd11
wait 5m for emulator to boot and run tests
yasserfaraazkhan Feb 1, 2025
c614640
wait 5m for emulator to boot and run tests
yasserfaraazkhan Feb 1, 2025
d961056
run on macos-latest
yasserfaraazkhan Feb 2, 2025
d66ae09
fix path on macos-latest
yasserfaraazkhan Feb 2, 2025
290f7c7
fix path on macos-latest
yasserfaraazkhan Feb 2, 2025
6909b0d
fix path on macos-latest
yasserfaraazkhan Feb 2, 2025
d539545
fix path on macos-latest
yasserfaraazkhan Feb 2, 2025
6481e2a
fix path on macos-latest
yasserfaraazkhan Feb 2, 2025
aec065c
use ubuntu 8 cores
yasserfaraazkhan Feb 2, 2025
2b1db9f
enable KVM
yasserfaraazkhan Feb 2, 2025
b73a9b5
add sdkmanager in path
yasserfaraazkhan Feb 2, 2025
7c272c3
add sdkmanager in path
yasserfaraazkhan Feb 2, 2025
bb14689
fix avd home location
yasserfaraazkhan Feb 2, 2025
222d392
fix avd home location
yasserfaraazkhan Feb 2, 2025
2e2c5cb
fix avd home location
yasserfaraazkhan Feb 2, 2025
e49af40
install linux dependencies
yasserfaraazkhan Feb 2, 2025
8ae8e34
wait for emulator boot
yasserfaraazkhan Feb 2, 2025
d3eafe1
wait for emulator boot
yasserfaraazkhan Feb 2, 2025
a50a746
upload report
yasserfaraazkhan Feb 2, 2025
0a243ba
upload report
yasserfaraazkhan Feb 2, 2025
7e1e7e3
upload report
yasserfaraazkhan Feb 2, 2025
d45e239
increase wait time for server
yasserfaraazkhan Feb 2, 2025
305df44
Add env variables in the android job
yasserfaraazkhan Feb 2, 2025
1318f4c
Start server from the script
yasserfaraazkhan Feb 2, 2025
712be8b
Run all tests
yasserfaraazkhan Feb 2, 2025
5cb7ca1
increase time out
yasserfaraazkhan Feb 2, 2025
2dcffd5
Run for api 33
yasserfaraazkhan Feb 2, 2025
d65b704
set cores 5
yasserfaraazkhan Feb 2, 2025
3515d59
fix emulator name
yasserfaraazkhan Feb 2, 2025
5822ec5
set RUNNING_ENE=true
yasserfaraazkhan Feb 2, 2025
ee005a1
download whole build file
yasserfaraazkhan Feb 2, 2025
9bcf094
download whole build file
yasserfaraazkhan Feb 2, 2025
389de3d
screen record
yasserfaraazkhan Feb 2, 2025
fa650a5
screen record
yasserfaraazkhan Feb 2, 2025
578a60d
install app in emulator
yasserfaraazkhan Feb 2, 2025
0aff8a9
wait for metro server
yasserfaraazkhan Feb 2, 2025
04aa89f
test launchAPP
yasserfaraazkhan Feb 2, 2025
1c2471a
launch app with timeout
yasserfaraazkhan Feb 2, 2025
a5f6c88
reverse port forwarding
yasserfaraazkhan Feb 3, 2025
ba9dd11
Fix report
yasserfaraazkhan Feb 3, 2025
b20d3e7
Fix report
yasserfaraazkhan Feb 3, 2025
2c40864
Fix report
yasserfaraazkhan Feb 3, 2025
0bc9c8f
debug report
yasserfaraazkhan Feb 3, 2025
b582bef
modular shell script
yasserfaraazkhan Feb 3, 2025
ed24a92
modular shell script
yasserfaraazkhan Feb 3, 2025
3da2fae
modular shell script
yasserfaraazkhan Feb 3, 2025
51e9d5c
check running tests
yasserfaraazkhan Feb 3, 2025
bcdaa00
check running tests
yasserfaraazkhan Feb 3, 2025
5ed87cc
add more test files
yasserfaraazkhan Feb 3, 2025
33ebb83
add more test files
yasserfaraazkhan Feb 3, 2025
39fe54a
fix reporting
yasserfaraazkhan Feb 3, 2025
c020bc8
Check Running e2e var is picked up
yasserfaraazkhan Feb 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 148 additions & 13 deletions .github/workflows/e2e-android-detox.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,42 @@
name: Detox E2E Android Tests PR

on:
push:
branches:
- test_android_e2e
pull_request:
branches:
- main
- test_android_e2e
types:
- labeled

env:
AWS_REGION: "us-east-1"
ADMIN_EMAIL: ${{ secrets.MM_MOBILE_E2E_ADMIN_EMAIL }}
ADMIN_USERNAME: ${{ secrets.MM_MOBILE_E2E_ADMIN_USERNAME }}
ADMIN_PASSWORD: ${{ secrets.MM_MOBILE_E2E_ADMIN_PASSWORD }}
BRANCH: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref_name }}
COMMIT_HASH: ${{ github.sha }}
DEVICE_NAME: ${{ inputs.ios_device_name }}
DEVICE_OS_VERSION: ${{ inputs.ios_device_os_name }}
DETOX_AWS_S3_BUCKET: "mattermost-detox-report"
HEADLESS: "false"
TYPE: ${{ inputs.run-type }}
PULL_REQUEST: "https://github.com/mattermost/mattermost-mobile/pull/${{ github.event.number }}"
SITE_1_URL: ${{ inputs.MM_TEST_SERVER_URL || 'https://mobile-e2e-site-1.test.mattermost.cloud' }}
SITE_2_URL: "https://mobile-e2e-site-2.test.mattermost.cloud"
SITE_3_URL: "https://mobile-e2e-site-3.test.mattermost.cloud"
ZEPHYR_ENABLE: ${{ inputs.record_tests_in_zephyr }}
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"
RUNNING_E2E: "true"
IOS: "false"

concurrency:
group: "${{ github.workflow }}-${{ github.event.pull_request.number }}-${{ github.event.label.name }}"
cancel-in-progress: true
Expand Down Expand Up @@ -48,17 +78,6 @@ jobs:
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: ${{ runner.os }}-gradle-

- name: Validate Gradle wrapper
uses: gradle/actions/wrapper-validation@v3

- name: Inject Detox settings
run: cd detox && npm run e2e:android-inject-settings

- name: Update minSdkVersion for react-native-image-picker
run: |
sed -i 's/minSdkVersion 21/minSdkVersion 23/' ./node_modules/react-native-image-picker/android/build.gradle
cat ./node_modules/react-native-image-picker/android/build.gradle | grep minSdkVersion

- name: Detox build
run: |
cd detox
Expand All @@ -69,5 +88,121 @@ jobs:
- name: ci/upload-android-pr-build
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: android-build-apk-${{ github.run_id }}
path: "android/app/build/outputs/apk/**/app-*.apk"
name: android-build-files-${{ github.run_id }}
path: "android/app/build/**/*"

detox-android-e2e:
runs-on: ubuntu-latest-8-cores
# needs: build-android-apk
env:
ANDROID_HOME: /usr/local/lib/android/sdk
ANDROID_SDK_ROOT: /usr/local/lib/android/sdk

steps:
- name: ci/checkout-repo
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
ref: ${{ github.event.pull_request.head.sha }}

- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y libpulse0
sudo apt-get install -y scrot ffmpeg xvfb

- 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-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 Dependencies
run: |
cd detox
npm install

- name: Create destination path
run: mkdir -p android/app/build

- 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/2523423750/zip \
--output android/app/build/artifact.zip

- name: Unzip artifact
run: |
unzip android/app/build/artifact.zip -d android/app/build
rm -rf android/app/build/artifact.zip

- name: Set up Android SDK
run: |
export ANDROID_HOME=/usr/local/lib/android/sdk
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$PATH
echo "ANDROID_HOME=$ANDROID_HOME" >> $GITHUB_ENV
echo "PATH=$PATH" >> $GITHUB_ENV

- name: Start Xvfb
run: |
Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99
echo "DISPLAY=:99" >> $GITHUB_ENV

- name: Accept Android licenses
run: |
yes | sdkmanager --licenses || true

- name: Install Android system image
run: |
sdkmanager "system-images;android-33;default;x86_64"
sdkmanager "platform-tools" "emulator"

- name: Create and start Android emulator
run: |
cd detox
chmod +x ./create_android_emulator.sh
./create_android_emulator.sh

- name: Generate Report Path
id: s3
run: |
path="${{ github.run_id }}/${{ github.sha }}"
echo "path=$(echo "${path}" | sed 's/\./-/g')" >> ${GITHUB_OUTPUT}

- name: Save report Detox Dependencies
id: report-link
run: |
cd detox
npm run e2e:save-report
env:
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 }}
IOS: false
BUILD_ID: ${{ github.run_id }}
REPORT_PATH: ${{ steps.s3.outputs.path }}
## These are needed for the MM Webhook report
COMMIT_HASH: ${{ github.sha }}
BRANCH: ${{ github.ref }}

- name: Stop Android emulator
if: always() # Ensure the emulator is stopped even if the tests fail
run: |
adb emu kill

- name: Upload android Test Report
if: always()
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: android-results-${{ github.run_id }}
path: detox/artifacts/
2 changes: 1 addition & 1 deletion detox/.detoxrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
"android.emulator": {
"type": "android.emulator",
"device": {
"avdName": "detox_pixel_4_xl_api_31"
"avdName": "detox_pixel_4_xl_api_33"
}
}
},
Expand Down
39 changes: 26 additions & 13 deletions detox/README.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,49 @@
# How to Run Detox Tests

## Android
This guide will help you set up and run Detox tests for your project.

### Install Dependencies
## Install Dependencies

From the root directory, run the following command to install the necessary dependencies:
First, navigate to the root directory of your project and install the necessary dependencies by running:

```sh
npm install
```

### Inject Detox Settings
navigate to the `detox` folder and run `npm install`

## Android

### Build Detox Android App

To inject the Detox settings into your project, navigate to the `detox` directory and run the following command:
To build the Detox Android app, navigate to the `detox` folder and run:

```sh
npm run inject-detox-settings
npm run e2e:android-build
```

### Update `minSdkVersion` for `react-native-image-picker`
### Run Detox Android Tests

On macOS machines, update the `minSdkVersion` of `react-native-image-picker` to 23 by running the following command from the root directory.
This is required for Detox to build the test apk targeting android API 31 or higher.
To execute the Detox tests on Android, navigate to the `detox` folder and run:

```sh
sed -i '' 's/minSdkVersion 21/minSdkVersion 23/' ./node_modules/react-native-image-picker/android/build.gradle
npm run e2e:android-test
```

### Build detox android app
## iOS

### Build iOS Simulator

From the `detox` folder run:
To build the iOS simulator for Detox, navigate to the `detox` folder and run:

```sh
npm run e2e:ios-build
```
npm run e2e:android-build

### Run iOS Tests

To execute the Detox tests on iOS, navigate to the `detox` folder and run:

```sh
npm run e2e:ios-test
```
Loading
Loading