1name: Updates e2e 2 3on: 4 workflow_dispatch: {} 5 pull_request: 6 paths: 7 - .github/workflows/updates-e2e.yml 8 - packages/expo-json-utils/** 9 - packages/expo-manifests/** 10 - packages/expo-modules-core/** 11 - packages/expo-structured-headers/** 12 - packages/expo-updates-interface/** 13 - packages/expo-updates/** 14 - packages/expo/android/** 15 - packages/expo/ios/** 16 push: 17 branches: [main, 'sdk-*'] 18 paths: 19 - .github/workflows/updates-e2e.yml 20 - packages/expo-json-utils/** 21 - packages/expo-manifests/** 22 - packages/expo-modules-core/** 23 - packages/expo-structured-headers/** 24 - packages/expo-updates-interface/** 25 - packages/expo-updates/** 26 - packages/expo/android/** 27 - packages/expo/ios/** 28 29concurrency: 30 group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} 31 cancel-in-progress: true 32 33jobs: 34 android: 35 runs-on: macos-11 36 env: 37 UPDATES_PORT: 4747 38 steps: 39 - name: Check out repository 40 uses: actions/checkout@v2 41 with: 42 submodules: false 43 - name: Get yarn cache directory path 44 id: yarn-cache-dir-path 45 run: echo "::set-output name=dir::$(yarn cache dir)" 46 - uses: actions/cache@v2 47 with: 48 path: ${{ steps.yarn-cache-dir-path.outputs.dir }} 49 key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} 50 restore-keys: | 51 ${{ runner.os }}-yarn- 52 - run: yarn install --frozen-lockfile 53 - uses: actions/cache@v2 54 with: 55 path: ~/.gradle/caches 56 key: ${{ runner.os }}-gradle-${{ hashFiles('android/*.gradle*') }} 57 restore-keys: | 58 ${{ runner.os }}-gradle- 59 - run: yarn global add expo-cli 60 - run: echo "$(yarn global bin)" >> $GITHUB_PATH 61 - name: Init new expo app 62 working-directory: ../ 63 run: expo-cli init updates-e2e --yes 64 - name: Add local expo-updates and dependencies 65 working-directory: ../updates-e2e 66 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 67 - name: Setup app.config.json 68 working-directory: ../updates-e2e 69 run: echo "{\"name\":\"updates-e2e\",\"plugins\":[\"expo-updates\"],\"android\":{\"package\":\"dev.expo.updatese2e\"},\"ios\":{\"bundleIdentifier\":\"dev.expo.updatese2e\"}}" > app.config.json 70 - name: Prebuild 71 working-directory: ../updates-e2e 72 run: expo-cli prebuild 73 # TODO: remove once the local template projects are using SDK 45 packages 74 - name: Manually bump kotlin version (workaround) 75 working-directory: ../updates-e2e 76 run: sed -i -e 's/\(buildToolsVersion = "[0-9.]*"\)/\1\nkotlinVersion = "1.6.10"/' ./android/build.gradle 77 - name: Copy App.js from test fixtures 78 working-directory: ../updates-e2e 79 run: cp ../expo/packages/expo-updates/e2e/__tests__/fixtures/App.js . 80 - name: Set port in App.js 81 working-directory: ../updates-e2e 82 run: sed -i -e "s/UPDATES_PORT/$UPDATES_PORT/" ./App.js 83 - name: Assemble release APK 84 working-directory: ../updates-e2e/android 85 run: ./gradlew assembleRelease 86 - name: Copy APK to working directory 87 run: cp -R ../updates-e2e/android/app/build/outputs/apk artifact 88 - name: Upload test APK artifact 89 uses: actions/upload-artifact@v2 90 with: 91 name: updates-e2e-android-apk 92 path: artifact 93 - name: Get test APK path 94 id: test-apk-path 95 working-directory: ../updates-e2e/android/app/build/outputs/apk/release 96 run: echo "::set-output name=dir::$(pwd)" 97 - name: Run tests 98 env: 99 TEST_APK_PATH: '${{ steps.test-apk-path.outputs.dir }}/app-release.apk' 100 timeout-minutes: 10 101 uses: reactivecircus/android-emulator-runner@v2 102 with: 103 api-level: 30 104 arch: x86_64 105 script: yarn test --config e2e/jest.config.js 106 working-directory: packages/expo-updates 107