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            }; \
72            fs.writeFileSync('./package.json', JSON.stringify(pkg, null, 2) + '\n');"
73      - name: Add dependencies
74        working-directory: ../development-client-android-test
75        run: yarn add file:../expo/packages/expo-dev-client
76      - name: Setup app.config.json
77        working-directory: ../development-client-android-test
78        run: echo "{\"name\":\"development-client-android-test\",\"plugins\":[\"expo-dev-client\"],\"android\":{\"package\":\"com.devclient.test\"},\"ios\":{\"bundleIdentifier\":\"com.devclient.test\"}}" > app.config.json
79      - name: Eject
80        working-directory: ../development-client-android-test
81        run: expo-cli eject
82      - name: Bump `build tools`
83        working-directory: ../development-client-android-test
84        run: sed -i -e 's/buildToolsVersion\ =\ \"29\..\..\"/buildToolsVersion\ = \"30\.0\.3\"/' ./android/build.gradle
85      - name: Bump `android build tools`
86        working-directory: ../development-client-android-test
87        run: sed -i -e 's/com\.android\.tools\.build:gradle:3\..\../com\.android\.tools\.build:gradle:3\.5\.4/' ./android/build.gradle
88      - name: Build debug
89        env:
90          ANDROID_NDK_HOME: /usr/local/lib/android/sdk/ndk/19.2.5345600/
91        working-directory: ../development-client-android-test/android
92        run: ./gradlew assembleDebug
93
94  ios:
95    runs-on: macos-11
96    steps:
97      - name: Check out repository
98        uses: actions/checkout@v2
99        with:
100          submodules: false
101      - name: Get yarn cache directory path
102        id: yarn-cache-dir-path
103        run: echo "::set-output name=dir::$(yarn cache dir)"
104      - uses: actions/cache@v2
105        with:
106          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
107          key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
108          restore-keys: |
109            ${{ runner.os }}-yarn-
110      - run: yarn install --frozen-lockfile
111      - run: yarn global add expo-cli
112      - run: echo "$(yarn global bin)" >> $GITHUB_PATH
113      - name: Init new expo app
114        working-directory: ../
115        run: expo-cli init development-client-ios-test --name development-client-ios-test --yes
116      - name: Make Yarn resolve expo-dev-client dependencies locally
117        working-directory: ../development-client-ios-test
118        run: |
119          node -e " \
120            const pkg = require('./package.json'); \
121            pkg.resolutions = { \
122              ...pkg.resolutions, \
123              'expo-dev-menu': 'file:../expo/packages/expo-dev-menu', \
124              'expo-dev-menu-interface': 'file:../expo/packages/expo-dev-menu-interface', \
125              'expo-dev-launcher': 'file:../expo/packages/expo-dev-launcher', \
126              'expo-updates-interface': 'file:../expo/packages/expo-updates-interface', \
127              'expo-updates': 'file:../expo/packages/expo-updates', \
128            }; \
129            fs.writeFileSync('./package.json', JSON.stringify(pkg, null, 2) + '\n');"
130      - name: Add dependencies
131        working-directory: ../development-client-ios-test
132        run: yarn add file:../expo/packages/expo-dev-client
133      - name: Setup app.config.json
134        working-directory: ../development-client-ios-test
135        run: echo "{\"name\":\"development-client-ios-test\",\"plugins\":[\"expo-dev-client\"],\"android\":{\"package\":\"com.devclient.test\"},\"ios\":{\"bundleIdentifier\":\"com.devclient.test\"}}" > app.config.json
136      - name: Eject
137        working-directory: ../development-client-ios-test
138        run: expo-cli eject
139      - name: Build debug
140        working-directory: ../development-client-ios-test
141        run: xcodebuild -workspace ios/developmentclientiostest.xcworkspace -scheme developmentclientiostest -configuration debug -sdk iphonesimulator -arch x86_64
142