• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1name: Presubmit
2
3on: [pull_request]
4
5concurrency:
6  group: build-${{ github.ref }}
7  cancel-in-progress: true
8
9env:
10  JDK_VERSION: 17
11  DISTRIBUTION: 'zulu'
12
13jobs:
14  build:
15    name: Build
16    runs-on: ubuntu-latest
17    timeout-minutes: 120
18    steps:
19      - name: Checkout
20        uses: actions/checkout@v4
21
22      - name: Validate Gradle Wrapper
23        uses: gradle/wrapper-validation-action@v2
24
25      - name: Set up JDK
26        uses: actions/setup-java@v4
27        with:
28          distribution: ${{ env.DISTRIBUTION }}
29          java-version: ${{ env.JDK_VERSION }}
30          cache: gradle
31
32      - name: Setup Gradle
33        uses: gradle/gradle-build-action@v3
34
35      - name: Build all build type and flavor permutations
36        run: ./gradlew assemble --parallel --build-cache
37
38      - name: Upload build outputs (APKs)
39        uses: actions/upload-artifact@v4
40        with:
41          name: build-outputs
42          path: app/build/outputs
43
44      - name: Upload build reports
45        if: always()
46        continue-on-error: true
47        uses: actions/upload-artifact@v4
48        with:
49          name: build-reports
50          path: "*/build/reports"
51
52  test:
53    name: Unit Tests
54    runs-on: ubuntu-latest
55    timeout-minutes: 120
56    steps:
57      - name: Checkout
58        uses: actions/checkout@v4
59
60      - name: Validate Gradle Wrapper
61        uses: gradle/wrapper-validation-action@v2
62
63      - name: Set up JDK
64        uses: actions/setup-java@v4
65        with:
66          distribution: ${{ env.DISTRIBUTION }}
67          java-version: ${{ env.JDK_VERSION }}
68          cache: gradle
69
70      - name: Setup Gradle
71        uses: gradle/gradle-build-action@v3
72        continue-on-error: true
73
74      - name: Run local tests
75        run: ./gradlew test --parallel --build-cache
76
77      - name: Upload test reports on failure
78        if: failure()
79        uses: actions/upload-artifact@v4
80        with:
81          name: test-reports
82          path: "*/build/reports/tests"
83
84  android-test:
85    name: Instrumentation Tests (${{ matrix.device.name }})
86    runs-on: ubuntu-latest
87    timeout-minutes: 30
88    strategy:
89      fail-fast: false
90      matrix:
91        device:
92          - { name: pixel2Api28, img: 'system-images;android-28;google_apis;x86' }
93          - { name: pixel8Api34, img: 'system-images;android-34;aosp_atd;x86_64' }
94
95    steps:
96      - name: Checkout
97        uses: actions/checkout@v4
98
99      - name: Enable KVM group perms
100        run: |
101          echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
102          sudo udevadm control --reload-rules
103          sudo udevadm trigger --name-match=kvm
104
105      - name: Set up JDK
106        uses: actions/setup-java@v4
107        with:
108          distribution: ${{ env.DISTRIBUTION }}
109          java-version: ${{ env.JDK_VERSION }}
110
111      - name: Install Emulator
112        run: |
113          yes | "$ANDROID_HOME"/cmdline-tools/latest/bin/sdkmanager --install "${{ matrix.device.img }}"
114
115
116      - name: Accept licenses
117        run: yes | "$ANDROID_HOME"/cmdline-tools/latest/bin/sdkmanager --licenses || true
118
119      - name: Run instrumentation tests
120        uses: gradle/gradle-build-action@v3
121        with:
122          arguments: ${{ matrix.device.name }}DebugAndroidTest
123
124      - name: Upload instrumentation test reports and logs on failure
125        if: failure()
126        uses: actions/upload-artifact@v4
127        with:
128          name: instrumentation-test-reports-${{ matrix.device.name }}
129          path: |
130            */build/reports/androidTests/**/${{ matrix.device.name }}
131            */build/outputs/androidTest-results/**/${{ matrix.device.name }}
132
133  spotless:
134    name: Spotless Check
135    runs-on: ubuntu-latest
136    timeout-minutes: 60
137    steps:
138      - name: Checkout
139        uses: actions/checkout@v4
140        with:
141          fetch-depth: 0
142
143      - name: Validate Gradle Wrapper
144        uses: gradle/wrapper-validation-action@v2
145
146      - name: Set up JDK
147        uses: actions/setup-java@v4
148        with:
149          distribution: ${{ env.DISTRIBUTION }}
150          java-version: ${{ env.JDK_VERSION }}
151          cache: gradle
152
153      - name: Setup Gradle
154        uses: gradle/gradle-build-action@v3
155
156      - name: Spotless Check
157        run: ./gradlew spotlessCheck --init-script gradle/init.gradle.kts --parallel --build-cache
158