Android Node Build #48
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Android Node Build | |
concurrency: | |
group: android_node_build_${{ github.ref }} | |
cancel-in-progress: true | |
on: | |
workflow_dispatch: | |
env: | |
JAVET_NODE_VERSION: 22.9.0 | |
JAVET_VERSION: 4.1.0 | |
ROOT: /home/runner/work/Javet | |
jobs: | |
build_javet_lib: | |
strategy: | |
matrix: | |
include: | |
- android_arch: arm | |
android_abi: armeabi-v7a | |
i18n_name: non-i18n | |
cmake_flag: | |
config_patch: | |
- android_arch: arm64 | |
android_abi: arm64-v8a | |
i18n_name: non-i18n | |
cmake_flag: | |
config_patch: | |
- android_arch: x86 | |
android_abi: x86 | |
i18n_name: non-i18n | |
cmake_flag: | |
config_patch: | |
- android_arch: x86_64 | |
android_abi: x86_64 | |
i18n_name: non-i18n | |
cmake_flag: | |
config_patch: | |
- android_arch: arm64 | |
android_abi: arm64-v8a | |
i18n_name: i18n | |
cmake_flag: -DENABLE_I18N=1 | |
config_patch: sed -i 's/--with-intl=none/--with-intl=full-icu/g' android_configure.py | |
- android_arch: x86_64 | |
android_abi: x86_64 | |
i18n_name: i18n | |
cmake_flag: -DENABLE_I18N=1 | |
config_patch: sed -i 's/--with-intl=none/--with-intl=full-icu/g' android_configure.py | |
name: Build Javet ${{ matrix.android_arch }} ${{ matrix.i18n_name }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the code | |
uses: actions/checkout@v4 | |
- name: Setup Ubuntu | |
run: | | |
sudo apt-get install -y execstack gcc-multilib g++-multilib | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: Setup Android NDK | |
id: setup-ndk | |
uses: nttld/setup-ndk@v1 | |
with: | |
ndk-version: r27 | |
local-cache: false | |
- name: Setup Path | |
run: | | |
echo "${{ env.ROOT }}/google/depot_tools" >> $GITHUB_PATH | |
- name: Build Node.js | |
run: | | |
cd ${{ env.ROOT }} | |
git clone https://github.com/nodejs/node.git | |
cd node | |
git checkout v${{ env.JAVET_NODE_VERSION }} | |
git apply < ../Javet/scripts/patches/android/node/android_configure.py.patch | |
git apply < ../Javet/scripts/patches/android/node/common.gypi.patch | |
git apply < ../Javet/scripts/patches/android/node/configure.py.patch | |
git apply < ../Javet/scripts/patches/android/node/constants-arm.h.patch | |
git apply < ../Javet/scripts/patches/android/node/push_registers_asm.cc.patch | |
git apply < ../Javet/scripts/patches/android/node/trap-handler.h.patch | |
git apply < ../Javet/scripts/patches/android/node/test_crypto_clienthello.cc.patch | |
${{ matrix.config_patch }} | |
./android-configure ${{ steps.setup-ndk.outputs.ndk-path }} 24 ${{ matrix.android_arch }} | |
make -j4 | |
mv out out.${{ matrix.android_arch }}.${{ matrix.i18n_name }} | |
- name: Copy the i18n | |
if: matrix.i18n_name == 'i18n' && matrix.android_arch == 'arm64' | |
run: | | |
mkdir icu-node | |
cp ../node/deps/icu-tmp/*.dat icu-node | |
- name: Setup JDK 11 | |
uses: actions/setup-java@v4 | |
with: | |
distribution: corretto | |
java-version: 11 | |
- name: Setup Cmake | |
uses: jwlawson/[email protected] | |
with: | |
cmake-version: '3.23.x' | |
- name: Build Javet JNI | |
run: | | |
cd ${{ env.ROOT }}/Javet/cpp | |
sh ./build-android.sh -DNODE_DIR=${{ env.ROOT }}/node -DCMAKE_ANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }} -DCMAKE_ANDROID_ARCH=${{ matrix.android_arch }} ${{ matrix.cmake_flag }} | |
- name: Upload the Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: javet-android-node-${{ matrix.android_arch }}-${{ env.JAVET_VERSION }}-${{ matrix.i18n_name }} | |
path: android/javet-android/src/main/jniLibs/${{ matrix.android_abi }}/*.so | |
- name: Upload the i18n | |
uses: actions/upload-artifact@v4 | |
if: matrix.i18n_name == 'i18n' && matrix.android_arch == 'arm64' | |
with: | |
name: icu-node | |
path: icu-node/*.dat | |
build_javet_aar: | |
needs: [build_javet_lib] | |
name: Build Javet AAR | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the code | |
uses: actions/checkout@v4 | |
- name: Setup JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
distribution: corretto | |
java-version: 17 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
with: | |
gradle-version: 8.10.2 | |
- name: Prepare JNI Libs i18n | |
run: | | |
mkdir -p android/javet-android/src/main/jniLibs/arm64-v8a | |
mkdir -p android/javet-android/src/main/jniLibs/x86_64 | |
- name: Prepare JNI Libs non-i18n | |
run: | | |
mkdir -p android/javet-android/src/main/jniLibs/armeabi-v7a | |
mkdir -p android/javet-android/src/main/jniLibs/arm64-v8a | |
mkdir -p android/javet-android/src/main/jniLibs/x86 | |
mkdir -p android/javet-android/src/main/jniLibs/x86_64 | |
- name: Download Javet arm64 i18n | |
uses: actions/download-artifact@v4 | |
with: | |
name: javet-android-node-arm64-${{ env.JAVET_VERSION }}-i18n | |
path: android/javet-android/src/main/jniLibs/arm64-v8a | |
- name: Download Javet x86_64 i18n | |
uses: actions/download-artifact@v4 | |
with: | |
name: javet-android-node-x86_64-${{ env.JAVET_VERSION }}-i18n | |
path: android/javet-android/src/main/jniLibs/x86_64 | |
- name: Download Javet arm non-i18n | |
uses: actions/download-artifact@v4 | |
with: | |
name: javet-android-node-arm-${{ env.JAVET_VERSION }}-non-i18n | |
path: android/javet-android/src/main/jniLibs/armeabi-v7a | |
- name: Download Javet arm64 non-i18n | |
uses: actions/download-artifact@v4 | |
with: | |
name: javet-android-node-arm64-${{ env.JAVET_VERSION }}-non-i18n | |
path: android/javet-android/src/main/jniLibs/arm64-v8a | |
- name: Download Javet x86 non-i18n | |
uses: actions/download-artifact@v4 | |
with: | |
name: javet-android-node-x86-${{ env.JAVET_VERSION }}-non-i18n | |
path: android/javet-android/src/main/jniLibs/x86 | |
- name: Download Javet x86_64 non-i18n | |
uses: actions/download-artifact@v4 | |
with: | |
name: javet-android-node-x86_64-${{ env.JAVET_VERSION }}-non-i18n | |
path: android/javet-android/src/main/jniLibs/x86_64 | |
- name: Build the Artifact | |
run: | | |
cd ${{ env.ROOT }}/Javet/scripts/python | |
python3 patch_android_build.py | |
cd ${{ env.ROOT }}/Javet/android | |
gradle build --debug | |
- name: Upload the Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: javet-android-node-${{ env.JAVET_VERSION }} | |
path: android/javet-android/build/outputs/aar/javet*release.aar | |
- name: Delete Javet arm64 i18n | |
uses: geekyeggo/delete-artifact@v4 | |
with: | |
name: javet-android-node-arm64-${{ env.JAVET_VERSION }}-i18n | |
- name: Delete Javet x86_64 i18n | |
uses: geekyeggo/delete-artifact@v4 | |
with: | |
name: javet-android-node-x86_64-${{ env.JAVET_VERSION }}-i18n | |
- name: Delete Javet arm non-i18n | |
uses: geekyeggo/delete-artifact@v4 | |
with: | |
name: javet-android-node-arm-${{ env.JAVET_VERSION }}-non-i18n | |
- name: Delete Javet arm64 non-i18n | |
uses: geekyeggo/delete-artifact@v4 | |
with: | |
name: javet-android-node-arm64-${{ env.JAVET_VERSION }}-non-i18n | |
- name: Delete Javet x86 non-i18n | |
uses: geekyeggo/delete-artifact@v4 | |
with: | |
name: javet-android-node-x86-${{ env.JAVET_VERSION }}-non-i18n | |
- name: Delete Javet x86_64 non-i18n | |
uses: geekyeggo/delete-artifact@v4 | |
with: | |
name: javet-android-node-x86_64-${{ env.JAVET_VERSION }}-non-i18n |