ci: restore tokenless release workflow .github/workflows/tokenless-android.yml

This commit is contained in:
2317942351 2026-05-27 18:02:01 +08:00
commit 5707e7fe73

197
.github/workflows/tokenless-android.yml vendored Normal file
View file

@ -0,0 +1,197 @@
name: Tokenless Android APK
on:
workflow_dispatch:
push:
branches: [tokenless-ci]
paths:
- src/ui_session_interface.rs
- src/main.rs
- .github/workflows/tokenless-android.yml
permissions:
contents: write
actions: read
concurrency:
group: tokenless-android-${{ github.ref }}
cancel-in-progress: true
env:
RUST_VERSION: '1.75'
CARGO_NDK_VERSION: '3.1.2'
ANDROID_FLUTTER_VERSION: '3.24.5'
VCPKG_COMMIT_ID: '120deac3062162151622ca4860575a33844ba10b'
VERSION: '1.4.6-tokenless'
NDK_VERSION: 'r28c'
VCPKG_BINARY_SOURCES: 'clear;x-gha,readwrite'
jobs:
generate-bridge:
uses: ./.github/workflows/bridge.yml
build:
needs: [generate-bridge]
name: android-${{ matrix.job.arch }}-tokenless
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
job:
- { arch: aarch64, target: aarch64-linux-android, android_target: arm64-v8a, flutter_target: android-arm64, apk_name: app-arm64-v8a-release.apk, ndk_lib: aarch64-linux-android }
- { arch: armv7, target: armv7-linux-androideabi, android_target: armeabi-v7a, flutter_target: android-arm, apk_name: app-armeabi-v7a-release.apk, ndk_lib: arm-linux-androideabi }
- { arch: x86_64, target: x86_64-linux-android, android_target: x86_64, flutter_target: android-x64, apk_name: app-x86_64-release.apk, ndk_lib: x86_64-linux-android }
steps:
- name: Free Disk Space
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be
with:
tool-cache: false
android: false
dotnet: true
haskell: true
large-packages: false
docker-images: true
swap-storage: false
- name: Export GitHub Actions cache environment variables
uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y clang cmake curl gcc-multilib git g++ g++-multilib \
libayatana-appindicator3-dev libasound2-dev libc6-dev libclang-dev libunwind-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk-3-dev libpam0g-dev \
libpulse-dev libva-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
libxdo-dev libxfixes-dev llvm-dev nasm ninja-build openjdk-17-jdk-headless \
pkg-config tree wget
- name: Checkout source code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
submodules: recursive
- name: Verify tokenless patch is present
run: |
grep -n "let token = String::new();" src/ui_session_interface.rs
grep -n "let token = String::new();" src/main.rs
- name: Install flutter
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2
with:
channel: stable
flutter-version: ${{ env.ANDROID_FLUTTER_VERSION }}
- name: Patch flutter
run: |
cd $(dirname $(dirname $(which flutter)))
[[ "3.24.5" == "${{ env.ANDROID_FLUTTER_VERSION }}" ]] && git apply ${{ github.workspace }}/.github/patches/flutter_3.24.4_dropdown_menu_enableFilter.diff
- uses: nttld/setup-ndk@ed92fe6cadad69be94a966a7ee3271275e62f779
id: setup-ndk
with:
ndk-version: ${{ env.NDK_VERSION }}
add-to-path: true
- name: Setup vcpkg with GitHub Actions binary cache
uses: lukka/run-vcpkg@b1a0dd252f06b9e25b3c022a9a03bd7a427fb6a2
with:
vcpkgDirectory: /opt/artifacts/vcpkg
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }}
doNotCache: false
- name: Install vcpkg dependencies
shell: bash
run: |
if ! ./flutter/build_android_deps.sh "${{ matrix.job.android_target }}"; then
find "${VCPKG_ROOT}/" -name "*.log" -print -exec cat {} \;
exit 1
fi
- name: Restore bridge files
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
name: bridge-artifact
path: ./
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9
with:
toolchain: ${{ env.RUST_VERSION }}
components: rustfmt
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32
with:
prefix-key: rustdesk-lib-cache-android-tokenless
key: ${{ matrix.job.target }}
- name: Build rustdesk lib
env:
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
run: |
rustup target add ${{ matrix.job.target }}
cargo install cargo-ndk --version ${{ env.CARGO_NDK_VERSION }} --locked
case ${{ matrix.job.target }} in
aarch64-linux-android) ./flutter/ndk_arm64.sh ;;
armv7-linux-androideabi) ./flutter/ndk_arm.sh ;;
x86_64-linux-android) ./flutter/ndk_x64.sh ;;
esac
mkdir -p ./flutter/android/app/src/main/jniLibs/${{ matrix.job.android_target }}
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/${{ matrix.job.android_target }}/librustdesk.so
- name: Build unsigned APK
shell: bash
env:
JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
run: |
export PATH=/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH
sed -i "s/org.gradle.jvmargs=-Xmx1024M/org.gradle.jvmargs=-Xmx2g/g" ./flutter/android/gradle.properties
sed -i "s/signingConfigs.release/signingConfigs.debug/g" ./flutter/android/app/build.gradle
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/${{ matrix.job.ndk_lib }}/libc++_shared.so ./flutter/android/app/src/main/jniLibs/${{ matrix.job.android_target }}/
pushd flutter
flutter build apk --release --target-platform ${{ matrix.job.flutter_target }} --split-per-abi
popd
mkdir -p apk
mv ./flutter/build/app/outputs/flutter-apk/${{ matrix.job.apk_name }} ./apk/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}-unsigned.apk
- name: Upload unsigned APK
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: rustdesk-tokenless-android-${{ matrix.job.arch }}-unsigned-apk
path: apk/*.apk
publish:
name: publish-android-apks-to-release
needs: [build]
runs-on: ubuntu-24.04
if: ${{ success() }}
steps:
- name: Download APK artifacts
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
pattern: rustdesk-tokenless-android-*-unsigned-apk
merge-multiple: true
path: apk
- name: Publish APKs to release
env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: tokenless-nightly
run: |
set -euo pipefail
ls -la apk
if ! gh release view "${RELEASE_TAG}" --repo "${GITHUB_REPOSITORY}" >/dev/null 2>&1; then
gh release create "${RELEASE_TAG}" \
--repo "${GITHUB_REPOSITORY}" \
--target "${GITHUB_SHA}" \
--title "RustDesk Tokenless Nightly" \
--notes "Automated tokenless compatibility builds from tokenless-ci. Source commit: ${GITHUB_SHA}" \
|| gh release view "${RELEASE_TAG}" --repo "${GITHUB_REPOSITORY}" >/dev/null
fi
gh release upload "${RELEASE_TAG}" --repo "${GITHUB_REPOSITORY}" apk/*.apk --clobber