1name: Android Unit Tests
2
3on:
4  workflow_dispatch: {}
5  push:
6    branches: [master]
7    paths:
8      - .github/workflows/android-unit-tests.yml
9      - android/**
10      - fastlane/**
11      - packages/**/android/**
12      - tools/**
13      - yarn.lock
14  pull_request:
15    paths:
16      - .github/workflows/android-unit-tests.yml
17      - android/**
18      - fastlane/**
19      - packages/**/android/**
20      - tools/**
21      - yarn.lock
22
23jobs:
24  test:
25    runs-on: ubuntu-18.04
26    steps:
27      - name: Check out repository
28        uses: actions/checkout@v2
29        with:
30          submodules: true
31      - name: Get yarn cache directory path
32        id: yarn-cache-dir-path
33        run: echo "::set-output name=dir::$(yarn cache dir)"
34      - uses: actions/cache@v2
35        with:
36          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
37          key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
38          restore-keys: |
39            ${{ runner.os }}-yarn-
40      - run: yarn install --frozen-lockfile
41      - uses: actions/cache@v2
42        with:
43          path: ~/.gradle/caches
44          key: ${{ runner.os }}-gradle-${{ hashFiles('android/*.gradle*') }}
45          restore-keys: |
46            ${{ runner.os }}-gradle-
47      - uses: actions/cache@v2
48        id: cache-android-ndk
49        with:
50          path: /usr/local/lib/android/sdk/ndk/19.2.5345600/
51          key: ${{ runner.os }}-ndk-19.2.5345600
52          restore-keys: |
53            ${{ runner.os }}-ndk-
54      - name: Install NDK
55        if: steps.cache-android-ndk.outputs.cache-hit != 'true'
56        run: |
57          sudo $ANDROID_HOME/tools/bin/sdkmanager --install "ndk;19.2.5345600"
58      - run: echo "$(pwd)/bin" >> $GITHUB_PATH
59      - name: Run native Android unit tests
60        env:
61          ANDROID_NDK_HOME: /usr/local/lib/android/sdk/ndk/19.2.5345600/
62        run: expotools native-unit-tests --platform android
63      - name: Save test results
64        if: always()
65        uses: actions/upload-artifact@v2
66        with:
67          name: test-results
68          path: packages/**/build/test-results/**/*xml
69      - name: Run Spotless lint check
70        env:
71          ANDROID_NDK_HOME: /usr/local/lib/android/sdk/ndk/19.2.5345600/
72        working-directory: android
73        run: ./gradlew spotlessCheck || echo '::error Spotless lint failed. Run `./gradlew spotlessApply` to automatically fix formatting.'
74