2023-11-04 03:41:48 +08:00
name : Build the flutter version of the RustDesk
2023-04-02 22:41:16 +08:00
on :
workflow_call :
inputs :
upload-artifact :
type : boolean
default : true
2023-07-05 21:24:44 +08:00
upload-tag :
type : string
default : "nightly"
2023-04-02 22:41:16 +08:00
env :
2024-06-17 09:44:36 +08:00
WIN_RUST_VERSION : "1.75" # https://github.com/rustdesk/rustdesk/discussions/7503, also 1.78 has ABI change which causes our sciter version not working, https://blog.rust-lang.org/2024/03/30/i128-layout-update.html
2024-06-15 14:03:33 +08:00
RUST_VERSION : "1.75" # sciter failed on m1 with 1.78 because of https://blog.rust-lang.org/2024/03/30/i128-layout-update.html
2023-05-25 22:49:55 +08:00
CARGO_NDK_VERSION : "3.1.2"
2023-04-02 22:41:16 +08:00
LLVM_VERSION : "15.0.6"
2024-06-20 20:32:00 +08:00
FLUTTER_VERSION : "3.19.6"
2024-06-21 18:14:58 +08:00
ANDROID_FLUTTER_VERSION : "3.13.9" # >= 3.16 is very slow on my android phone, but work well on most of others. We may switch to new flutter after changing to texture rendering (I believe it can solve my problem).
2023-11-01 17:04:32 +08:00
FLUTTER_RUST_BRIDGE_VERSION : "1.80.1"
2023-11-07 20:12:22 +08:00
# for arm64 linux because official Dart SDK does not work
2024-02-11 00:15:11 +08:00
FLUTTER_ELINUX_VERSION : "3.16.9"
2023-07-05 17:47:10 +08:00
TAG_NAME : "${{ inputs.upload-tag }}"
2023-11-04 03:41:48 +08:00
VCPKG_BINARY_SOURCES : "clear;x-gha,readwrite"
2024-04-26 18:15:16 +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:52:02 +08:00
NDK_VERSION : "r26d"
2023-04-02 22:41:16 +08:00
#signing keys env variable checks
2024-03-25 11:21:01 +08:00
ANDROID_SIGNING_KEY : "${{ secrets.ANDROID_SIGNING_KEY }}"
MACOS_P12_BASE64 : "${{ secrets.MACOS_P12_BASE64 }}"
2023-04-02 22:41:16 +08:00
# To make a custom build with your own servers set the below secret values
2024-03-25 11:21:01 +08:00
RS_PUB_KEY : "${{ secrets.RS_PUB_KEY }}"
RENDEZVOUS_SERVER : "${{ secrets.RENDEZVOUS_SERVER }}"
API_SERVER : "${{ secrets.API_SERVER }}"
2023-04-02 22:41:16 +08:00
UPLOAD_ARTIFACT : "${{ inputs.upload-artifact }}"
2024-03-14 11:03:47 +08:00
SIGN_BASE_URL : "${{ secrets.SIGN_BASE_URL }}"
2023-04-02 22:41:16 +08:00
jobs :
2024-02-26 02:24:00 +08:00
build-RustDeskTempTopMostWindow :
uses : ./.github/workflows/third-party-RustDeskTempTopMostWindow.yml
with :
2024-02-26 10:25:45 +08:00
upload-artifact : ${{ inputs.upload-artifact }}
2024-04-20 18:19:19 +08:00
target : windows-2022
2024-02-26 02:24:00 +08:00
configuration : Release
platform : x64
target_version : Windows10
strategy :
2024-03-25 11:21:01 +08:00
fail-fast : false
2024-02-26 02:24:00 +08:00
2023-04-02 22:41:16 +08:00
build-for-windows-flutter :
2024-04-30 09:08:08 +08:00
name : ${{ matrix.job.target }}
2024-02-26 02:24:00 +08:00
needs : [ build-RustDeskTempTopMostWindow]
2023-04-02 22:41:16 +08:00
runs-on : ${{ matrix.job.os }}
strategy :
fail-fast : false
matrix :
job :
2024-04-20 18:19:19 +08:00
# - { target: i686-pc-windows-msvc , os: windows-2022 }
# - { target: x86_64-pc-windows-gnu , os: windows-2022 }
- { target: x86_64-pc-windows-msvc, os: windows-2022, arch : x86_64 }
# - { target: aarch64-pc-windows-msvc, os: windows-2022, arch: aarch64 }
2023-04-02 22:41:16 +08:00
steps :
2023-11-04 03:41:48 +08:00
- name : Export GitHub Actions cache environment variables
uses : actions/github-script@v6
with :
script : |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
2023-04-02 22:41:16 +08:00
- name : Checkout source code
2023-12-13 21:22:38 +08:00
uses : actions/checkout@v4
2023-04-02 22:41:16 +08:00
- name : Install LLVM and Clang
uses : KyleMayes/install-llvm-action@v1
with :
version : ${{ env.LLVM_VERSION }}
- name : Install flutter
2024-03-04 09:17:56 +08:00
uses : subosito/flutter-action@v2.12.0 #https://github.com/subosito/flutter-action/issues/277
2023-04-02 22:41:16 +08:00
with :
channel : "stable"
flutter-version : ${{ env.FLUTTER_VERSION }}
cache : true
- name : Install Rust toolchain
2023-11-23 05:09:56 +08:00
uses : dtolnay/rust-toolchain@v1
2023-04-02 22:41:16 +08:00
with :
2024-06-13 13:05:35 +08:00
toolchain : ${{ env.WIN_RUST_VERSION }}
2023-11-23 05:09:56 +08:00
targets : ${{ matrix.job.target }}
2024-03-27 01:48:34 +08:00
components : "rustfmt"
2023-04-02 22:41:16 +08:00
- uses : Swatinem/rust-cache@v2
with :
prefix-key : ${{ matrix.job.os }}
- name : Install flutter rust bridge deps
run : |
2023-09-19 15:01:16 +08:00
git config --global core.longpaths true
2023-06-06 07:39:44 +08:00
cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid"
2023-04-02 22:41:16 +08:00
Push-Location flutter ; flutter pub get ; Pop-Location
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart
2023-11-04 03:41:48 +08:00
- name : Setup vcpkg with Github Actions binary cache
uses : lukka/run-vcpkg@v11
with :
vcpkgDirectory : C:\vcpkg
vcpkgGitCommitId : ${{ env.VCPKG_COMMIT_ID }}
2023-04-02 22:41:16 +08:00
- name : Install vcpkg dependencies
run : |
2023-11-04 03:41:48 +08:00
$VCPKG_ROOT/vcpkg install --triplet x64-windows-static --x-install-root="$VCPKG_ROOT/installed"
shell : bash
2023-04-02 22:41:16 +08:00
- name : Build rustdesk
2024-04-19 11:31:52 +08:00
run : |
Invoke-WebRequest -Uri https://github.com/rustdesk-org/rdev/releases/download/usbmmidd_v2/usbmmidd_v2.zip -OutFile usbmmidd_v2.zip
2024-04-21 14:55:42 +08:00
Expand-Archive usbmmidd_v2.zip -DestinationPath .
2024-05-06 15:26:21 +08:00
python3 .\build.py --portable --hwcodec --flutter --vram --skip-portable-pack
2024-04-21 14:55:42 +08:00
Remove-Item -Path usbmmidd_v2\Win32 -Recurse
2024-04-22 10:37:08 +08:00
Remove-Item -Path "usbmmidd_v2\deviceinstaller64.exe", "usbmmidd_v2\deviceinstaller.exe", "usbmmidd_v2\usbmmidd.bat"
2024-04-30 15:47:36 +08:00
mv ./flutter/build/windows/x64/runner/Release ./rustdesk
mv -Force .\usbmmidd_v2 ./rustdesk
2023-04-02 22:41:16 +08:00
2023-09-01 21:11:23 +08:00
- name : find Runner.res
# Windows: find Runner.res (compiled from ./flutter/windows/runner/Runner.rc), copy to ./Runner.res
# Runner.rc does not contain actual version, but Runner.res does
continue-on-error : true
shell : bash
run : |
2023-09-03 01:52:29 +08:00
runner_res=$(find . -name "Runner.res");
2023-09-02 19:29:03 +08:00
if [ "$runner_res" == "" ]; then
2023-09-03 01:52:29 +08:00
echo "Runner.res: not found";
2023-09-02 00:29:10 +08:00
else
2023-09-03 01:52:29 +08:00
echo "Runner.res: $runner_res";
cp $runner_res ./libs/portable/Runner.res;
echo "list ./libs/portable/Runner.res";
ls -l ./libs/portable/Runner.res;
2023-09-01 21:11:23 +08:00
fi
2024-02-26 02:24:00 +08:00
- name : Download RustDeskTempTopMostWindow artifacts
uses : actions/download-artifact@master
2024-02-26 10:25:45 +08:00
if : ${{ inputs.upload-artifact }}
2024-02-26 02:24:00 +08:00
with :
name : topmostwindow-artifacts
2024-04-30 15:47:36 +08:00
path : "./rustdesk"
2024-02-26 02:24:00 +08:00
2024-04-30 15:47:36 +08:00
- name : Upload unsigned
if : env.UPLOAD_ARTIFACT == 'true'
uses : actions/upload-artifact@master
with :
name : rustdesk-unsigned-windows-${{ matrix.job.arch }}
path : rustdesk
2024-03-15 23:36:03 +08:00
- name : Sign rustdesk files
if : env.UPLOAD_ARTIFACT == 'true' && env.SIGN_BASE_URL != ''
shell : bash
run : |
2024-03-10 15:06:49 +08:00
pip3 install requests argparse
2024-03-15 18:07:17 +08:00
BASE_URL=${{ secrets.SIGN_BASE_URL }} SECRET_KEY=${{ secrets.SIGN_SECRET_KEY }} python3 res/job.py sign_files ./rustdesk/
2023-04-02 22:41:16 +08:00
- name : Build self-extracted executable
shell : bash
2023-07-03 17:08:50 +08:00
if : env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
run : |
pushd ./libs/portable
2024-02-26 02:20:37 +08:00
pip3 install -r requirements.txt
2024-03-15 18:07:17 +08:00
python3 ./generate.py -f ../../rustdesk/ -o . -e ../../rustdesk/rustdesk.exe
2023-04-02 22:41:16 +08:00
popd
mkdir -p ./SignOutput
2023-04-03 20:35:09 +08:00
mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.exe
2023-04-02 22:41:16 +08:00
2024-04-11 18:54:32 +08:00
- name : Add MSBuild to PATH
uses : microsoft/setup-msbuild@v2
2024-04-30 09:08:08 +08:00
2024-04-11 18:54:32 +08:00
- name : Build msi
2024-04-11 20:23:08 +08:00
if : env.UPLOAD_ARTIFACT == 'true'
2024-04-11 18:54:32 +08:00
run : |
pushd ./res/msi
2024-04-19 17:57:04 +08:00
python preprocess.py --arp -d ../../rustdesk
2024-04-11 18:54:32 +08:00
nuget restore msi.sln
msbuild msi.sln -p:Configuration=Release -p:Platform=x64 /p:TargetVersion=Windows10
2024-05-09 18:09:01 +08:00
mv ./Package/bin/x64/Release/en-us/Package.msi ../../SignOutput/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.msi
2024-04-11 18:54:32 +08:00
sha256sum ../../SignOutput/rustdesk-*.msi
2023-04-02 22:41:16 +08:00
- name : Sign rustdesk self-extracted file
2024-03-14 11:03:47 +08:00
if : env.UPLOAD_ARTIFACT == 'true' && env.SIGN_BASE_URL != ''
2024-03-10 15:06:49 +08:00
shell : bash
run : |
BASE_URL=${{ secrets.SIGN_BASE_URL }} SECRET_KEY=${{ secrets.SIGN_SECRET_KEY }} python3 res/job.py sign_files ./SignOutput
2023-04-02 22:41:16 +08:00
- name : Publish Release
uses : softprops/action-gh-release@v1
2023-07-03 17:08:50 +08:00
if : env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
2024-04-11 18:54:32 +08:00
./SignOutput/rustdesk-*.msi
2023-04-02 22:41:16 +08:00
./SignOutput/rustdesk-*.exe
# The fallback for the flutter version, we use Sciter for 32bit Windows.
build-for-windows-sciter :
name : ${{ matrix.job.target }} (${{ matrix.job.os }})
runs-on : ${{ matrix.job.os }}
# Temporarily disable this action due to additional test is needed.
2024-03-25 11:21:01 +08:00
# if: false
2023-04-02 22:41:16 +08:00
strategy :
fail-fast : false
matrix :
job :
2024-04-20 18:19:19 +08:00
# - { target: i686-pc-windows-msvc , os: windows-2022 }
# - { target: x86_64-pc-windows-gnu , os: windows-2022 }
- { target: i686-pc-windows-msvc, os: windows-2022, arch : x86 }
# - { target: aarch64-pc-windows-msvc, os: windows-2022 }
2023-04-02 22:41:16 +08:00
steps :
2023-11-04 03:41:48 +08:00
- name : Export GitHub Actions cache environment variables
uses : actions/github-script@v6
with :
script : |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
2023-04-02 22:41:16 +08:00
- name : Checkout source code
uses : actions/checkout@v3
- name : Install LLVM and Clang
2023-06-24 02:59:50 +08:00
uses : rustdesk-org/install-llvm-action-32bit@master
2023-04-02 22:41:16 +08:00
with :
version : ${{ env.LLVM_VERSION }}
- name : Install Rust toolchain
2023-11-23 05:09:56 +08:00
uses : dtolnay/rust-toolchain@v1
2023-04-02 22:41:16 +08:00
with :
2024-03-27 02:22:38 +08:00
toolchain : nightly-2023-10-13-${{ matrix.job.target }} # must use nightly here, because of abi_thiscall feature required
2023-11-23 05:09:56 +08:00
targets : ${{ matrix.job.target }}
2024-03-27 01:48:34 +08:00
components : "rustfmt"
2023-04-02 22:41:16 +08:00
- uses : Swatinem/rust-cache@v2
with :
prefix-key : ${{ matrix.job.os }}-sciter
2023-11-04 03:41:48 +08:00
- name : Setup vcpkg with Github Actions binary cache
uses : lukka/run-vcpkg@v11
2023-04-02 22:41:16 +08:00
with :
2023-11-04 03:41:48 +08:00
vcpkgDirectory : C:\vcpkg
2023-04-02 22:41:16 +08:00
vcpkgGitCommitId : ${{ env.VCPKG_COMMIT_ID }}
- name : Install vcpkg dependencies
run : |
2023-11-04 03:41:48 +08:00
$VCPKG_ROOT/vcpkg install --triplet x86-windows-static --x-install-root="$VCPKG_ROOT/installed"
shell : bash
2023-04-02 22:41:16 +08:00
- name : Build rustdesk
id : build
shell : bash
run : |
python3 res/inline-sciter.py
# Patch sciter x86
sed -i 's/branch = "dyn"/branch = "dyn_x86"/g' ./Cargo.toml
2024-05-06 15:26:21 +08:00
cargo build --features inline,vram,hwcodec --release --bins
2023-04-02 22:41:16 +08:00
mkdir -p ./Release
mv ./target/release/rustdesk.exe ./Release/rustdesk.exe
curl -LJ -o ./Release/sciter.dll https://github.com/c-smile/sciter-sdk/raw/master/bin.win/x32/sciter.dll
echo "output_folder=./Release" >> $GITHUB_OUTPUT
2024-04-21 14:55:42 +08:00
curl -LJ -o ./usbmmidd_v2.zip https://github.com/rustdesk-org/rdev/releases/download/usbmmidd_v2/usbmmidd_v2.zip
unzip usbmmidd_v2.zip
2024-04-23 17:00:41 +08:00
# Do not remove x64 files, because the user may run the 32bit version on a 64bit system.
# Do not remove ./usbmmidd_v2/deviceinstaller64.exe, as x86 exe cannot install and uninstall drivers when running on x64,
# we need the x64 exe to install and uninstall the driver.
rm -rf ./usbmmidd_v2/deviceinstaller.exe ./usbmmidd_v2/usbmmidd.bat
2024-04-21 14:55:42 +08:00
mv ./usbmmidd_v2 ./Release || true
2023-04-02 22:41:16 +08:00
2023-09-01 21:11:23 +08:00
- name : find Runner.res
# Windows: find Runner.res (compiled from ./flutter/windows/runner/Runner.rc), copy to ./Runner.res
# Runner.rc does not contain actual version, but Runner.res does
continue-on-error : true
shell : bash
run : |
2023-09-03 01:52:29 +08:00
runner_res=$(find . -name "Runner.res");
2023-09-02 19:29:03 +08:00
if [ "$runner_res" == "" ]; then
2023-09-03 01:52:29 +08:00
echo "Runner.res: not found";
2023-09-02 00:29:10 +08:00
else
2023-09-03 01:52:29 +08:00
echo "Runner.res: $runner_res";
cp $runner_res ./libs/portable/Runner.res;
echo "list ./libs/portable/Runner.res";
ls -l ./libs/portable/Runner.res;
2023-09-01 21:11:23 +08:00
fi
2023-04-02 22:41:16 +08:00
- name : Sign rustdesk files
2024-03-14 11:03:47 +08:00
if : env.UPLOAD_ARTIFACT == 'true' && env.SIGN_BASE_URL != ''
2024-03-10 15:06:49 +08:00
shell : bash
run : |
pip3 install requests argparse
BASE_URL=${{ secrets.SIGN_BASE_URL }} SECRET_KEY=${{ secrets.SIGN_SECRET_KEY }} python3 res/job.py sign_files ./Release/
2023-04-02 22:41:16 +08:00
- name : Build self-extracted executable
shell : bash
run : |
pushd ./libs/portable
pip3 install -r requirements.txt
python3 ./generate.py -f ../../Release/ -o . -e ../../Release/rustdesk.exe
popd
mkdir -p ./SignOutput
2023-04-03 20:35:09 +08:00
mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}-sciter.exe
2024-03-04 19:53:17 +08:00
mv ./Release ./rustdesk
2024-03-04 18:12:12 +08:00
tar czf rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.tar.gz rustdesk
2023-11-04 03:41:48 +08:00
2023-04-02 22:41:16 +08:00
- name : Sign rustdesk self-extracted file
2024-03-14 11:03:47 +08:00
if : env.UPLOAD_ARTIFACT == 'true' && env.SIGN_BASE_URL != ''
2024-03-10 15:06:49 +08:00
shell : bash
run : |
BASE_URL=${{ secrets.SIGN_BASE_URL }} SECRET_KEY=${{ secrets.SIGN_SECRET_KEY }} python3 res/job.py sign_files ./SignOutput/
2023-04-02 22:41:16 +08:00
- name : Publish Release
uses : softprops/action-gh-release@v1
2023-07-03 17:08:50 +08:00
if : env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
./SignOutput/rustdesk-*.exe
2024-03-04 18:12:12 +08:00
./rustdesk-*.tar.gz
2023-04-02 22:41:16 +08:00
2024-04-28 12:58:15 +08:00
build-for-macOS-arm64-selfhost :
2024-04-28 12:14:00 +08:00
# use build-for-macOS instead
if : false
2024-03-17 11:17:23 +08:00
runs-on : [ self-hosted, macOS, ARM64]
steps :
- name : Export GitHub Actions cache environment variables
uses : actions/github-script@v6
with :
script : |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name : Checkout source code
uses : actions/checkout@v3
- name : Install flutter rust bridge deps
shell : bash
run : |
cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid"
pushd flutter && flutter pub get && popd
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/macos/Runner/bridge_generated.h
- name : Build rustdesk
run : |
2024-04-18 13:12:45 +08:00
./build.py --flutter --hwcodec
2024-03-25 15:43:18 +08:00
- name : create unsigned dmg
if : env.UPLOAD_ARTIFACT == 'true'
run : |
CREATE_DMG="$(command -v create-dmg)"
CREATE_DMG="$(readlink -f "$CREATE_DMG")"
sed -i -e 's/MAXIMUM_UNMOUNTING_ATTEMPTS=3/MAXIMUM_UNMOUNTING_ATTEMPTS=7/' "$CREATE_DMG"
create-dmg --icon "RustDesk.app" 200 190 --hide-extension "RustDesk.app" --window-size 800 400 --app-drop-link 600 185 rustdesk-${{ env.VERSION }}-arm64.dmg ./flutter/build/macos/Build/Products/Release/RustDesk.app
2024-03-17 11:17:23 +08:00
2024-03-25 11:21:01 +08:00
- name : Upload unsigned macOS app
if : env.UPLOAD_ARTIFACT == 'true'
uses : actions/upload-artifact@master
with :
name : rustdesk-unsigned-macos-arm64
2024-03-25 15:43:18 +08:00
path : rustdesk-${{ env.VERSION }}-arm64.dmg # can not upload the directory directly or tar.gz file, which destroy the link structure, causing the codesign failed
2024-03-25 11:21:01 +08:00
2024-03-17 11:17:23 +08:00
- name : Codesign app and create signed dmg
if : env.MACOS_P12_BASE64 != null && env.UPLOAD_ARTIFACT == 'true'
run : |
# Patch create-dmg to give more attempts to unmount image
CREATE_DMG="$(command -v create-dmg)"
CREATE_DMG="$(readlink -f "$CREATE_DMG")"
sed -i -e 's/MAXIMUM_UNMOUNTING_ATTEMPTS=3/MAXIMUM_UNMOUNTING_ATTEMPTS=7/' "$CREATE_DMG"
# start sign the rustdesk.app and dmg
2024-03-25 15:43:18 +08:00
rm -rf *.dmg || true
2024-03-17 11:17:23 +08:00
codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep --strict ./flutter/build/macos/Build/Products/Release/RustDesk.app -vvv
create-dmg --icon "RustDesk.app" 200 190 --hide-extension "RustDesk.app" --window-size 800 400 --app-drop-link 600 185 rustdesk-${{ env.VERSION }}.dmg ./flutter/build/macos/Build/Products/Release/RustDesk.app
codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep --strict rustdesk-${{ env.VERSION }}.dmg -vvv
# notarize the rustdesk-${{ env.VERSION }}.dmg
rcodesign notary-submit --api-key-path ~/.p12/api-key.json --staple rustdesk-${{ env.VERSION }}.dmg
- name : Rename rustdesk
if : env.UPLOAD_ARTIFACT == 'true'
run : |
for name in rustdesk*??.dmg; do
mv "$name" "${name%%.dmg}-aarch64.dmg"
done
- name : Publish DMG package
if : env.UPLOAD_ARTIFACT == 'true'
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
rustdesk*-aarch64.dmg
2024-04-26 19:00:38 +08:00
build-rustdesk-ios :
if : ${{ inputs.upload-artifact }}
2024-05-02 13:36:01 +08:00
name : build rustdesk ios ipa
2024-04-28 12:14:00 +08:00
runs-on : ${{ matrix.job.os }}
strategy :
fail-fast : false
matrix :
job :
- {
arch : aarch64,
target : aarch64-apple-ios,
os : macos-13,
}
steps :
- name : Export GitHub Actions cache environment variables
uses : actions/github-script@v6
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 : |
brew install nasm
- name : Checkout source code
uses : actions/checkout@v3
- name : Install flutter
uses : subosito/flutter-action@v2
with :
channel : "stable"
flutter-version : ${{ env.FLUTTER_VERSION }}
- name : Setup vcpkg with Github Actions binary cache
uses : lukka/run-vcpkg@v11
with :
vcpkgGitCommitId : ${{ env.VCPKG_COMMIT_ID }}
- name : Install vcpkg dependencies
run : |
$VCPKG_ROOT/vcpkg install --triplet arm64-ios --x-install-root="$VCPKG_ROOT/installed"
shell : bash
- name : Install Rust toolchain
uses : dtolnay/rust-toolchain@v1
with :
toolchain : ${{ env.RUST_VERSION }}
targets : ${{ matrix.job.target }}
components : "rustfmt"
- uses : Swatinem/rust-cache@v2
with :
prefix-key : rustdesk-lib-cache-ios
2024-05-02 13:36:01 +08:00
key : ${{ matrix.job.target }}
2024-04-28 12:14:00 +08:00
- name : Install flutter rust bridge deps
shell : bash
run : |
cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid"
pushd flutter && flutter pub get && popd
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/ios/Runner/bridge_generated.h
- name : Build rustdesk lib
run : |
rustup target add ${{ matrix.job.target }}
cargo build --features flutter,hwcodec --release --target aarch64-apple-ios --lib
- name : Build rustdesk
shell : bash
run : |
pushd flutter
# flutter build ipa --release --obfuscate --split-debug-info=./split-debug-info --no-codesign
# for easy debugging
flutter build ipa --release --no-codesign
# - name: Upload Artifacts
# # if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true'
# uses: actions/upload-artifact@master
# with:
# name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk
# path: flutter/build/ios/ipa/*.ipa
# - name: Publish ipa package
# # if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true'
# uses: softprops/action-gh-release@v1
# with:
# prerelease: true
# tag_name: ${{ env.TAG_NAME }}
# files: |
# flutter/build/ios/ipa/*.ipa
build-rustdesk-ios-selfhost :
#if: ${{ inputs.upload-artifact }}
if : false
2024-04-26 19:00:38 +08:00
runs-on : [ self-hosted, macOS, ARM64]
strategy :
fail-fast : false
steps :
- name : Export GitHub Actions cache environment variables
uses : actions/github-script@v6
with :
script : |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name : Checkout source code
uses : actions/checkout@v3
# $VCPKG_ROOT/vcpkg install --triplet arm64-ios --x-install-root="$VCPKG_ROOT/installed"
- name : Install flutter rust bridge deps
shell : bash
run : |
cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid"
pushd flutter && flutter pub get && popd
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/ios/Runner/bridge_generated.h
- name : Build rustdesk lib
run : |
cargo build --features flutter,hwcodec --release --target aarch64-apple-ios --lib
- name : Build rustdesk
2024-04-26 19:16:52 +08:00
# ios sdk not installed on this machine, I will install it later after I am back home
if : false
2024-04-26 19:00:38 +08:00
shell : bash
run : |
pushd flutter
# flutter build ipa --release --obfuscate --split-debug-info=./split-debug-info --no-codesign
# for easy debugging
flutter build ipa --release --no-codesign
# - name: Upload Artifacts
# # if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true'
# uses: actions/upload-artifact@master
# with:
# name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk
# path: flutter/build/ios/ipa/*.ipa
# - name: Publish ipa package
# # if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true'
# uses: softprops/action-gh-release@v1
# with:
# prerelease: true
# tag_name: ${{ env.TAG_NAME }}
# files: |
# flutter/build/ios/ipa/*.ipa
2023-04-02 22:41:16 +08:00
build-for-macOS :
2024-04-30 09:08:08 +08:00
name : ${{ matrix.job.target }}
2023-04-02 22:41:16 +08:00
runs-on : ${{ matrix.job.os }}
strategy :
fail-fast : false
matrix :
job :
- {
target : x86_64-apple-darwin,
2024-04-28 11:43:53 +08:00
os : macos-13, #macos-latest or macos-14 use M1 now, https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#:~:text=14%20GB-,macos%2Dlatest%20or%20macos%2D14,-The%20macos%2Dlatestlabel
2024-05-28 16:42:30 +08:00
extra-build-args : "" ,
2024-03-25 11:21:01 +08:00
arch : x86_64,
2023-04-02 22:41:16 +08:00
}
2024-04-28 12:14:00 +08:00
- {
2024-04-30 09:08:08 +08:00
target : aarch64-apple-darwin,
os : macos-latest,
2024-05-28 16:42:30 +08:00
# extra-build-args: "--disable-flutter-texture-render", # disable this for mac, because we see a lot of users reporting flickering both on arm and x64, and we can not confirm if texture rendering has better performance if htere is no vram, https://github.com/rustdesk/rustdesk/issues/6296
extra-build-args : "" ,
2024-04-30 09:08:08 +08:00
arch : aarch64,
2024-04-28 12:14:00 +08:00
}
2023-04-02 22:41:16 +08:00
steps :
2023-11-04 03:41:48 +08:00
- name : Export GitHub Actions cache environment variables
uses : actions/github-script@v6
with :
script : |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
2023-04-02 22:41:16 +08:00
- name : Checkout source code
uses : actions/checkout@v3
- name : Import the codesign cert
if : env.MACOS_P12_BASE64 != null
uses : apple-actions/import-codesign-certs@v1
2023-11-04 03:41:48 +08:00
with :
2023-04-02 22:41:16 +08:00
p12-file-base64 : ${{ secrets.MACOS_P12_BASE64 }}
p12-password : ${{ secrets.MACOS_P12_PASSWORD }}
keychain : rustdesk
2023-11-04 03:41:48 +08:00
2023-04-02 22:41:16 +08:00
- name : Check sign and import sign key
if : env.MACOS_P12_BASE64 != null
run : |
security default-keychain -s rustdesk.keychain
security find-identity -v
- name : Import notarize key
if : env.MACOS_P12_BASE64 != null
uses : timheuer/base64-to-file@v1.2
with :
# https://gregoryszorc.com/docs/apple-codesign/stable/apple_codesign_rcodesign.html#notarizing-and-stapling
fileName : rustdesk.json
fileDir : ${{ github.workspace }}
encodedString : ${{ secrets.MACOS_NOTARIZE_JSON }}
2023-11-04 03:41:48 +08:00
2023-04-02 22:41:16 +08:00
- name : Install rcodesign tool
if : env.MACOS_P12_BASE64 != null
shell : bash
2023-11-04 03:41:48 +08:00
run : |
2023-04-02 22:41:16 +08:00
pushd /tmp
wget https://github.com/indygreg/apple-platform-rs/releases/download/apple-codesign%2F0.22.0/apple-codesign-0.22.0-macos-universal.tar.gz
tar -zxvf apple-codesign-0.22.0-macos-universal.tar.gz
mv apple-codesign-0.22.0-macos-universal/rcodesign /usr/local/bin
popd
- name : Install build runtime
run : |
2023-11-15 22:03:40 +08:00
brew install llvm create-dmg nasm cmake gcc wget ninja pkg-config
2023-04-02 22:41:16 +08:00
- name : Install flutter
uses : subosito/flutter-action@v2
with :
channel : "stable"
flutter-version : ${{ env.FLUTTER_VERSION }}
- name : Install Rust toolchain
2023-11-23 05:09:56 +08:00
uses : dtolnay/rust-toolchain@v1
2023-04-02 22:41:16 +08:00
with :
2024-03-27 01:32:34 +08:00
toolchain : ${{ env.RUST_VERSION }}
2023-11-23 05:09:56 +08:00
targets : ${{ matrix.job.target }}
2024-03-27 01:48:34 +08:00
components : "rustfmt"
2023-04-02 22:41:16 +08:00
- uses : Swatinem/rust-cache@v2
with :
prefix-key : ${{ matrix.job.os }}
- name : Install flutter rust bridge deps
shell : bash
run : |
2023-06-06 07:39:44 +08:00
cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid"
2023-04-02 22:41:16 +08:00
pushd flutter && flutter pub get && popd
2023-06-29 13:25:17 +08:00
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/macos/Runner/bridge_generated.h
2023-04-02 22:41:16 +08:00
2023-11-04 03:41:48 +08:00
- name : Setup vcpkg with Github Actions binary cache
uses : lukka/run-vcpkg@v11
2023-04-02 22:41:16 +08:00
with :
vcpkgGitCommitId : ${{ env.VCPKG_COMMIT_ID }}
- name : Install vcpkg dependencies
run : |
2023-11-04 03:41:48 +08:00
$VCPKG_ROOT/vcpkg install --x-install-root="$VCPKG_ROOT/installed"
2023-04-02 22:41:16 +08:00
- name : Show version information (Rust, cargo, Clang)
shell : bash
run : |
clang --version || true
rustup -V
rustup toolchain list
rustup default
cargo -V
rustc -V
- name : Build rustdesk
run : |
2024-04-30 23:19:59 +08:00
./build.py --flutter --hwcodec ${{ matrix.job.extra-build-args }}
2024-03-25 15:43:18 +08:00
- name : create unsigned dmg
if : env.UPLOAD_ARTIFACT == 'true'
run : |
CREATE_DMG="$(command -v create-dmg)"
CREATE_DMG="$(readlink -f "$CREATE_DMG")"
sed -i -e 's/MAXIMUM_UNMOUNTING_ATTEMPTS=3/MAXIMUM_UNMOUNTING_ATTEMPTS=7/' "$CREATE_DMG"
2024-04-28 12:14:00 +08:00
create-dmg --icon "RustDesk.app" 200 190 --hide-extension "RustDesk.app" --window-size 800 400 --app-drop-link 600 185 rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.dmg ./flutter/build/macos/Build/Products/Release/RustDesk.app
2023-04-02 22:41:16 +08:00
2024-03-25 11:21:01 +08:00
- name : Upload unsigned macOS app
if : env.UPLOAD_ARTIFACT == 'true'
uses : actions/upload-artifact@master
with :
2024-04-28 12:14:00 +08:00
name : rustdesk-unsigned-macos-${{ matrix.job.arch }}
path : rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.dmg # can not upload the directory directly or tar.gz, which destroy the link structure, causing the codesign failed
2024-03-25 11:21:01 +08:00
2023-04-02 22:41:16 +08:00
- name : Codesign app and create signed dmg
2023-11-22 16:43:47 +08:00
if : env.MACOS_P12_BASE64 != null && env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
run : |
2023-11-08 02:55:43 +08:00
# Patch create-dmg to give more attempts to unmount image
2023-11-09 17:48:13 +08:00
CREATE_DMG="$(command -v create-dmg)"
CREATE_DMG="$(readlink -f "$CREATE_DMG")"
sed -i -e 's/MAXIMUM_UNMOUNTING_ATTEMPTS=3/MAXIMUM_UNMOUNTING_ATTEMPTS=7/' "$CREATE_DMG"
# Unlock keychain
2023-04-02 22:41:16 +08:00
security default-keychain -s rustdesk.keychain
security unlock-keychain -p ${{ secrets.MACOS_P12_PASSWORD }} rustdesk.keychain
# start sign the rustdesk.app and dmg
2024-03-25 15:43:18 +08:00
rm -rf *.dmg || true
2024-03-20 21:20:39 +08:00
codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep --strict ./flutter/build/macos/Build/Products/Release/RustDesk.app -vvv
2023-04-02 22:41:16 +08:00
create-dmg --icon "RustDesk.app" 200 190 --hide-extension "RustDesk.app" --window-size 800 400 --app-drop-link 600 185 rustdesk-${{ env.VERSION }}.dmg ./flutter/build/macos/Build/Products/Release/RustDesk.app
2024-03-20 21:20:39 +08:00
codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep --strict rustdesk-${{ env.VERSION }}.dmg -vvv
2023-04-02 22:41:16 +08:00
# notarize the rustdesk-${{ env.VERSION }}.dmg
rcodesign notary-submit --api-key-path ${{ github.workspace }}/rustdesk.json --staple rustdesk-${{ env.VERSION }}.dmg
- name : Rename rustdesk
2023-11-22 16:43:47 +08:00
if : env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
run : |
for name in rustdesk*??.dmg; do
2023-04-03 20:35:09 +08:00
mv "$name" "${name%%.dmg}-${{ matrix.job.arch }}.dmg"
2023-04-02 22:41:16 +08:00
done
- name : Publish DMG package
2023-07-03 17:08:50 +08:00
if : env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
2023-04-03 20:35:09 +08:00
rustdesk*-${{ matrix.job.arch }}.dmg
2023-04-02 22:41:16 +08:00
2024-04-30 15:47:36 +08:00
publish_unsigned :
2024-03-25 11:21:01 +08:00
needs :
- build-for-macOS
2024-04-30 15:47:36 +08:00
- build-for-windows-flutter
2024-03-25 11:21:01 +08:00
runs-on : ubuntu-latest
if : ${{ inputs.upload-artifact }}
steps :
- name : Download artifacts
uses : actions/download-artifact@master
with :
2024-04-28 12:14:00 +08:00
name : rustdesk-unsigned-macos-x86_64
2024-03-25 15:04:34 +08:00
path : ./
2024-03-25 11:21:01 +08:00
- name : Download Artifacts
uses : actions/download-artifact@master
with :
2024-04-28 12:14:00 +08:00
name : rustdesk-unsigned-macos-aarch64
2024-03-25 15:04:34 +08:00
path : ./
2024-04-30 15:47:36 +08:00
- name : Download Artifacts
uses : actions/download-artifact@master
with :
name : rustdesk-unsigned-windows-x86_64
path : ./windows-x86_64/
2024-04-30 15:50:02 +08:00
- name : Combine unsigned app
2024-03-25 11:21:01 +08:00
run : |
2024-05-02 15:28:04 +08:00
tar czf rustdesk-${{ env.VERSION }}-unsigned.tar.gz *.dmg windows-x86_64
2024-03-25 11:21:01 +08:00
2024-04-30 15:50:02 +08:00
- name : Publish unsigned app
2024-03-25 11:21:01 +08:00
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
2024-04-30 15:50:02 +08:00
files : rustdesk-${{ env.VERSION }}-unsigned.tar.gz
2024-03-25 11:21:01 +08:00
2023-04-02 22:41:16 +08:00
generate-bridge-linux :
uses : ./.github/workflows/bridge.yml
build-rustdesk-android :
needs : [ generate-bridge-linux]
2024-05-02 13:36:01 +08:00
name : build rustdesk android apk ${{ matrix.job.target }}
2023-04-02 22:41:16 +08:00
runs-on : ${{ matrix.job.os }}
strategy :
fail-fast : false
matrix :
job :
- {
2023-04-03 20:35:09 +08:00
arch : aarch64,
2023-04-02 22:41:16 +08:00
target : aarch64-linux-android,
os : ubuntu-20.04,
2024-03-25 11:21:01 +08:00
openssl-arch : android-arm64,
2023-04-02 22:41:16 +08:00
}
- {
2023-04-03 20:35:09 +08:00
arch : armv7,
2023-04-02 22:41:16 +08:00
target : armv7-linux-androideabi,
2023-04-03 20:22:17 +08:00
os : ubuntu-20.04,
2024-03-25 11:21:01 +08:00
openssl-arch : android-arm,
2023-04-02 22:41:16 +08:00
}
steps :
2023-11-04 03:41:48 +08:00
- name : Export GitHub Actions cache environment variables
uses : actions/github-script@v6
with :
script : |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
2023-04-02 22:41:16 +08:00
- name : Install dependencies
run : |
2023-11-04 03:41:48 +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 \
ninja-build \
openjdk-11-jdk-headless \
pkg-config \
tree \
2023-11-15 22:03:40 +08:00
wget
2023-11-04 03:41:48 +08:00
2023-04-02 22:41:16 +08:00
- name : Checkout source code
uses : actions/checkout@v3
- name : Install flutter
uses : subosito/flutter-action@v2
with :
channel : "stable"
2024-06-21 18:14:58 +08:00
flutter-version : ${{ env.ANDROID_FLUTTER_VERSION }}
2023-04-02 22:41:16 +08:00
- uses : nttld/setup-ndk@v1
id : setup-ndk
with :
ndk-version : ${{ env.NDK_VERSION }}
add-to-path : true
2023-11-04 03:41:48 +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
2023-04-02 22:41:16 +08:00
run : |
2023-11-04 03:41:48 +08:00
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
2023-04-02 22:41:16 +08:00
- name : Restore bridge files
uses : actions/download-artifact@master
with :
name : bridge-artifact
path : ./
- name : Install Rust toolchain
2023-11-23 05:09:56 +08:00
uses : dtolnay/rust-toolchain@v1
2023-04-02 22:41:16 +08:00
with :
2024-03-27 01:32:34 +08:00
toolchain : ${{ env.RUST_VERSION }}
2024-03-27 01:48:34 +08:00
components : "rustfmt"
2023-04-02 22:41:16 +08:00
- uses : Swatinem/rust-cache@v2
with :
2023-11-04 03:41:48 +08:00
prefix-key: rustdesk-lib-cache-android # TODO : drop '-android' part after caches are invalidated
2024-05-02 13:36:01 +08:00
key : ${{ matrix.job.target }}
2023-04-02 22:41:16 +08:00
2024-06-21 18:14:58 +08:00
- name : fix android for flutter 3.13
if : $${{ env.ANDROID_FLUTTER_VERSION == '3.13.9' }}
run : |
sed -i 's/uni_links_desktop/#uni_links_desktop/g' flutter/pubspec.yaml
cd flutter/lib
find . | grep dart | xargs sed -i 's/textScaler: TextScaler.linear(\(.*\)),/textScaleFactor : \1,/g'
2023-04-02 22:41:16 +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 : |
2023-11-04 03:41:48 +08:00
rustup target add ${{ matrix.job.target }}
2023-05-25 22:49:55 +08:00
cargo install cargo-ndk --version ${{ env.CARGO_NDK_VERSION }}
2023-04-02 22:41:16 +08:00
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
- name : Build rustdesk
shell : bash
env :
JAVA_HOME : /usr/lib/jvm/java-11-openjdk-amd64
run : |
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
2023-11-04 03:41:48 +08:00
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/
2023-04-02 22:41:16 +08:00
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
2023-04-03 20:35:09 +08:00
mv build/app/outputs/flutter-apk/app-arm64-v8a-release.apk ../rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk
2023-04-02 22:41:16 +08:00
;;
armv7-linux-androideabi)
mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a
2023-11-04 03:41:48 +08:00
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/
2023-04-02 22:41:16 +08:00
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
2023-04-03 20:35:09 +08:00
mv build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk ../rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk
2023-04-02 22:41:16 +08:00
;;
esac
popd
mkdir -p signed-apk; pushd signed-apk
2023-04-03 20:35:09 +08:00
mv ../rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk .
2023-11-04 03:41:48 +08:00
2023-04-02 22:41:16 +08:00
- uses : r0adkll/sign-android-release@v1
name : Sign app APK
if : env.ANDROID_SIGNING_KEY != null
id : sign-rustdesk
with :
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"
- name : Upload Artifacts
2023-07-03 17:08:50 +08:00
if : env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
uses : actions/upload-artifact@master
with :
2023-04-03 20:35:09 +08:00
name : rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk
2023-04-02 22:41:16 +08:00
path : ${{steps.sign-rustdesk.outputs.signedReleaseFile}}
- name : Publish signed apk package
2023-07-03 17:08:50 +08:00
if : env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
${{steps.sign-rustdesk.outputs.signedReleaseFile}}
- name : Publish unsigned apk package
2023-07-03 17:08:50 +08:00
if : env.ANDROID_SIGNING_KEY == null && env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
2023-04-03 20:35:09 +08:00
signed-apk/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk
2023-04-02 22:41:16 +08:00
2024-05-02 13:23:32 +08:00
build-rustdesk-linux :
2023-11-04 03:41:48 +08:00
needs : [ generate-bridge-linux]
2024-05-02 13:45:14 +08:00
name : build rustdesk linux ${{ matrix.job.target }}
2024-04-30 09:08:08 +08:00
runs-on : ${{ matrix.job.on }}
2023-04-02 22:41:16 +08:00
strategy :
fail-fast : false
matrix :
# use a high level qemu-user-static
job :
- {
arch : x86_64,
target : x86_64-unknown-linux-gnu,
2024-04-30 09:08:08 +08:00
distro : ubuntu18.04,
on : ubuntu-20.04,
2023-04-02 22:41:16 +08:00
}
- {
arch : aarch64,
target : aarch64-unknown-linux-gnu,
2024-04-30 09:08:08 +08:00
distro : ubuntu18.04,
on : [ self-hosted, Linux, ARM64],
2023-04-02 22:41:16 +08:00
}
steps :
2023-11-04 03:41:48 +08:00
- name : Export GitHub Actions cache environment variables
uses : actions/github-script@v6
with :
script : |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
2024-04-30 09:08:08 +08:00
- name : Maximize build space
if : ${{ matrix.job.arch == 'x86_64' }}
2023-11-04 03:41:48 +08:00
run : |
2024-04-30 09:08:08 +08:00
sudo rm -rf /opt/ghc
sudo rm -rf /usr/local/lib/android
sudo rm -rf /usr/share/dotnet
sudo apt-get update -y
sudo apt-get install -y nasm qemu-user-static
2023-04-02 22:41:16 +08:00
- name : Checkout source code
uses : actions/checkout@v3
2024-04-30 09:08:08 +08:00
- name : Set Swap Space
if : ${{ matrix.job.arch == 'x86_64' }}
uses : pierotofy/set-swap-space@master
with :
swap-size-gb : 12
2023-04-02 22:41:16 +08:00
- name : Free Space
run : |
2023-08-19 17:41:28 +08:00
df -h
free -m
2023-04-02 22:41:16 +08:00
- name : Install Rust toolchain
2023-11-23 05:09:56 +08:00
uses : dtolnay/rust-toolchain@v1
2023-04-02 22:41:16 +08:00
with :
2024-03-27 01:32:34 +08:00
toolchain : ${{ env.RUST_VERSION }}
2023-11-23 05:09:56 +08:00
targets : ${{ matrix.job.target }}
2024-03-27 01:48:34 +08:00
components : "rustfmt"
2023-11-04 03:41:48 +08:00
2023-07-17 07:52:18 +08:00
- name : Save Rust toolchain version
run : |
RUST_TOOLCHAIN_VERSION=$(cargo --version | awk '{print $2}')
echo "RUST_TOOLCHAIN_VERSION=$RUST_TOOLCHAIN_VERSION" >> $GITHUB_ENV
2023-04-02 22:41:16 +08:00
- name : Disable rust bridge build
run : |
# only build cdylib
sed -i "s/\[\"cdylib\", \"staticlib\", \"rlib\"\]/\[\"cdylib\"\]/g" Cargo.toml
- name : Restore bridge files
uses : actions/download-artifact@master
with :
name : bridge-artifact
path : ./
2023-11-04 03:41:48 +08:00
- name : Setup vcpkg with Github Actions binary cache
uses : lukka/run-vcpkg@v11
2023-04-02 22:41:16 +08:00
with :
2023-11-04 03:41:48 +08:00
vcpkgDirectory : /opt/artifacts/vcpkg
vcpkgGitCommitId : ${{ env.VCPKG_COMMIT_ID }}
- name : Install vcpkg dependencies
2024-05-02 13:36:01 +08:00
if : env.UPLOAD_ARTIFACT == 'true'
2023-11-04 03:41:48 +08:00
run : |
case ${{ matrix.job.target }} in
aarch64-unknown-linux-gnu)
$VCPKG_ROOT/vcpkg install --triplet arm64-linux --x-install-root="$VCPKG_ROOT/installed"
;;
2024-04-30 09:08:08 +08:00
x86_64-unknown-linux-gnu)
$VCPKG_ROOT/vcpkg install --x-install-root="$VCPKG_ROOT/installed"
2023-11-04 03:41:48 +08:00
;;
esac
shell : bash
2023-04-02 22:41:16 +08:00
2024-05-02 13:23:32 +08:00
- name : Restore bridge files
uses : actions/download-artifact@master
with :
name : bridge-artifact
path : ./
2023-06-24 02:59:50 +08:00
- uses : rustdesk-org/run-on-arch-action@amd64-support
2024-05-02 13:46:01 +08:00
name : Build rustdesk
2023-04-02 22:41:16 +08:00
id : vcpkg
2024-05-02 13:36:01 +08:00
if : env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
with :
arch : ${{ matrix.job.arch }}
2024-04-30 09:08:08 +08:00
distro : ${{ matrix.job.distro }}
2023-04-02 22:41:16 +08:00
githubToken : ${{ github.token }}
setup : |
ls -l "${PWD}"
ls -l /opt/artifacts/vcpkg/installed
dockerRunArgs : |
--volume "${PWD}:/workspace"
--volume "/opt/artifacts:/opt/artifacts"
shell : /bin/bash
install : |
2023-11-04 03:41:48 +08:00
apt-get update -y
2023-04-02 22:41:16 +08:00
echo -e "installing deps"
2023-11-04 03:41:48 +08:00
apt-get install -y \
2024-05-02 13:23:32 +08:00
build-essential \
2023-11-04 03:41:48 +08:00
clang \
cmake \
curl \
gcc \
git \
g++ \
libappindicator3-dev \
libasound2-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 \
ninja-build \
pkg-config \
tree \
2024-05-02 13:23:32 +08:00
python3 \
rpm \
unzip \
wget \
xz-utils
2023-04-02 22:41:16 +08:00
# we have libopus compiled by us.
2023-11-04 03:41:48 +08:00
apt-get remove -y libopus-dev || true
2023-04-02 22:41:16 +08:00
# output devs
ls -l ./
tree -L 3 /opt/artifacts/vcpkg/installed
run : |
# disable git safe.directory
git config --global --add safe.directory "*"
# rust
pushd /opt
2023-05-12 11:20:22 +08:00
# do not use rustup, because memory overflow in qemu
2023-07-17 07:52:18 +08:00
wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }}.tar.gz
2023-04-02 22:41:16 +08:00
tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz
2023-07-17 07:52:18 +08:00
cd rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} && ./install.sh
rm -rf rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }}
2023-04-02 22:41:16 +08:00
# edit config
mkdir -p ~/.cargo/
echo """
[ source.crates-io]
registry = 'https://github.com/rust-lang/crates.io-index'
"" " > ~/.cargo/config
cat ~/.cargo/config
# start build
pushd /workspace
export VCPKG_ROOT=/opt/artifacts/vcpkg
2024-04-30 22:41:45 +08:00
if [[ "${{ matrix.job.arch }}" == "aarch64" ]]; then
2024-05-01 10:20:11 +08:00
export JOBS="--jobs 3"
2024-04-30 22:41:45 +08:00
else
export JOBS=""
fi
2024-04-30 23:14:16 +08:00
echo $JOBS
2024-05-28 16:42:30 +08:00
cargo build --lib $JOBS --features hwcodec,flutter --release
2024-05-10 14:03:40 +08:00
rm -rf target/release/deps target/release/build
rm -rf ~/.cargo
2023-04-02 22:41:16 +08:00
2024-05-02 14:57:17 +08:00
# Setup Flutter
2024-05-02 13:23:32 +08:00
# disable git safe.directory
git config --global --add safe.directory "*"
pushd /workspace
case ${{ matrix.job.arch }} in
aarch64)
export PATH=/opt/flutter-elinux/bin:$PATH
sed -i "s/flutter build linux --release/flutter-elinux build linux --verbose/g" ./build.py
export ARCH=arm64
sed -i "s/x64\/release/arm64\/release/g" ./build.py
;;
x86_64)
export PATH=/opt/flutter/bin:$PATH
;;
esac
popd
pushd /opt
wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${{ env.FLUTTER_VERSION }}-stable.tar.xz
tar xf flutter_linux_${{ env.FLUTTER_VERSION }}-stable.tar.xz
case ${{ matrix.job.arch }} in
aarch64)
# clone repo and reset to flutter ${{ env.FLUTTER_VERSION }}
git clone https://github.com/sony/flutter-elinux.git || true
pushd flutter-elinux
git fetch
git reset --hard ${{ env.FLUTTER_VERSION }}
bin/flutter-elinux doctor -v
bin/flutter-elinux precache --linux
popd
cp -R flutter/bin/cache/artifacts/engine/linux-x64/shader_lib flutter-elinux/flutter/bin/cache/artifacts/engine/linux-arm64
2024-05-10 14:03:40 +08:00
rm -rf flutter
2024-05-02 13:23:32 +08:00
;;
x86_64)
flutter doctor -v
;;
esac
2024-05-02 14:57:17 +08:00
# build flutter
2024-05-02 13:23:32 +08:00
pushd /workspace
export CARGO_INCREMENTAL=0
python3 ./build.py --flutter --skip-cargo
2024-05-02 14:23:59 +08:00
for name in rustdesk*??.deb; do
mv "$name" "${name%%.deb}-${{ matrix.job.arch }}.deb"
done
2024-05-02 14:57:17 +08:00
2024-05-02 13:23:32 +08:00
# rpm package
echo -e "start packaging fedora package"
pushd /workspace
case ${{ matrix.job.arch }} in
aarch64)
sed -i "s/linux\/x64/linux\/arm64/g" ./res/rpm-flutter.spec
;;
esac
HBB=`pwd` rpmbuild ./res/rpm-flutter.spec -bb
pushd ~/rpmbuild/RPMS/${{ matrix.job.arch }}
2024-05-02 14:57:17 +08:00
for name in rustdesk*??.rpm; do
mv "$name" /workspace/"${name%%.rpm}.rpm"
done
2024-05-02 13:23:32 +08:00
# rpm suse package
echo -e "start packaging suse package"
pushd /workspace
case ${{ matrix.job.arch }} in
aarch64)
sed -i "s/linux\/x64/linux\/arm64/g" ./res/rpm-flutter-suse.spec
;;
esac
HBB=`pwd` rpmbuild ./res/rpm-flutter-suse.spec -bb
pushd ~/rpmbuild/RPMS/${{ matrix.job.arch }}
for name in rustdesk*??.rpm; do
2024-05-02 14:57:17 +08:00
mv "$name" /workspace/"${name%%.rpm}-suse.rpm"
2024-05-02 13:23:32 +08:00
done
- name : Publish debian/rpm package
if : env.UPLOAD_ARTIFACT == 'true'
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
rustdesk-*.deb
rustdesk-*.rpm
2024-05-02 13:36:01 +08:00
- name : Upload deb
2023-04-02 22:41:16 +08:00
uses : actions/upload-artifact@master
2024-05-02 13:36:01 +08:00
if : env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
with :
2024-05-02 13:23:32 +08:00
name : rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb
path : rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb
2024-05-02 18:14:42 +08:00
# only x86_64 for arch since we can not find newest arm64 docker image to build
# old arch image does not make sense for arch since it is "arch" which always update to date
# and failed to makepkg arm64 on x86_64
- name : Patch archlinux PKGBUILD
if : matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true'
run : |
sed -i "s/x86_64/${{ matrix.job.arch }}/g" res/PKGBUILD
if [[ "${{ matrix.job.arch }}" == "aarch64" ]]; then
2024-05-08 18:09:29 +08:00
sed -i "s/x86_64/aarch64/g" ./res/PKGBUILD
2024-05-02 18:14:42 +08:00
fi
- name : Build archlinux package
if : matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true'
uses : rustdesk-org/arch-makepkg-action@master
with :
2024-05-08 21:29:33 +08:00
packages :
2024-05-02 18:14:42 +08:00
scripts : |
cd res && HBB=`pwd`/.. FLUTTER=1 makepkg -f
- name : Publish archlinux package
if : matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true'
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
res/rustdesk-${{ env.VERSION }}*.zst
2023-04-02 22:41:16 +08:00
build-rustdesk-sciter-arm :
2023-07-12 16:07:55 +08:00
if : ${{ inputs.upload-artifact }}
2024-05-02 13:23:32 +08:00
needs : build-rustdesk-linux # not for dep, just make it run later for parallelism
2023-08-20 21:44:13 +08:00
runs-on : [ self-hosted, Linux, ARM64]
2024-04-30 09:16:22 +08:00
name : build-rustdesk-sciter-arm ${{ matrix.job.target }}
2023-04-02 22:41:16 +08:00
strategy :
fail-fast : false
matrix :
# use a high level qemu-user-static
job :
- {
arch : armv7,
target : armv7-unknown-linux-gnueabihf,
deb-arch : armhf,
use-cross : true ,
}
steps :
2023-11-04 03:41:48 +08:00
- name : Export GitHub Actions cache environment variables
uses : actions/github-script@v6
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 \
2023-11-07 18:02:26 +08:00
cmake \
2023-11-04 03:41:48 +08:00
crossbuild-essential-armhf \
2023-11-07 17:55:31 +08:00
curl \
2023-11-07 18:08:44 +08:00
g++ \
gcc \
git \
2023-11-04 03:41:48 +08:00
nasm \
2023-11-07 18:08:44 +08:00
ninja-build \
2023-11-04 03:41:48 +08:00
pkg-config \
2023-11-07 17:55:31 +08:00
unzip \
xz-utils \
zip
2023-04-02 22:41:16 +08:00
- name : Checkout source code
uses : actions/checkout@v3
- name : Free Space
run : |
2023-08-19 17:41:28 +08:00
df -h
free -m
2023-04-02 22:41:16 +08:00
- name : Install Rust toolchain
2023-11-23 05:09:56 +08:00
uses : dtolnay/rust-toolchain@v1
2023-04-02 22:41:16 +08:00
with :
2024-03-27 01:32:34 +08:00
toolchain : ${{ env.RUST_VERSION }}
2023-11-23 05:09:56 +08:00
targets : ${{ matrix.job.target }}
2024-03-27 01:48:34 +08:00
components : "rustfmt"
2023-11-04 03:41:48 +08:00
2023-07-17 07:52:18 +08:00
- name : Save Rust toolchain version
run : |
RUST_TOOLCHAIN_VERSION=$(cargo --version | awk '{print $2}')
echo "RUST_TOOLCHAIN_VERSION=$RUST_TOOLCHAIN_VERSION" >> $GITHUB_ENV
2023-04-02 22:41:16 +08:00
2023-11-04 03:41:48 +08:00
- name : Setup vcpkg with Github Actions binary cache
uses : lukka/run-vcpkg@v11
2023-04-02 22:41:16 +08:00
with :
2023-11-04 03:41:48 +08:00
vcpkgDirectory : /opt/artifacts/vcpkg
vcpkgGitCommitId : ${{ env.VCPKG_COMMIT_ID }}
- name : Install vcpkg dependencies
run : |
2023-11-15 18:47:33 +08:00
cp $PWD/res/vcpkg/linux.cmake $VCPKG_ROOT/scripts/toolchains/linux.cmake
2023-11-04 03:41:48 +08:00
$VCPKG_ROOT/vcpkg install --triplet arm-linux --x-install-root="$VCPKG_ROOT/installed"
shell : bash
2023-04-02 22:41:16 +08:00
2023-06-24 02:59:50 +08:00
- uses : rustdesk-org/run-on-arch-action@amd64-support
2023-04-02 22:41:16 +08:00
name : Build rustdesk sciter binary for ${{ matrix.job.arch }}
id : vcpkg
with :
arch : ${{ matrix.job.arch }}
2023-07-13 11:25:02 +08:00
distro : ubuntu18.04-rustdesk
2023-04-02 22:41:16 +08:00
githubToken : ${{ github.token }}
setup : |
ls -l "${PWD}"
dockerRunArgs : |
--volume "${PWD}:/workspace"
--volume "/opt/artifacts:/opt/artifacts"
shell : /bin/bash
install : |
2023-11-04 03:41:48 +08:00
apt-get update -y
apt-get install -y \
build-essential \
clang \
cmake \
curl \
gcc \
git \
g++ \
libappindicator3-dev \
libasound2-dev \
libclang-dev \
libdbus-1-dev \
libglib2.0-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libgtk-3-dev \
liblzma-dev \
libpam0g-dev \
libpulse-dev \
libva-dev \
libvdpau-dev \
libxcb-randr0-dev \
libxcb-shape0-dev \
libxcb-xfixes0-dev \
libxdo-dev \
libxfixes-dev \
nasm \
ninja-build \
pkg-config \
python3 \
rpm \
unzip \
wget \
2023-11-15 22:03:40 +08:00
xz-utils
2023-04-02 22:41:16 +08:00
run : |
# disable git safe.directory
git config --global --add safe.directory "*"
# rust
pushd /opt
2023-05-12 11:20:22 +08:00
# do not use rustup, because memory overflow in qemu
2023-07-17 07:52:18 +08:00
wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }}.tar.gz
2023-04-02 22:41:16 +08:00
tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz
2023-07-17 07:52:18 +08:00
cd rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} && ./install.sh
rm -rf rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }}
2023-04-02 22:41:16 +08:00
# edit config
mkdir -p ~/.cargo/
echo """
[ source.crates-io]
registry = 'https://github.com/rust-lang/crates.io-index'
"" " > ~/.cargo/config
cat ~/.cargo/config
2023-11-04 03:41:48 +08:00
2023-04-02 22:41:16 +08:00
# build
pushd /workspace
python3 ./res/inline-sciter.py
export VCPKG_ROOT=/opt/artifacts/vcpkg
export ARCH=armhf
2023-08-18 12:09:52 +08:00
export CARGO_INCREMENTAL=0
2024-05-10 14:19:06 +08:00
cargo build --features inline --release --bins --jobs 1
2023-04-02 22:41:16 +08:00
# package
mkdir -p ./Release
mv ./target/release/rustdesk ./Release/rustdesk
wget -O ./Release/libsciter-gtk.so https://github.com/c-smile/sciter-sdk/raw/master/bin.lnx/arm32/libsciter-gtk.so
./build.py --package ./Release
- name : Rename rustdesk
shell : bash
run : |
for name in rustdesk*??.deb; do
# use cp to duplicate deb files to fit other packages.
2023-04-06 09:31:36 +08:00
cp "$name" "${name%%.deb}-${{ matrix.job.arch }}-sciter.deb"
2023-04-02 22:41:16 +08:00
done
- name : Publish debian package
2024-05-02 13:36:01 +08:00
if : env.UPLOAD_ARTIFACT == 'true'
2023-04-02 22:41:16 +08:00
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
2023-04-03 20:35:09 +08:00
rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}-sciter.deb
2023-04-02 22:41:16 +08:00
2024-05-02 18:14:42 +08:00
build-appimage :
name : Build appimage ${{ matrix.job.target }}
2024-05-02 13:23:32 +08:00
needs : [ build-rustdesk-linux]
2024-05-02 17:03:20 +08:00
runs-on : ubuntu-20.04
2024-05-02 13:23:32 +08:00
if : ${{ inputs.upload-artifact }}
2023-04-02 22:41:16 +08:00
strategy :
fail-fast : false
matrix :
job :
2024-04-30 09:08:08 +08:00
- {
target : x86_64-unknown-linux-gnu,
arch : x86_64,
}
2023-04-02 22:41:16 +08:00
- {
target : aarch64-unknown-linux-gnu,
2024-04-30 09:08:08 +08:00
arch : aarch64,
2023-04-02 22:41:16 +08:00
}
steps :
- name : Checkout source code
uses : actions/checkout@v3
2024-05-02 13:23:32 +08:00
- name : Download Binary
2023-04-02 22:41:16 +08:00
uses : actions/download-artifact@master
with :
2023-04-03 20:35:09 +08:00
name : rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb
2024-05-02 13:23:32 +08:00
path : .
2023-04-02 22:41:16 +08:00
2024-05-02 13:23:32 +08:00
- name : Rename Binary
2023-04-02 22:41:16 +08:00
run : |
2024-05-08 20:07:57 +08:00
mv rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb appimage/rustdesk.deb
2023-04-02 22:41:16 +08:00
- name : Build appimage package
shell : bash
run : |
2024-05-02 19:32:53 +08:00
# install libarchive-tools for bsdtar command used in AppImageBuilder.yml
sudo apt-get update -y
sudo apt-get install -y libarchive-tools
2023-04-02 22:41:16 +08:00
# set-up appimage-builder
pushd /tmp
wget -O appimage-builder-x86_64.AppImage https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage
chmod +x appimage-builder-x86_64.AppImage
sudo mv appimage-builder-x86_64.AppImage /usr/local/bin/appimage-builder
popd
# run appimage-builder
pushd appimage
2024-04-30 09:08:08 +08:00
sudo appimage-builder --skip-tests --recipe ./AppImageBuilder-${{ matrix.job.arch }}.yml
2023-04-02 22:41:16 +08:00
2024-05-02 18:14:42 +08:00
- name : Publish appimage package
2024-05-03 03:12:47 +08:00
if : env.UPLOAD_ARTIFACT == 'true'
2024-05-02 18:14:42 +08:00
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
./appimage/rustdesk-${{ env.VERSION }}-*.AppImage
2024-05-02 17:03:20 +08:00
build-flatpak :
name : Build flatpak ${{ matrix.job.target }}
needs : [ build-rustdesk-linux]
runs-on : ${{ matrix.job.on }}
if : ${{ inputs.upload-artifact }}
strategy :
fail-fast : false
matrix :
job :
- {
target : x86_64-unknown-linux-gnu,
distro : ubuntu18.04,
on : ubuntu-20.04,
arch : x86_64,
}
- {
target : aarch64-unknown-linux-gnu,
# try out newer flatpak since error of "error: Nothing matches org.freedesktop.Platform in remote flathub"
distro : ubuntu22.04,
on : [ self-hosted, Linux, ARM64],
arch : aarch64,
}
steps :
- name : Checkout source code
uses : actions/checkout@v3
- name : Download Binary
uses : actions/download-artifact@master
with :
name : rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb
path : .
- name : Rename Binary
run : |
2024-05-08 20:07:57 +08:00
mv rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb flatpak/rustdesk.deb
2024-05-02 17:03:20 +08:00
2023-06-24 02:59:50 +08:00
- uses : rustdesk-org/run-on-arch-action@amd64-support
2023-04-02 22:41:16 +08:00
name : Build rustdesk flatpak package for ${{ matrix.job.arch }}
2024-05-08 20:07:57 +08:00
id : flatpak
2023-04-02 22:41:16 +08:00
with :
arch : ${{ matrix.job.arch }}
2024-04-30 09:08:08 +08:00
distro : ${{ matrix.job.distro }}
2023-04-02 22:41:16 +08:00
githubToken : ${{ github.token }}
setup : |
ls -l "${PWD}"
dockerRunArgs : |
--volume "${PWD}:/workspace"
shell : /bin/bash
install : |
2023-11-04 03:41:48 +08:00
apt-get update -y
apt-get install -y \
curl \
git \
rpm \
wget
2023-04-02 22:41:16 +08:00
run : |
# disable git safe.directory
git config --global --add safe.directory "*"
pushd /workspace
# install
2023-11-04 03:41:48 +08:00
apt-get update -y
apt-get install -y \
cmake \
curl \
flatpak \
flatpak-builder \
gcc \
git \
g++ \
libgtk-3-dev \
nasm \
2023-11-15 22:03:40 +08:00
wget
2023-04-02 22:41:16 +08:00
# flatpak deps
flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
2023-10-06 17:28:07 +08:00
flatpak --user install -y flathub org.freedesktop.Platform/${{ matrix.job.arch }}/23.08
flatpak --user install -y flathub org.freedesktop.Sdk/${{ matrix.job.arch }}/23.08
2023-04-02 22:41:16 +08:00
# package
pushd flatpak
git clone https://github.com/flathub/shared-modules.git --depth=1
flatpak-builder --user --force-clean --repo=repo ./build ./rustdesk.json
2023-04-03 20:35:09 +08:00
flatpak build-bundle ./repo rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.flatpak com.rustdesk.RustDesk
2023-04-02 22:41:16 +08:00
- name : Publish flatpak package
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
2023-04-03 20:35:09 +08:00
flatpak/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.flatpak
2024-03-23 14:28:25 +08:00
build-rustdesk-web :
name : build-rustdesk-web
runs-on : ubuntu-20.04
strategy :
fail-fast : false
env :
RELEASE_NAME : web-basic
steps :
- name : Checkout source code
uses : actions/checkout@v3
- name : Prepare env
run : |
sudo apt-get update -y
sudo apt-get install -y wget npm
2024-03-25 11:21:01 +08:00
2024-03-23 14:28:25 +08:00
- name : Install flutter
uses : subosito/flutter-action@v2.12.0 #https://github.com/subosito/flutter-action/issues/277
with :
channel : "stable"
flutter-version : ${{ env.FLUTTER_VERSION }}
cache : true
# https://rustdesk.com/docs/en/dev/build/web/
- name : Build web
shell : bash
run : |
pushd flutter/web/js
npm install yarn -g
npm install typescript -g
npm install protoc -g
# Install protoc first, see: https://google.github.io/proto-lens/installing-protoc.html
npm install ts-proto
# Only works with vite <= 2.8, see: https://github.com/vitejs/vite/blob/main/docs/guide/build.md#chunking-strategy
npm install vite@2.8
yarn install && yarn build
popd
pushd flutter/web
wget https://github.com/rustdesk/doc.rustdesk.com/releases/download/console/web_deps.tar.gz
tar xzf web_deps.tar.gz
popd
pushd flutter
flutter build web --release
cd build
cp ../web/README.md web
# TODO: Remove the following line when the web is almost complete.
echo -e "\n\nThis build is for preview and not full functionality." >> web/README.md
dir_name="rustdesk-${{ env.VERSION }}-${{ env.RELEASE_NAME }}"
mv web "${dir_name}" && tar czf "${dir_name}".tar.gz "${dir_name}"
sha256sum "${dir_name}".tar.gz
popd
- name : Publish web
if : env.UPLOAD_ARTIFACT == 'true'
uses : softprops/action-gh-release@v1
with :
prerelease : true
tag_name : ${{ env.TAG_NAME }}
files : |
flutter/build/rustdesk-${{ env.VERSION }}-${{ env.RELEASE_NAME }}.tar.gz