Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
82ea3bf
feat: integrate mobile-devtools for E2E testing
abueide Apr 14, 2026
c013dc1
fix: explicitly include android/ios plugins and add --pure mode for CI
abueide Apr 15, 2026
9ae1570
refactor: simplify devbox includes to only react-native plugin
abueide Apr 15, 2026
42d4176
feat: add weekly devbox update workflow
abueide Apr 15, 2026
cf423ac
chore: remove branch ref and test push trigger
abueide Apr 15, 2026
a98899b
test: enable push trigger for E2E workflow on feat branch
abueide Apr 15, 2026
aa3b680
test: make RN 0.84 E2E tests non-blocking
abueide Apr 15, 2026
5a508d9
style: format workflow file (remove trailing spaces)
abueide Apr 15, 2026
74d3153
fix: remove nested devbox run calls in E2E scripts
abueide Apr 15, 2026
c197b8e
fix(e2e): add yarn-berry package to E2E examples
abueide Apr 15, 2026
3665160
fix(e2e): remove --repo-update from pod install commands
abueide Apr 15, 2026
a5b51d6
fix(e2e): use subshells for directory changes
abueide Apr 15, 2026
5882d84
fix(e2e): make Android SDK versions match plugin defaults
abueide Apr 16, 2026
a58894a
fix(ci): resolve Android SDK read-only issue in E2E workflows
Apr 20, 2026
6fc8a3f
fix(ci): resolve Android SDK read-only issue in E2E workflows
Apr 20, 2026
e14d3cf
fix(e2e): Update devbox run command to pass ANDROID_SDK_ROOT via --en…
Apr 20, 2026
f25fa9c
fix(e2e): Update local.properties for writable SDK
Apr 20, 2026
7b9b9aa
fix(e2e): updated devbox.json file and e2e-mobile-tests.yml file
Apr 20, 2026
18cb296
update: e2e-mobile-test.yml file
Apr 20, 2026
d44ec09
fix(e2e): update install required packages step
Apr 20, 2026
09f8609
update: reverted changes done so far in e2e-mobile-test.yml file
Apr 20, 2026
e68e3fe
fix(e2e): update E2E-compat device configs to API 24
abueide Apr 21, 2026
d61ceb8
fix(e2e): add build-tools 30.0.3 and platform-tools hash override
abueide Apr 21, 2026
ee071f8
fix(e2e): use mobile-devtools branch with hash override fix
abueide Apr 21, 2026
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
31 changes: 31 additions & 0 deletions .github/workflows/devbox-update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Devbox Update

on:
# Weekly schedule - Monday 10am UTC
schedule:
- cron: '0 10 * * 1'

# Manual trigger
workflow_dispatch:

concurrency:
group: devbox-update-${{ github.ref }}
cancel-in-progress: true

jobs:
update:
name: Update Devbox Dependencies
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4

- name: Install devbox
uses: jetify-com/devbox-install-action@v0.14.0

- name: Update devbox packages
uses: xiaolutech/devbox-update-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
200 changes: 200 additions & 0 deletions .github/workflows/e2e-mobile-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
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!"
10 changes: 8 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@ jobs:
- name: Test
run: devbox run test

e2e-tests:
name: E2E Mobile Tests
needs: [ci]
if: inputs.type == 'beta' || inputs.type == 'production'
uses: ./.github/workflows/e2e-mobile-tests.yml

release-dryrun:
name: Release (dry-run)
if: inputs.type == 'dry-run'
Expand Down Expand Up @@ -64,7 +70,7 @@ jobs:
release-beta:
name: Release (beta)
if: inputs.type == 'beta'
needs: [ci]
needs: [ci, e2e-tests]
runs-on: ubuntu-latest
environment: Publish-Beta
permissions:
Expand All @@ -91,7 +97,7 @@ jobs:
release-production:
name: Release (production)
if: inputs.type == 'production'
needs: [ci]
needs: [ci, e2e-tests]
runs-on: ubuntu-latest
environment: Publish
permissions:
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,7 @@ AGENTS.md

# Notes and research (not for commit)
notes/

# Devbox runtime data
.devbox/
**/.devbox/
Loading
Loading