rustdesk/.github/workflows/playground.yml

216 lines
8.3 KiB
YAML
Raw Normal View History

2024-06-20 19:23:17 +08:00
name: playground
2024-03-17 11:20:25 +08:00
2024-03-17 11:17:23 +08:00
on:
2024-03-30 18:27:23 +08:00
#schedule:
2024-03-30 16:55:28 +08:00
# schedule build every night
2024-03-30 18:27:23 +08:00
# - cron: "0/6 * * * *"
2024-03-17 11:20:25 +08:00
workflow_dispatch:
2024-03-17 11:17:23 +08:00
env:
2024-05-01 12:35:58 +08:00
RUST_VERSION: "1.75" # https://github.com/rustdesk/rustdesk/discussions/7503
2024-03-17 11:17:23 +08:00
CARGO_NDK_VERSION: "3.1.2"
LLVM_VERSION: "15.0.6"
2024-06-21 01:29:00 +08:00
FLUTTER_VERSION: "3.13.9"
2024-03-17 11:17:23 +08: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 14:22:51 +08:00
TAG_NAME: "nightly"
2024-03-17 11:17:23 +08:00
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
2024-05-01 12:58:27 +08:00
# vcpkg version: 2024.03.25
VCPKG_COMMIT_ID: "a34c873a9717a888f58dc05268dea15592c2f0ff"
2024-06-03 21:01:41 +08:00
VERSION: "1.2.6"
2024-05-01 14:06:44 +08:00
NDK_VERSION: "r26d"
2024-03-17 11:17:23 +08:00
#signing keys env variable checks
2024-05-01 12:58:27 +08:00
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
2024-03-17 11:17:23 +08:00
# To make a custom build with your own servers set the below secret values
2024-05-01 12:58:27 +08: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 11:17:23 +08:00
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
jobs:
2024-06-20 19:16:51 +08:00
build-rustdesk-android:
name: build rustdesk android apk ${{ matrix.job.target }}
runs-on: ${{ matrix.job.os }}
2024-04-26 19:00:38 +08:00
strategy:
fail-fast: false
2024-04-30 12:02:20 +08:00
matrix:
job:
- {
2024-05-02 16:50:11 +08:00
arch: aarch64,
2024-06-20 19:16:51 +08:00
target: aarch64-linux-android,
os: ubuntu-20.04,
openssl-arch: android-arm64,
2024-06-21 00:19:05 +08:00
ref: 30bd4e1cef96c492d0cf541a59fb976e24dbbb54, # latest
2024-04-30 12:02:20 +08:00
}
2024-03-17 11:17:23 +08:00
steps:
2024-05-01 12:25:53 +08:00
- name: Checkout source code
uses: actions/checkout@v3
2024-06-20 19:16:51 +08:00
with:
2024-06-20 19:48:40 +08:00
ref: ${{ matrix.job.ref }}
2024-05-01 12:25:53 +08:00
2024-06-20 19:16:51 +08:00
- name: Install dependencies
2024-05-01 12:25:53 +08:00
run: |
2024-06-20 19:16:51 +08: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 21:28:27 +08:00
yasm \
2024-06-20 19:16:51 +08:00
ninja-build \
openjdk-11-jdk-headless \
pkg-config \
tree \
wget
2024-05-01 12:25:53 +08:00
2024-06-20 19:16:51 +08:00
- name: Install flutter
uses: subosito/flutter-action@v2
2024-05-01 12:25:53 +08:00
with:
2024-06-20 19:16:51 +08:00
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
2024-05-02 16:50:11 +08:00
2024-06-20 19:16:51 +08:00
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@v1
2024-05-01 12:25:53 +08:00
with:
2024-06-20 19:16:51 +08:00
toolchain: ${{ env.RUST_VERSION }}
components: "rustfmt"
2024-05-01 12:25:53 +08:00
2024-06-20 19:16:51 +08:00
- name: Install flutter rust bridge deps
2024-05-02 16:50:11 +08:00
run: |
2024-06-20 19:16:51 +08:00
git config --global core.longpaths true
cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid"
2024-06-21 01:29:00 +08:00
sed -i 's/uni_links_desktop/#uni_links_desktop/g' flutter/pubspec.yaml
2024-06-20 19:23:17 +08:00
pushd flutter ; flutter pub get ; popd
2024-06-20 19:16:51 +08:00
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart
2024-05-02 16:50:11 +08:00
2024-06-20 19:16:51 +08:00
- uses: nttld/setup-ndk@v1
id: setup-ndk
2024-05-02 18:14:42 +08:00
with:
ndk-version: ${{ env.NDK_VERSION }}
2024-06-20 19:16:51 +08:00
add-to-path: true
2024-05-02 18:14:42 +08:00
2024-06-20 19:16:51 +08: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 21:53:43 +08: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 23:21:08 +08:00
ls -ls /opt/artifacts/vcpkg/installed/arm64-android/lib/
# cp -rf /opt/rustdesk_thirdparty_lib/vcpkg/* /opt/artifacts/vcpkg/
2024-06-20 23:21:08 +08:00
ls -ls /opt/artifacts/vcpkg/installed/arm64-android/lib/
2024-06-20 21:53:43 +08:00
2024-06-20 19:16:51 +08: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 17:03:20 +08:00
2024-06-20 19:16:51 +08:00
- name: Build rustdesk
shell: bash
env:
JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
2024-05-02 17:03:20 +08:00
run: |
2024-06-20 19:16:51 +08: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 21:28:27 +08:00
mv ../rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk ./rustdesk-test-${{ matrix.job.ref }}-${{ matrix.job.ndk }}.apk
2024-05-02 17:03:20 +08:00
2024-06-20 19:16:51 +08:00
- uses: r0adkll/sign-android-release@v1
name: Sign app APK
if: env.ANDROID_SIGNING_KEY != null
id: sign-rustdesk
2024-05-02 16:50:11 +08:00
with:
2024-06-20 19:16:51 +08: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 16:50:11 +08:00
2024-06-20 19:16:51 +08:00
- name: Publish signed apk package
2024-04-30 12:02:20 +08:00
uses: softprops/action-gh-release@v1
with:
prerelease: true
tag_name: ${{ env.TAG_NAME }}
files: |
2024-06-20 19:16:51 +08:00
${{steps.sign-rustdesk.outputs.signedReleaseFile}}