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