E2E Tests #1
Workflow file for this run
This file contains hidden or 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: E2E Tests | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| app: | |
| description: 'Specific app to test (leave empty for all apps)' | |
| required: false | |
| type: string | |
| platform: | |
| description: 'Platform to test' | |
| required: false | |
| default: 'all' | |
| type: choice | |
| options: | |
| - all | |
| - android | |
| - ios | |
| jobs: | |
| discover-apps: | |
| name: Discover Apps | |
| runs-on: ubuntu-latest | |
| outputs: | |
| apps: ${{ steps.set-apps.outputs.apps }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Discover apps | |
| id: set-apps | |
| run: | | |
| # TODO: Implement app discovery logic | |
| # For now, we'll use a static list based on current structure | |
| if [ -n "${{ github.event.inputs.app }}" ]; then | |
| apps='["${{ github.event.inputs.app }}"]' | |
| else | |
| apps='["playground"]' | |
| fi | |
| echo "apps=$apps" >> $GITHUB_OUTPUT | |
| echo "Discovered apps: $apps" | |
| e2e-android: | |
| name: E2E Android - ${{ matrix.app }} | |
| runs-on: ubuntu-latest | |
| needs: discover-apps | |
| if: ${{ github.event.inputs.platform == 'all' || github.event.inputs.platform == 'android' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| app: ${{ fromJson(needs.discover-apps.outputs.apps) }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '18' | |
| cache: 'pnpm' | |
| - name: Install pnpm | |
| uses: pnpm/action-setup@v2 | |
| with: | |
| version: latest | |
| - name: Install dependencies | |
| run: | | |
| pnpm install | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v3 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| - name: Build Android app | |
| working-directory: apps/${{ matrix.app }} | |
| run: | | |
| pnpm nx run @react-native-harness/${{ matrix.app }}:build-android | |
| - name: Install Android app | |
| working-directory: apps/${{ matrix.app }} | |
| run: | | |
| pnpm nx run @react-native-harness/${{ matrix.app }}:install-android | |
| - name: Run E2E tests | |
| uses: reactivecircus/android-emulator-runner@v2 | |
| with: | |
| api-level: 35 | |
| arch: x86_64 | |
| profile: Pixel_8_API_35 | |
| script: pnpm nx run @react-native-harness/${{ matrix.app }}:start --args='test android-native' | |
| - name: Upload test results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: e2e-results-android-${{ matrix.app }} | |
| path: test-results/ | |
| retention-days: 7 | |
| e2e-ios: | |
| name: E2E iOS - ${{ matrix.app }} | |
| runs-on: macos-latest | |
| needs: discover-apps | |
| if: ${{ github.event.inputs.platform == 'all' || github.event.inputs.platform == 'ios' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| app: ${{ fromJson(needs.discover-apps.outputs.apps) }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '18' | |
| cache: 'pnpm' | |
| - name: Install pnpm | |
| uses: pnpm/action-setup@v2 | |
| with: | |
| version: latest | |
| - name: Install dependencies | |
| run: | | |
| # TODO: Install project dependencies | |
| echo "Installing dependencies for ${{ matrix.app }}" | |
| - name: Run E2E tests | |
| run: | | |
| # TODO: Run E2E tests on iOS | |
| echo "Running E2E tests for ${{ matrix.app }} on iOS" | |
| - name: Upload test results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: e2e-results-ios-${{ matrix.app }} | |
| path: test-results/ | |
| retention-days: 7 | |
| e2e-summary: | |
| name: E2E Test Summary | |
| runs-on: ubuntu-latest | |
| needs: [e2e-android, e2e-ios] | |
| if: always() | |
| steps: | |
| - name: Check test results | |
| run: | | |
| # TODO: Aggregate and report test results | |
| echo "E2E test summary:" | |
| echo "Android tests: ${{ needs.e2e-android.result }}" | |
| echo "iOS tests: ${{ needs.e2e-ios.result }}" | |
| if [[ "${{ needs.e2e-android.result }}" == "failure" || "${{ needs.e2e-ios.result }}" == "failure" ]]; then | |
| echo "Some E2E tests failed" | |
| exit 1 | |
| else | |
| echo "All E2E tests passed" | |
| fi |