2727 ORG_GRADLE_PROJECT_signingPassword : ${{ secrets.GPG_SIGNING_PASSWORD }}
2828 NDK_VERSION_27 : ' 27.1.12297006'
2929 NDK_VERSION_28 : ' 28.2.13676358'
30+ NDK_VERSION_29 : ' 29.0.14206865'
3031 BUILD_CACHE_VERSION : v1
3132
3233 steps :
8586 uses : actions/cache@v4
8687 with :
8788 path : ~/.cache/ccache
88- key : ccache-${{ env.BUILD_CACHE_VERSION }}-${{ runner.os }}-${{ env.NDK_VERSION_27 }}-${{ steps.build-hash.outputs.hash }}
89+ key : ccache-${{ env.BUILD_CACHE_VERSION }}-${{ runner.os }}-${{ env.NDK_VERSION_27 }}-${{ env.NDK_VERSION_28 }}-${{ env.NDK_VERSION_29 }}-${{ steps.build-hash.outputs.hash }}
8990 restore-keys : |
90- ccache-${{ env.BUILD_CACHE_VERSION }}-${{ runner.os }}-${{ env.NDK_VERSION_27 }}-
91+ ccache-${{ env.BUILD_CACHE_VERSION }}-${{ runner.os }}-${{ env.NDK_VERSION_27 }}-${{ env.NDK_VERSION_28 }}-${{ env.NDK_VERSION_29 }}-
9192
9293 - name : Configure ccache
9394 run : |
@@ -105,18 +106,37 @@ jobs:
105106 path : ${{ env.ANDROID_HOME }}/ndk/${{ env.NDK_VERSION_27 }}
106107 key : android-ndk-${{ runner.os }}-${{ env.NDK_VERSION_27 }}
107108
109+ - name : Cache Android NDK r28
110+ id : cache-ndk-28
111+ uses : actions/cache@v4
112+ with :
113+ path : ${{ env.ANDROID_HOME }}/ndk/${{ env.NDK_VERSION_28 }}
114+ key : android-ndk-${{ runner.os }}-${{ env.NDK_VERSION_28 }}
115+
116+ - name : Cache Android NDK r29
117+ id : cache-ndk-29
118+ uses : actions/cache@v4
119+ with :
120+ path : ${{ env.ANDROID_HOME }}/ndk/${{ env.NDK_VERSION_29 }}
121+ key : android-ndk-${{ runner.os }}-${{ env.NDK_VERSION_29 }}
122+
108123 - name : Install Android packages
109124 run : |
110125 export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools
111126 yes | sdkmanager --licenses || true
112127 sdkmanager "cmake;3.22.1"
113- if [[ ! -d "${ANDROID_HOME}/ndk/${NDK_VERSION_27}" ]]; then
114- sdkmanager "ndk;${NDK_VERSION_27}"
115- fi
116- UNICODE_DIR="${ANDROID_HOME}/ndk/${NDK_VERSION_27}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/unicode"
117- if [[ -d "${UNICODE_DIR}" ]]; then
118- mv "${UNICODE_DIR}" "${UNICODE_DIR}2"
119- fi
128+ for version in "${NDK_VERSION_27}" "${NDK_VERSION_28}" "${NDK_VERSION_29}"; do
129+ if [[ -z "$version" ]]; then
130+ continue
131+ fi
132+ if [[ ! -d "${ANDROID_HOME}/ndk/${version}" ]]; then
133+ sdkmanager "ndk;${version}"
134+ fi
135+ UNICODE_DIR="${ANDROID_HOME}/ndk/${version}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/unicode"
136+ if [[ -d "${UNICODE_DIR}" ]]; then
137+ mv "${UNICODE_DIR}" "${UNICODE_DIR}2"
138+ fi
139+ done
120140 echo "ANDROID_NDK=$ANDROID_HOME/ndk/${NDK_VERSION_27}" >> $GITHUB_ENV
121141 echo "PATH=$PATH" >> $GITHUB_ENV
122142 shell : bash
@@ -138,7 +158,32 @@ jobs:
138158
139159 - name : Build
140160 if : steps.cache-dist.outputs.cache-hit != 'true'
141- run : yarn start
161+ run : |
162+ variants=(ndk27 ndk28c ndk29)
163+ for variant in "${variants[@]}"; do
164+ case "$variant" in
165+ ndk27)
166+ export ANDROID_NDK="$ANDROID_HOME/ndk/${NDK_VERSION_27}"
167+ ;;
168+ ndk28c)
169+ export ANDROID_NDK="$ANDROID_HOME/ndk/${NDK_VERSION_28}"
170+ ;;
171+ ndk29)
172+ export ANDROID_NDK="$ANDROID_HOME/ndk/${NDK_VERSION_29}"
173+ ;;
174+ *)
175+ echo "Unknown variant $variant" >&2
176+ exit 1
177+ esac
178+
179+ if [[ ! -d "$ANDROID_NDK" ]]; then
180+ echo "Android NDK not found at $ANDROID_NDK for variant $variant" >&2
181+ exit 1
182+ fi
183+
184+ export JSC_NDK_VARIANT="$variant"
185+ yarn start
186+ done
142187 shell : bash
143188
144189 - name : Show ccache stats
@@ -241,6 +286,16 @@ jobs:
241286 set +e
242287 maestro test maestro.yaml
243288 STATUS=$?
289+ if [ $STATUS -eq 0 ]; then
290+ for variant in ndk27 ndk28c ndk29; do
291+ ../scripts/run-js-smoketest.sh "$variant"
292+ EXIT_CODE=$?
293+ if [ $EXIT_CODE -ne 0 ]; then
294+ STATUS=$EXIT_CODE
295+ break
296+ fi
297+ done
298+ fi
244299 adb logcat -d > adb.log
245300 exit $STATUS
246301
0 commit comments