xref: /expo/.github/workflows/updates-e2e.yml (revision bec11b8a)
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