1name: Development Client
2
3on:
4  workflow_dispatch: {}
5  # This task will fail due to migration to `expo-modules-core`.
6  # We temporary disable it.
7  # pull_request:
8  #   paths:
9  #     - .github/workflows/development-client.yml
10  #     - packages/expo-dev-*/**
11  # push:
12  #   branches: [master]
13  #   paths:
14  #     - .github/workflows/development-client.yml
15  #     - packages/expo-dev-*/**
16
17concurrency:
18  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
19  cancel-in-progress: true
20
21jobs:
22  android:
23    runs-on: ubuntu-18.04
24    steps:
25      - name: Check out repository
26        uses: actions/checkout@v2
27        with:
28          submodules: false
29      - name: Get yarn cache directory path
30        id: yarn-cache-dir-path
31        run: echo "::set-output name=dir::$(yarn cache dir)"
32      - uses: actions/cache@v2
33        with:
34          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
35          key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
36          restore-keys: |
37            ${{ runner.os }}-yarn-
38      - run: yarn install --frozen-lockfile
39      - uses: actions/cache@v2
40        with:
41          path: ~/.gradle/caches
42          key: ${{ runner.os }}-gradle-${{ hashFiles('android/*.gradle*') }}
43          restore-keys: |
44            ${{ runner.os }}-gradle-
45      - uses: actions/cache@v2
46        id: cache-android-ndk
47        with:
48          path: /usr/local/lib/android/sdk/ndk/19.2.5345600/
49          key: ${{ runner.os }}-ndk-19.2.5345600
50          restore-keys: |
51            ${{ runner.os }}-ndk-
52      - name: Install NDK
53        if: steps.cache-android-ndk.outputs.cache-hit != 'true'
54        run: |
55          sudo $ANDROID_SDK_ROOT/tools/bin/sdkmanager --install "ndk;19.2.5345600"
56      - run: yarn global add expo-cli
57      - run: echo "$(yarn global bin)" >> $GITHUB_PATH
58      - name: Init new expo app
59        working-directory: ../
60        run: expo-cli init development-client-android-test --name development-client-android-test --yes
61      - name: Make Yarn resolve expo-dev-client dependencies locally
62        working-directory: ../development-client-android-test
63        run: |
64          node -e " \
65            const pkg = require('./package.json'); \
66            pkg.resolutions = { \
67              ...pkg.resolutions, \
68              'expo-dev-menu': 'file:../expo/packages/expo-dev-menu', \
69              'expo-dev-menu-interface': 'file:../expo/packages/expo-dev-menu-interface', \
70              'expo-dev-launcher': 'file:../expo/packages/expo-dev-launcher', \
71              'expo-updates-interface': 'file:../expo/packages/expo-updates-interface', \
72              'expo-updates': 'file:../expo/packages/expo-updates', \
73              'expo-manifests': 'file:../expo/packages/expo-manifests', \
74              'expo-json-utils': 'file:../expo/packages/expo-json-utils', \
75            }; \
76            fs.writeFileSync('./package.json', JSON.stringify(pkg, null, 2) + '\n');"
77      - name: Add dependencies
78        working-directory: ../development-client-android-test
79        run: yarn add file:../expo/packages/expo-dev-client
80      - name: Setup app.config.json
81        working-directory: ../development-client-android-test
82        run: echo "{\"name\":\"development-client-android-test\",\"plugins\":[\"expo-dev-client\"],\"android\":{\"package\":\"com.devclient.test\"},\"ios\":{\"bundleIdentifier\":\"com.devclient.test\"}}" > app.config.json
83      - name: Eject
84        working-directory: ../development-client-android-test
85        run: expo-cli eject
86      - name: Bump `build tools`
87        working-directory: ../development-client-android-test
88        run: sed -i -e 's/buildToolsVersion\ =\ \"29\..\..\"/buildToolsVersion\ = \"30\.0\.3\"/' ./android/build.gradle
89      - name: Bump `android build tools`
90        working-directory: ../development-client-android-test
91        run: sed -i -e 's/com\.android\.tools\.build:gradle:3\..\../com\.android\.tools\.build:gradle:3\.5\.4/' ./android/build.gradle
92      - name: Build debug
93        env:
94          ANDROID_NDK_HOME: /usr/local/lib/android/sdk/ndk/19.2.5345600/
95        working-directory: ../development-client-android-test/android
96        run: ./gradlew assembleDebug
97
98  ios:
99    runs-on: macos-11
100    steps:
101      - name: Check out repository
102        uses: actions/checkout@v2
103        with:
104          submodules: false
105      - name: Get yarn cache directory path
106        id: yarn-cache-dir-path
107        run: echo "::set-output name=dir::$(yarn cache dir)"
108      - uses: actions/cache@v2
109        with:
110          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
111          key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
112          restore-keys: |
113            ${{ runner.os }}-yarn-
114      - run: yarn install --frozen-lockfile
115      - run: yarn global add expo-cli
116      - run: echo "$(yarn global bin)" >> $GITHUB_PATH
117      - name: Init new expo app
118        working-directory: ../
119        run: expo-cli init development-client-ios-test --name development-client-ios-test --yes
120      - name: Make Yarn resolve expo-dev-client dependencies locally
121        working-directory: ../development-client-ios-test
122        run: |
123          node -e " \
124            const pkg = require('./package.json'); \
125            pkg.resolutions = { \
126              ...pkg.resolutions, \
127              'expo-dev-menu': 'file:../expo/packages/expo-dev-menu', \
128              'expo-dev-menu-interface': 'file:../expo/packages/expo-dev-menu-interface', \
129              'expo-dev-launcher': 'file:../expo/packages/expo-dev-launcher', \
130              'expo-updates-interface': 'file:../expo/packages/expo-updates-interface', \
131              'expo-updates': 'file:../expo/packages/expo-updates', \
132              'expo-manifests': 'file:../expo/packages/expo-manifests', \
133              'expo-json-utils': 'file:../expo/packages/expo-json-utils', \
134            }; \
135            fs.writeFileSync('./package.json', JSON.stringify(pkg, null, 2) + '\n');"
136      - name: Add dependencies
137        working-directory: ../development-client-ios-test
138        run: yarn add file:../expo/packages/expo-dev-client
139      - name: Setup app.config.json
140        working-directory: ../development-client-ios-test
141        run: echo "{\"name\":\"development-client-ios-test\",\"plugins\":[\"expo-dev-client\"],\"android\":{\"package\":\"com.devclient.test\"},\"ios\":{\"bundleIdentifier\":\"com.devclient.test\"}}" > app.config.json
142      - name: Eject
143        working-directory: ../development-client-ios-test
144        run: expo-cli eject
145      - name: Build debug
146        working-directory: ../development-client-ios-test
147        run: xcodebuild -workspace ios/developmentclientiostest.xcworkspace -scheme developmentclientiostest -configuration debug -sdk iphonesimulator -arch x86_64
148