name: Updates e2e on: workflow_dispatch: {} pull_request: paths: - .github/workflows/updates-e2e.yml - packages/expo-json-utils/** - packages/expo-manifests/** - packages/expo-modules-core/** - packages/expo-structured-headers/** - packages/expo-updates-interface/** - packages/expo-updates/** - packages/expo/android/** - packages/expo/ios/** push: branches: [main, 'sdk-*'] paths: - .github/workflows/updates-e2e.yml - packages/expo-json-utils/** - packages/expo-manifests/** - packages/expo-modules-core/** - packages/expo-structured-headers/** - packages/expo-updates-interface/** - packages/expo-updates/** - packages/expo/android/** - packages/expo/ios/** concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: android: runs-on: macos-11 env: UPDATES_PORT: 4747 steps: - name: Check out repository uses: actions/checkout@v2 with: submodules: false - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - run: yarn install --frozen-lockfile - uses: actions/cache@v2 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('android/*.gradle*') }} restore-keys: | ${{ runner.os }}-gradle- - run: yarn global add expo-cli - run: echo "$(yarn global bin)" >> $GITHUB_PATH - name: Init new expo app working-directory: ../ run: expo-cli init updates-e2e --yes - name: Add local expo-updates and dependencies working-directory: ../updates-e2e run: yarn add file:../expo/packages/expo-updates file:../expo/packages/expo file:../expo/packages/expo-eas-client file:../expo/packages/expo-modules-core file:../expo/packages/expo-json-utils file:../expo/packages/expo-manifests file:../expo/packages/expo-structured-headers file:../expo/packages/expo-updates-interface - name: Setup app.config.json working-directory: ../updates-e2e run: echo "{\"name\":\"updates-e2e\",\"plugins\":[\"expo-updates\"],\"android\":{\"package\":\"dev.expo.updatese2e\"},\"ios\":{\"bundleIdentifier\":\"dev.expo.updatese2e\"}}" > app.config.json - name: Prebuild working-directory: ../updates-e2e run: expo-cli prebuild # TODO: remove once the local template projects are using SDK 45 packages - name: Manually bump kotlin version (workaround) working-directory: ../updates-e2e run: sed -i -e 's/\(buildToolsVersion = "[0-9.]*"\)/\1\nkotlinVersion = "1.6.10"/' ./android/build.gradle - name: Copy App.js from test fixtures working-directory: ../updates-e2e run: cp ../expo/packages/expo-updates/e2e/__tests__/fixtures/App.js . - name: Set port in App.js working-directory: ../updates-e2e run: sed -i -e "s/UPDATES_PORT/$UPDATES_PORT/" ./App.js - name: Assemble release APK working-directory: ../updates-e2e/android run: ./gradlew assembleRelease - name: Copy APK to working directory run: cp -R ../updates-e2e/android/app/build/outputs/apk artifact - name: Upload test APK artifact uses: actions/upload-artifact@v2 with: name: updates-e2e-android-apk path: artifact - name: Get test APK path id: test-apk-path working-directory: ../updates-e2e/android/app/build/outputs/apk/release run: echo "::set-output name=dir::$(pwd)" - name: Run tests env: TEST_APK_PATH: '${{ steps.test-apk-path.outputs.dir }}/app-release.apk' timeout-minutes: 10 uses: reactivecircus/android-emulator-runner@v2 with: api-level: 30 arch: x86_64 script: yarn test --config e2e/jest.config.js working-directory: packages/expo-updates