chore(workflow): Add Android aarch64 target to Workflow (#3077)

* try to add Android build github workflow

* fix: indent

* use cargo-ndk instead

* update android api version to 24

* try to apply them to exist workflows

* release the android executable

* correct the test workflow for android

* test it again

* im tired of trying;

* rollback to `cargo ndk-test`

---------

Co-authored-by: w9pi3cz1 <sdfghjk86@outlook.com>
This commit is contained in:
XSlime
2026-08-28 19:59:15 +08:00
committed by GitHub
parent a18011301c
commit 70c0f43870
2 changed files with 100 additions and 2 deletions

View File

@@ -112,11 +112,43 @@ jobs:
compression-level: 9
path: dist/pumpkin-*
build_android_release:
name: Build project in release for Android (AArch64)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
submodules: recursive
- uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-linux-android
- uses: nttld/setup-ndk@v1
with:
ndk-version: r27c
- name: Install cargo-ndk
run: cargo install cargo-ndk
- uses: Swatinem/rust-cache@v2
- name: Build Release with cargo ndk
env:
CARGO_NDK_PLATFORM: 24
run: cargo ndk -t arm64-v8a build --release --locked
- name: Prepare artifacts
shell: bash
run: |
mkdir -p dist
cp "target/aarch64-linux-android/release/pumpkin" "dist/pumpkin-aarch64-android"
- name: Export executable
uses: actions/upload-artifact@v7
with:
name: pumpkin-aarch64-android
compression-level: 9
path: dist/pumpkin-aarch64-android
publish_release:
name: Publish GitHub Release
permissions:
contents: write
needs: [build_release]
needs: [build_release, build_android_release]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

View File

@@ -97,6 +97,40 @@ jobs:
run: cargo nextest run --verbose
- name: Cargo doctest
run: cargo test --doc --verbose
test_android:
name: Test on Android AArch64
runs-on: ubuntu-latest
needs: [format, machete, clippy_debug, clippy_release]
steps:
- uses: actions/checkout@v7
with:
submodules: recursive
- uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-linux-android
- uses: nttld/setup-ndk@v1
with:
ndk-version: r27c
- run: cargo install cargo-ndk
- uses: taiki-e/install-action@nextest
- uses: Swatinem/rust-cache@v2
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Start Android emulator and Test
uses: reactivecircus/android-emulator-runner@v2
env:
CARGO_NDK_PLATFORM: 24
with:
api-level: 35
target: google_apis
arch: x86_64
profile: pixel_5
force-avd-creation: false
emulator-options: -no-snapshot-load -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -camera-front none
script: cargo ndk-test -t arm64-v8a
build_release:
name: Build project in release
runs-on: ${{ matrix.os }}
@@ -162,10 +196,42 @@ jobs:
name: pumpkin-${{ runner.arch }}-${{ runner.os }}
compression-level: 9
path: dist/pumpkin-*
build_android_release:
name: Build project in release for Android (AArch64)
runs-on: ubuntu-latest
needs: [test_android]
steps:
- uses: actions/checkout@v7
with:
submodules: recursive
- uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-linux-android
- uses: nttld/setup-ndk@v1
with:
ndk-version: r27c
- name: Install cargo-ndk
run: cargo install cargo-ndk
- uses: Swatinem/rust-cache@v2
- name: Build Release with cargo ndk
env:
CARGO_NDK_PLATFORM: 24
run: cargo ndk -t arm64-v8a build --release --locked
- name: Prepare artifacts
shell: bash
run: |
mkdir -p dist
cp "target/aarch64-linux-android/release/pumpkin" "dist/pumpkin-aarch64-android"
- name: Export executable
uses: actions/upload-artifact@v7
with:
name: pumpkin-aarch64-android
compression-level: 9
path: dist/pumpkin-aarch64-android
draft_release:
permissions:
contents: write
needs: [build_release]
needs: [build_release, build_android_release]
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
steps: