2024-06-20 14:23:17 +03:00
name : playground
2024-03-17 06:20:25 +03:00
2024-03-17 06:17:23 +03:00
on :
2024-03-30 13:27:23 +03:00
#schedule:
2024-03-30 11:55:28 +03:00
# schedule build every night
2024-03-30 13:27:23 +03:00
# - cron: "0/6 * * * *"
2024-03-17 06:20:25 +03:00
workflow_dispatch :
2024-03-17 06:17:23 +03:00
env :
2024-05-01 07:35:58 +03:00
RUST_VERSION : "1.75" # https://github.com/rustdesk/rustdesk/discussions/7503
2024-03-17 06:17:23 +03:00
CARGO_NDK_VERSION : "3.1.2"
LLVM_VERSION : "15.0.6"
2024-06-20 18:09:38 +03:00
FLUTTER_VERSION : "3.13.9"
2024-03-17 06:17:23 +03:00
FLUTTER_RUST_BRIDGE_VERSION : "1.80.1"
# for arm64 linux because official Dart SDK does not work
FLUTTER_ELINUX_VERSION : "3.16.9"
2024-05-01 09:22:51 +03:00
TAG_NAME : "nightly"
2024-03-17 06:17:23 +03:00
VCPKG_BINARY_SOURCES : "clear;x-gha,readwrite"
2024-05-01 07:58:27 +03:00
# vcpkg version: 2024.03.25
2024-06-20 18:09:38 +03:00
VCPKG_COMMIT_ID : "8eb57355a4ffb410a2e94c07b4dca2dffbee8e50"
2024-06-03 16:01:41 +03:00
VERSION : "1.2.6"
2024-05-01 09:06:44 +03:00
NDK_VERSION : "r26d"
2024-03-17 06:17:23 +03:00
#signing keys env variable checks
2024-05-01 07:58:27 +03:00
ANDROID_SIGNING_KEY : "${{ secrets.ANDROID_SIGNING_KEY }}"
MACOS_P12_BASE64 : "${{ secrets.MACOS_P12_BASE64 }}"
2024-03-17 06:17:23 +03:00
# To make a custom build with your own servers set the below secret values
2024-05-01 07:58:27 +03:00
RS_PUB_KEY : "${{ secrets.RS_PUB_KEY }}"
RENDEZVOUS_SERVER : "${{ secrets.RENDEZVOUS_SERVER }}"
API_SERVER : "${{ secrets.API_SERVER }}"
UPLOAD_ARTIFACT : "${{ inputs.upload-artifact }}"
2024-03-17 06:17:23 +03:00
SIGN_BASE_URL : "${{ secrets.SIGN_BASE_URL }}"
jobs :
2024-06-20 14:16:51 +03:00
build-rustdesk-android :
name : build rustdesk android apk ${{ matrix.job.target }}
runs-on : ${{ matrix.job.os }}
2024-04-26 14:00:38 +03:00
strategy :
fail-fast : false
2024-04-30 07:02:20 +03:00
matrix :
job :
- {
2024-05-02 11:50:11 +03:00
arch : aarch64,
2024-06-20 14:16:51 +03:00
target : aarch64-linux-android,
os : ubuntu-20.04,
openssl-arch : android-arm64,
2024-06-20 16:28:27 +03:00
ref : ebb14af488f31eb651a4c3c4c873aed7303cf53a, # Dec 11
ndk : r25c
2024-06-20 14:48:40 +03:00
}
- {
arch : aarch64,
target : aarch64-linux-android,
os : ubuntu-20.04,
openssl-arch : android-arm64,
2024-06-20 16:28:27 +03:00
ref : e57d07f7d6cd216c14bd35ab5323fcdd371de464, # Nov 10
ndk : r26d
2024-04-30 07:02:20 +03:00
}
2024-03-17 06:17:23 +03:00
steps :
2024-05-01 07:25:53 +03:00
- name : Checkout source code
uses : actions/checkout@v3
2024-06-20 14:16:51 +03:00
with :
2024-06-20 14:48:40 +03:00
ref : ${{ matrix.job.ref }}
2024-05-01 07:25:53 +03:00
2024-06-20 14:16:51 +03:00
- name : Install dependencies
2024-05-01 07:25:53 +03:00
run : |
2024-06-20 14:16:51 +03:00
sudo apt-get update
sudo apt-get install -y \
clang \
cmake \
curl \
gcc-multilib \
git \
g++ \
g++-multilib \
libappindicator3-dev \
libasound2-dev \
libc6-dev \
libclang-10-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libgtk-3-dev \
libpam0g-dev \
libpulse-dev \
libva-dev \
libvdpau-dev \
libxcb-randr0-dev \
libxcb-shape0-dev \
libxcb-xfixes0-dev \
libxdo-dev \
libxfixes-dev \
llvm-10-dev \
nasm \
2024-06-20 16:28:27 +03:00
yasm \
2024-06-20 14:16:51 +03:00
ninja-build \
openjdk-11-jdk-headless \
pkg-config \
tree \
wget
2024-05-01 07:25:53 +03:00
2024-06-20 14:16:51 +03:00
- name : Install flutter
uses : subosito/flutter-action@v2
2024-05-01 07:25:53 +03:00
with :
2024-06-20 14:16:51 +03:00
channel : "stable"
flutter-version : ${{ env.FLUTTER_VERSION }}
2024-05-02 11:50:11 +03:00
2024-06-20 14:16:51 +03:00
- name : Install Rust toolchain
uses : dtolnay/rust-toolchain@v1
2024-05-01 07:25:53 +03:00
with :
2024-06-20 14:16:51 +03:00
toolchain : ${{ env.RUST_VERSION }}
components : "rustfmt"
2024-05-01 07:25:53 +03:00
2024-06-20 14:16:51 +03:00
- name : Install flutter rust bridge deps
2024-05-02 11:50:11 +03:00
run : |
2024-06-20 14:16:51 +03:00
git config --global core.longpaths true
cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid"
2024-06-20 14:23:17 +03:00
pushd flutter ; flutter pub get ; popd
2024-06-20 14:16:51 +03:00
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart
2024-05-02 11:50:11 +03:00
2024-06-20 14:16:51 +03:00
- uses : nttld/setup-ndk@v1
id : setup-ndk
2024-05-02 13:14:42 +03:00
with :
2024-06-20 16:28:27 +03:00
ndk-version : ${{ matrix.job.ndk }}
2024-06-20 14:16:51 +03:00
add-to-path : true
2024-05-02 13:14:42 +03:00
2024-06-20 14:16:51 +03:00
- name : Setup vcpkg with Github Actions binary cache
uses : lukka/run-vcpkg@v11
with :
vcpkgDirectory : /opt/artifacts/vcpkg
vcpkgGitCommitId : ${{ env.VCPKG_COMMIT_ID }}
- name : Install vcpkg dependencies
run : |
case ${{ matrix.job.target }} in
aarch64-linux-android)
./flutter/build_android_deps.sh arm64-v8a
;;
armv7-linux-androideabi)
./flutter/build_android_deps.sh armeabi-v7a
;;
esac
shell : bash
2024-06-20 16:53:43 +03:00
- name : Clone deps
shell : bash
run : |
pushd /opt
git clone https://github.com/rustdesk-org/rustdesk_thirdparty_lib.git --depth=1
2024-06-20 18:21:08 +03:00
ls -ls /opt/artifacts/vcpkg/installed/arm64-android/lib/
2024-06-20 17:45:07 +03:00
cp -rf /opt/rustdesk_thirdparty_lib/vcpkg/* /opt/artifacts/vcpkg/
2024-06-20 18:21:08 +03:00
ls -ls /opt/artifacts/vcpkg/installed/arm64-android/lib/
2024-06-20 16:53:43 +03:00
2024-06-20 14:16:51 +03:00
- 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 }}
case ${{ matrix.job.target }} in
aarch64-linux-android)
./flutter/ndk_arm64.sh
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
;;
armv7-linux-androideabi)
./flutter/ndk_arm.sh
mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so
;;
esac
2024-05-02 12:03:20 +03:00
2024-06-20 14:16:51 +03:00
- name : Build rustdesk
shell : bash
env :
JAVA_HOME : /usr/lib/jvm/java-11-openjdk-amd64
2024-05-02 12:03:20 +03:00
run : |
2024-06-20 14:16:51 +03:00
export PATH=/usr/lib/jvm/java-11-openjdk-amd64/bin:$PATH
# temporary use debug sign config
sed -i "s/signingConfigs.release/signingConfigs.debug/g" ./flutter/android/app/build.gradle
case ${{ matrix.job.target }} in
aarch64-linux-android)
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
# build flutter
pushd flutter
flutter build apk --release --target-platform android-arm64 --split-per-abi
mv build/app/outputs/flutter-apk/app-arm64-v8a-release.apk ../rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk
;;
armv7-linux-androideabi)
mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so
# build flutter
pushd flutter
flutter build apk --release --target-platform android-arm --split-per-abi
mv build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk ../rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk
;;
esac
popd
mkdir -p signed-apk; pushd signed-apk
2024-06-20 16:28:27 +03:00
mv ../rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk ./rustdesk-test-${{ matrix.job.ref }}-${{ matrix.job.ndk }}.apk
2024-05-02 12:03:20 +03:00
2024-06-20 14:16:51 +03:00
- uses : r0adkll/sign-android-release@v1
name : Sign app APK
if : env.ANDROID_SIGNING_KEY != null
id : sign-rustdesk
2024-05-02 11:50:11 +03:00
with :
2024-06-20 14:16:51 +03:00
releaseDirectory : ./signed-apk
signingKeyBase64 : ${{ secrets.ANDROID_SIGNING_KEY }}
alias : ${{ secrets.ANDROID_ALIAS }}
keyStorePassword : ${{ secrets.ANDROID_KEY_STORE_PASSWORD }}
keyPassword : ${{ secrets.ANDROID_KEY_PASSWORD }}
env :
# override default build-tools version (29.0.3) -- optional
BUILD_TOOLS_VERSION : "30.0.2"
2024-05-02 11:50:11 +03:00
2024-06-20 14:16:51 +03:00
- name : Publish signed apk package
2024-04-30 07:02:20 +03:00
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
2024-06-20 14:16:51 +03:00
${{steps.sign-rustdesk.outputs.signedReleaseFile}}