mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-06-22 10:02:20 +00:00
197 lines
7.8 KiB
YAML
197 lines
7.8 KiB
YAML
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
|