Skip to content

ci(e2e): run tests in pipeline #2

ci(e2e): run tests in pipeline

ci(e2e): run tests in pipeline #2

Workflow file for this run

name: 🧪 E2E Tests
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
APP_VARIANT: internal
CI: true
jobs:
e2e-test:
name: Run ${{ matrix.test }} on ${{ matrix.platform }}
strategy:
matrix:
include:
# - platform: android
# os: macos-latest
# test: smoke
# - platform: android
# os: macos-latest
# test: verification
- platform: ios
os: macos-latest
test: smoke
# - platform: ios
# os: macos-latest
# test: verification
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Cache Yarn dependencies
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install dependencies
run: yarn
- name: Install Maestro
run: |
curl -Ls "https://get.maestro.mobile.dev" | bash
export PATH="$PATH":"$HOME/.maestro/bin"
- name: Decrypt GPG secure files
run: |
brew install [email protected]
echo ${{ secrets.SUPER_SECRET_PASSWORD }} | gpg1 --no-tty --passphrase-fd 0 google-services.json.gpg
- name: Build Expo app prebuild
run: yarn expo prebuild --platform ${{ matrix.platform }}
- name: Setup iOS Simulator
if: matrix.platform == 'ios'
run: |
DEVICE_ID=$(xcrun xctrace list devices | grep -m 1 "iPhone" | awk '{print $NF}' | tr -d '()')
xcrun simctl boot $DEVICE_ID || true
- name: Setup Android Emulator
if: matrix.platform == 'android'
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 31
script: echo "Emulator started"
- name: Build and Run iOS App
if: matrix.platform == 'ios'
run: yarn ios
- name: Build and Run Android App
if: matrix.platform == 'android'
run: yarn android
- name: Wait for App to be ready
run: sleep 30
- name: Run Maestro Tests
run: |
export PATH="$PATH":"$HOME/.maestro/bin"
yarn test:e2e:${{ matrix.test }}
- name: Upload Test Results
if: always()
uses: actions/upload-artifact@v4
with:
name: maestro-${{ matrix.test }}-${{ matrix.platform }}
path: |
.maestro/test-results
.maestro/logs