Repository navigation
179 lines (166 loc) 路 6.09 KB
/
Copy pathharness-android.yml
File metadata and controls
179 lines (166 loc) 路 6.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
name: Harness Android
concurrency:
group: harness-android-${{ github.ref }}
cancel-in-progress: ${{ github.ref_name != 'main' }}
on:
workflow_dispatch:
inputs:
device_api_level:
description: "Override the Android API level for both jobs"
required: false
type: string
device_profile:
description: "Device profile"
required: false
default: "pixel_7"
type: string
avd_name:
description: "Override the AVD name for both jobs"
required: false
type: string
push:
branches:
- main
paths:
- '**/package.json'
- 'packages/react-native-nitro-modules/nitro'
- '.gitmodules'
- 'scripts/sync-core.mjs'
- 'scripts/core-package.mjs'
- 'scripts/build-core.mjs'
- 'scripts/bootstrap-core.mjs'
- 'scripts/nitrogen.mjs'
- ".github/workflows/harness-android.yml"
- "apps/example/android/**"
- "**/nitrogen/generated/shared/**"
- "**/nitrogen/generated/android/**"
- "packages/react-native-nitro-test/cpp/**"
- "packages/react-native-nitro-test/android/**"
- "packages/react-native-nitro-test-external/cpp/**"
- "packages/react-native-nitro-test-external/android/**"
- "packages/react-native-nitro-modules/cpp/**"
- "packages/react-native-nitro-modules/android/**"
- "packages/react-native-nitro-modules/src/**"
- "**/bun.lock"
- "**/react-native.config.js"
- "**/nitro.json"
- "apps/example/__tests__/**"
- "apps/example/jest.harness.config.mjs"
- "apps/example/package.json"
- "apps/example/rn-harness.config.mjs"
pull_request:
paths:
- '**/package.json'
- 'packages/react-native-nitro-modules/nitro'
- '.gitmodules'
- 'scripts/sync-core.mjs'
- 'scripts/core-package.mjs'
- 'scripts/build-core.mjs'
- 'scripts/bootstrap-core.mjs'
- 'scripts/nitrogen.mjs'
- ".github/workflows/harness-android.yml"
- "apps/example/android/**"
- "**/nitrogen/generated/shared/**"
- "**/nitrogen/generated/android/**"
- "packages/react-native-nitro-test/cpp/**"
- "packages/react-native-nitro-test/android/**"
- "packages/react-native-nitro-test-external/cpp/**"
- "packages/react-native-nitro-test-external/android/**"
- "packages/react-native-nitro-modules/cpp/**"
- "packages/react-native-nitro-modules/android/**"
- "packages/react-native-nitro-modules/src/**"
- "**/bun.lock"
- "**/react-native.config.js"
- "**/nitro.json"
- "apps/example/__tests__/**"
- "apps/example/jest.harness.config.mjs"
- "apps/example/package.json"
- "apps/example/rn-harness.config.mjs"
env:
DEVICE_ARCH: x86_64
DEVICE_PROFILE: ${{ github.event.inputs.device_profile || 'pixel_7' }}
AVD_DISK_SIZE: 1G
AVD_HEAP_SIZE: 1G
jobs:
harness_android_new:
name: Harness Android (${{ matrix.sanitizer.name }}, new architecture)
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
min-sdk:
- '26'
sanitizer:
- name: Default
gradle_property: ""
device_api_level: "36"
avd_name: Pixel_7_API_36
- name: ASan
gradle_property: "address"
# Keep legacy x86_64 ASan on the API 33 image verified in #1530.
# HWASan requires ARM64; this workflow uses an x86_64 emulator.
device_api_level: "33"
avd_name: Pixel_7_API_33
env:
DEVICE_API_LEVEL: ${{ github.event.inputs.device_api_level || matrix.sanitizer.device_api_level }}
AVD_NAME: ${{ github.event.inputs.avd_name || matrix.sanitizer.avd_name }}
steps:
- uses: actions/checkout@v7
with:
submodules: recursive
fetch-depth: 1
- name: Reclaim disk space
uses: AdityaGarg8/remove-unwanted-software@v5
with:
remove-dotnet: true
remove-haskell: true
remove-codeql: true
remove-docker-images: true
- uses: oven-sh/setup-bun@v2
- name: Install npm dependencies (bun)
run: bun install
- name: Set minSdk in build.gradle
run: sed -i "s/minSdkVersion = 24/minSdkVersion = ${{ matrix.min-sdk }}/g" apps/example/android/build.gradle
- name: Setup JDK 17
uses: actions/setup-java@v6.0.0
with:
distribution: "zulu"
java-version: 17
java-package: jdk
- name: Restore Gradle/CMake cache
uses: actions/cache@v6
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
apps/example/android/.gradle
apps/example/android/app/.cxx
key: ${{ runner.os }}-gradle-${{ matrix.min-sdk }}-${{ env.DEVICE_ARCH }}-${{ matrix.sanitizer.name }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', '**/CMakeLists.txt', '**/*.cmake') }}
restore-keys: |
${{ runner.os }}-gradle-${{ matrix.min-sdk }}-${{ env.DEVICE_ARCH }}-${{ matrix.sanitizer.name }}-
${{ runner.os }}-gradle-
- name: Build Android app
working-directory: apps/example/android
run: ./gradlew :app:assembleDebug --no-daemon --build-cache -PreactNativeArchitectures=${{ env.DEVICE_ARCH }} -PnitroSanitizer=${{ matrix.sanitizer.gradle_property }}
- name: Run Harness E2E tests
uses: callstackincubator/react-native-harness@v1.5.0
with:
runner: android
projectRoot: apps/example
app: android/app/build/outputs/apk/debug/app-debug.apk
packageManager: bun
- name: Print native crash reports
if: failure()
working-directory: apps/example
shell: bash
run: |
[ -d .harness/crash-reports ] || exit 0
find .harness/crash-reports -type f | sort | while read -r report; do
echo "::group::$report"
cat "$report"
echo "::endgroup::"
done
# Gradle cache doesn't like daemons
- name: Stop Gradle Daemon
working-directory: apps/example/android
run: ./gradlew --stop