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