Skip to content

fix(e2e): add build-tools 30.0.3 and platform-tools hash override #24

fix(e2e): add build-tools 30.0.3 and platform-tools hash override

fix(e2e): add build-tools 30.0.3 and platform-tools hash override #24

name: E2E Mobile Tests
on:
# Weekly schedule - Monday 9am UTC
schedule:
- cron: '0 9 * * 1'
# TODO: Remove before merging - for testing only
push:
branches:
- feat/mobile-devtools-e2e-integration
# Manual trigger
workflow_dispatch:
inputs:
test_matrix:
description: 'Test matrix to run'
required: false
type: choice
options:
- all
- android
- ios
- compat
- latest
default: 'all'
# Callable by other workflows (e.g., release)
workflow_call:
concurrency:
group: e2e-mobile-${{ github.ref }}
cancel-in-progress: true
jobs:
e2e-android-compat:
name: E2E Android (RN 0.72)
runs-on: ubuntu-24.04
timeout-minutes: 30
if: |
inputs.test_matrix == 'all' ||
inputs.test_matrix == 'android' ||
inputs.test_matrix == 'compat' ||
github.event_name != 'workflow_dispatch'
steps:
- uses: actions/checkout@v6
- 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: Install devbox
uses: jetify-com/devbox-install-action@v0.15.0
with:
project-path: examples/E2E-compat
- name: Run Android E2E Tests
working-directory: examples/E2E-compat
run: devbox run --pure test:e2e:android
env:
DETOX_AVD: medium_phone_API33_x86_64
- name: Upload test results
if: always()
uses: actions/upload-artifact@v7
with:
name: e2e-android-compat-results
path: examples/E2E-compat/reports/
if-no-files-found: ignore
e2e-ios-compat:
name: E2E iOS (RN 0.72)
runs-on: macos-14
timeout-minutes: 30
if: |
inputs.test_matrix == 'all' ||
inputs.test_matrix == 'ios' ||
inputs.test_matrix == 'compat' ||
github.event_name != 'workflow_dispatch'
steps:
- uses: actions/checkout@v6
- name: Install devbox
uses: jetify-com/devbox-install-action@v0.15.0
with:
project-path: examples/E2E-compat
- name: Run iOS E2E Tests
working-directory: examples/E2E-compat
run: devbox run --pure test:e2e:ios
- name: Upload test results
if: always()
uses: actions/upload-artifact@v7
with:
name: e2e-ios-compat-results
path: examples/E2E-compat/reports/
if-no-files-found: ignore
e2e-android-latest:
name: E2E Android (RN 0.84)
runs-on: ubuntu-24.04
timeout-minutes: 30
continue-on-error: true # TODO: Remove when RN 0.84 support is complete
if: |
inputs.test_matrix == 'all' ||
inputs.test_matrix == 'android' ||
inputs.test_matrix == 'latest' ||
github.event_name != 'workflow_dispatch'
steps:
- uses: actions/checkout@v6
- 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: Install devbox
uses: jetify-com/devbox-install-action@v0.15.0
with:
project-path: examples/E2E-latest
- name: Run Android E2E Tests
working-directory: examples/E2E-latest
run: devbox run --pure test:e2e:android
env:
DETOX_AVD: medium_phone_API35_x86_64
- name: Upload test results
if: always()
uses: actions/upload-artifact@v7
with:
name: e2e-android-latest-results
path: examples/E2E-latest/reports/
if-no-files-found: ignore
e2e-ios-latest:
name: E2E iOS (RN 0.84)
runs-on: macos-14
timeout-minutes: 30
continue-on-error: true # TODO: Remove when RN 0.84 support is complete
if: |
inputs.test_matrix == 'all' ||
inputs.test_matrix == 'ios' ||
inputs.test_matrix == 'latest' ||
github.event_name != 'workflow_dispatch'
steps:
- uses: actions/checkout@v6
- name: Install devbox
uses: jetify-com/devbox-install-action@v0.15.0
with:
project-path: examples/E2E-latest
- name: Run iOS E2E Tests
working-directory: examples/E2E-latest
run: devbox run --pure test:e2e:ios
- name: Upload test results
if: always()
uses: actions/upload-artifact@v7
with:
name: e2e-ios-latest-results
path: examples/E2E-latest/reports/
if-no-files-found: ignore
e2e-summary:
name: E2E Test Summary
runs-on: ubuntu-latest
needs:
[e2e-android-compat, e2e-ios-compat, e2e-android-latest, e2e-ios-latest]
if: always()
steps:
- name: Check results
run: |
echo "📊 E2E Test Results:"
echo " Android (RN 0.72): ${{ needs.e2e-android-compat.result }}"
echo " iOS (RN 0.72): ${{ needs.e2e-ios-compat.result }}"
echo " Android (RN 0.84): ${{ needs.e2e-android-latest.result }}"
echo " iOS (RN 0.84): ${{ needs.e2e-ios-latest.result }}"
echo ""
# Check for failures, treating continue-on-error jobs as non-blocking
if [[ "${{ needs.e2e-android-compat.result }}" != "success" && "${{ needs.e2e-android-compat.result }}" != "skipped" ]] || \
[[ "${{ needs.e2e-ios-compat.result }}" != "success" && "${{ needs.e2e-ios-compat.result }}" != "skipped" ]]; then
echo "::error::One or more E2E test suites failed"
echo "::error::Check the individual job logs for details"
exit 1
fi
# Note: android-latest and ios-latest have continue-on-error, so we don't fail on them
if [[ "${{ needs.e2e-android-latest.result }}" == "failure" ]] || \
[[ "${{ needs.e2e-ios-latest.result }}" == "failure" ]]; then
echo "::warning::RN 0.84 tests failed but are allowed to fail (continue-on-error)"
fi
echo "::notice::✅ E2E tests passed successfully!"