Custom Linux Client Generator #474
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Custom Linux Client Generator | |
run-name: Custom Linux Client Generator | |
on: | |
workflow_dispatch: | |
inputs: | |
server: | |
description: 'Rendezvous Server' | |
required: true | |
default: '' | |
type: string | |
key: | |
description: 'Public Key' | |
required: true | |
default: '' | |
type: string | |
apiServer: | |
description: 'API Server' | |
required: true | |
default: '' | |
type: string | |
custom: | |
description: "Custom JSON" | |
required: true | |
default: '' | |
type: string | |
uuid: | |
description: "uuid of request" | |
required: true | |
default: '' | |
type: string | |
iconlink: | |
description: "icon link" | |
required: false | |
default: 'false' | |
type: string | |
logolink: | |
description: "logo link" | |
required: false | |
default: 'false' | |
type: string | |
appname: | |
description: "app name" | |
required: true | |
default: 'rustdesk' | |
type: string | |
filename: | |
description: "Filename" | |
required: true | |
default: 'rustdesk' | |
type: string | |
extras: | |
description: "extra inputs in json" | |
required: true | |
default: '{}' | |
type: string | |
env: | |
SCITER_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 | |
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 | |
CARGO_NDK_VERSION: "3.1.2" | |
SCITER_ARMV7_CMAKE_VERSION: "3.29.7" | |
SCITER_NASM_DEBVERSION: "2.14-1" | |
LLVM_VERSION: "15.0.6" | |
FLUTTER_VERSION: "3.24.5" | |
ANDROID_FLUTTER_VERSION: "3.24.5" | |
FLUTTER_RUST_BRIDGE_VERSION: "1.80.1" | |
# for arm64 linux because official Dart SDK does not work | |
FLUTTER_ELINUX_VERSION: "3.16.9" | |
TAG_NAME: "${{ inputs.upload-tag }}" | |
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite" | |
# vcpkg version: 2024.07.12 | |
VCPKG_COMMIT_ID: "460551b0ec06be1ba6b918448bf3b0f44add813d" | |
VERSION: "${{ fromJson(inputs.extras).version }}" | |
NDK_VERSION: "r27c" | |
#signing keys env variable checks | |
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}" | |
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}" | |
UPLOAD_ARTIFACT: 'true' | |
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}" | |
STATUS_URL: "${{ secrets.GENURL }}/updategh" | |
jobs: | |
generate-bridge-linux: | |
uses: ./.github/workflows/bridge.yml | |
with: | |
version: ${{ fromJson(inputs.extras).version }} | |
build-rustdesk-linux: | |
needs: [generate-bridge-linux] | |
name: build rustdesk linux ${{ matrix.job.target }} | |
runs-on: ${{ matrix.job.on }} | |
strategy: | |
fail-fast: false | |
matrix: | |
# use a high level qemu-user-static | |
job: | |
- { | |
arch: x86_64, | |
target: x86_64-unknown-linux-gnu, | |
distro: ubuntu18.04, | |
on: ubuntu-22.04, | |
deb_arch: amd64, | |
vcpkg-triplet: x64-linux, | |
} | |
- { | |
arch: aarch64, | |
target: aarch64-unknown-linux-gnu, | |
distro: ubuntu18.04, | |
on: ubuntu-22.04-arm, | |
deb_arch: arm64, | |
vcpkg-triplet: arm64-linux, | |
} | |
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: Set rdgen value | |
if: ${{ fromJson(inputs.extras).rdgen == 'true' }} | |
run: | | |
echo "STATUS_URL=${{ secrets.GENURL }}/updategh" >> $GITHUB_ENV | |
- name: Set rdgen value | |
if: ${{ fromJson(inputs.extras).rdgen == 'false' }} | |
run: | | |
echo "STATUS_URL=${{ inputs.apiServer }}/api/updategh" >> $GITHUB_ENV | |
- name: Report Status | |
uses: fjogeleit/http-request-action@v1 | |
continue-on-error: true | |
with: | |
url: ${{ env.STATUS_URL }} | |
method: 'POST' | |
customHeaders: '{"Content-Type": "application/json"}' | |
data: '{"uuid": "${{ inputs.uuid }}", "status": "5% complete"}' | |
- name: Maximize build space | |
run: | | |
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 | |
if [[ "${{ matrix.job.arch }}" == "x86_64" ]]; then | |
sudo apt-get install -y qemu-user-static | |
fi | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y imagemagick | |
- name: Checkout source code | |
if: ${{ env.VERSION != 'master' }} | |
uses: actions/checkout@v4 | |
with: | |
repository: rustdesk/rustdesk | |
ref: refs/tags/${{ env.VERSION }} | |
submodules: recursive | |
- name: Checkout source code | |
if: ${{ env.VERSION == 'master' }} | |
uses: actions/checkout@v4 | |
with: | |
repository: rustdesk/rustdesk | |
submodules: recursive | |
- name: Set Swap Space | |
if: ${{ matrix.job.arch == 'x86_64' }} | |
uses: pierotofy/set-swap-space@master | |
with: | |
swap-size-gb: 12 | |
- name: Free Space | |
run: | | |
df -h | |
free -m | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@v1 | |
if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' | |
with: | |
toolchain: ${{ env.RUST_VERSION }} | |
targets: ${{ matrix.job.target }} | |
components: "rustfmt" | |
- name: Save Rust toolchain version | |
run: | | |
RUST_TOOLCHAIN_VERSION=$(cargo --version | awk '{print $2}') | |
echo "RUST_TOOLCHAIN_VERSION=$RUST_TOOLCHAIN_VERSION" >> $GITHUB_ENV | |
- name: Disable rust bridge build | |
run: | | |
# only build cdylib | |
sed -i "s/\[\"cdylib\", \"staticlib\", \"rlib\"\]/\[\"cdylib\"\]/g" Cargo.toml | |
- name: Report Status | |
uses: fjogeleit/http-request-action@v1 | |
continue-on-error: true | |
with: | |
url: ${{ env.STATUS_URL }} | |
method: 'POST' | |
customHeaders: '{"Content-Type": "application/json"}' | |
data: '{"uuid": "${{ inputs.uuid }}", "status": "15% complete"}' | |
- name: Restore bridge files | |
if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' | |
uses: actions/download-artifact@master | |
with: | |
name: bridge-artifact | |
path: ./ | |
- name: Setup vcpkg with Github Actions binary cache | |
if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' | |
uses: lukka/run-vcpkg@v11 | |
with: | |
vcpkgDirectory: /opt/artifacts/vcpkg | |
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} | |
doNotCache: false | |
- name: Install vcpkg dependencies | |
if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' | |
run: | | |
sudo apt install -y libva-dev libvdpau-dev | |
if ! $VCPKG_ROOT/vcpkg \ | |
install \ | |
--triplet ${{ matrix.job.vcpkg-triplet }} \ | |
--x-install-root="$VCPKG_ROOT/installed"; then | |
find "${VCPKG_ROOT}/" -name "*.log" | while read -r _1; do | |
echo "$_1:" | |
echo "======" | |
cat "$_1" | |
echo "======" | |
echo "" | |
done | |
exit 1 | |
fi | |
head -n 100 "${VCPKG_ROOT}/buildtrees/ffmpeg/build-${{ matrix.job.vcpkg-triplet }}-rel-out.log" || true | |
shell: bash | |
- name: icon stuff | |
if: ${{ inputs.iconlink != 'false' }} | |
continue-on-error: true | |
shell: bash | |
run: | | |
mv ./res/icon.ico ./res/icon.ico.bak | |
mv ./res/icon.png ./res/icon.png.bak | |
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak | |
wget -O ./res/icon.png ${{ fromJson(inputs.iconlink).url }}/get_png?filename=${{ fromJson(inputs.iconlink).file }}"&"uuid=${{ fromJson(inputs.iconlink).uuid }} | |
mv ./res/32x32.png ./res/32x32.png.bak | |
mv ./res/64x64.png ./res/64x64.png.bak | |
mv ./res/128x128.png ./res/128x128.png.bak | |
mv ./res/128x128@2x.png ./res/128x128@2x.png.bak | |
convert ./res/icon.png -define icon:auto-resize=256,64,48,32,16 ./res/icon.ico | |
convert ./res/icon.png -define icon:auto-resize=256,64,48,32,16 ./res/tray-icon.ico | |
cp ./res/icon.ico ./res/tray-icon.ico | |
convert ./res/icon.png -resize 32x32 ./res/32x32.png | |
convert ./res/icon.png -resize 64x64 ./res/64x64.png | |
convert ./res/icon.png -resize 128x128 ./res/128x128.png | |
convert ./res/128x128.png -resize 200% ./res/128x128@2x.png | |
cp ./src/ui.rs ./src/ui.rs.bak | |
b64=$(base64 < ./res/icon.png) | |
sed -i -e 's|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|$(echo "$b64")|' ./src/ui.rs | |
b64="" | |
- name: change appname to custom | |
if: inputs.appname != 'rustdesk' | |
continue-on-error: true | |
shell: bash | |
run: | | |
sed -i -e 's|description = "RustDesk Remote Desktop"|description = "${{ inputs.appname }}"|' ./Cargo.toml | |
sed -i -e 's|ProductName = "RustDesk"|ProductName = "${{ inputs.appname }}"|' ./Cargo.toml | |
sed -i -e 's|FileDescription = "RustDesk Remote Desktop"|FileDescription = "${{ inputs.appname }}"|' ./Cargo.toml | |
sed -i -e 's|OriginalFilename = "rustdesk.exe"|OriginalFilename = "${{ inputs.appname }}.exe"|' ./Cargo.toml | |
sed -i -e 's|description = "RustDesk Remote Desktop"|description = "${{ inputs.appname }}"|' ./libs/portable/Cargo.toml | |
sed -i -e 's|ProductName = "RustDesk"|ProductName = "${{ inputs.appname }}"|' ./libs/portable/Cargo.toml | |
sed -i -e 's|FileDescription = "RustDesk Remote Desktop"|FileDescription = "${{ inputs.appname }}"|' ./libs/portable/Cargo.toml | |
sed -i -e 's|OriginalFilename = "rustdesk.exe"|OriginalFilename = "${{ inputs.appname }}.exe"|' ./libs/portable/Cargo.toml | |
find ./src/lang -name "*.rs" -exec sed -i -e 's|RustDesk|${{ inputs.appname }}|' {} \; | |
sed -i -e '/-p tmpdeb\/usr\/lib\/rustdesk/d' ./build.py | |
- name: change company name | |
if: fromJson(inputs.extras).compname != 'Purslane Ltd' | |
continue-on-error: true | |
shell: bash | |
run: | | |
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./flutter/lib/desktop/pages/desktop_setting_page.dart | |
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./Cargo.toml | |
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./libs/portable/Cargo.toml | |
- name: allow custom.txt | |
continue-on-error: true | |
shell: bash | |
run: | | |
sed -i -e 's|rs-ny.rustdesk.com|${{ inputs.server }}|' ./libs/hbb_common/src/config.rs | |
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ inputs.key }}|' ./libs/hbb_common/src/config.rs | |
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/allowCustom.diff | |
git apply allowCustom.diff | |
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/removeSetupServerTip.diff | |
git apply removeSetupServerTip.diff | |
echo -n "${{ inputs.custom }}" | cat > ./custom.txt | |
# sed -i '/intl:/a \ \ archive: ^3.6.1' ./flutter/pubspec.yaml | |
sed -i -e 's|https://admin.rustdesk.com|${{ inputs.apiServer }}|' ./src/common.rs | |
- name: change url to custom | |
if: fromJson(inputs.extras).urlLink != 'https://rustdesk.com' | |
continue-on-error: true | |
shell: bash | |
run: | | |
sed -i -e 's|Homepage: https://rustdesk.com|Homepage: ${{ fromJson(inputs.extras).urlLink }}|' ./build.py | |
sed -i -e "s|launchUrl(Uri.parse('https://rustdesk.com'));|launchUrl(Uri.parse('${{ fromJson(inputs.extras).urlLink }}'));|" ./flutter/lib/common.dart | |
sed -i -e "s|launchUrlString('https://rustdesk.com');|launchUrlString('${{ fromJson(inputs.extras).urlLink }}');|" ./flutter/lib/desktop/pages/desktop_setting_page.dart | |
sed -i -e "s|launchUrlString('https://rustdesk.com/privacy.html')|launchUrlString('${{ fromJson(inputs.extras).urlLink }}/privacy.html')|" ./flutter/lib/desktop/pages/desktop_setting_page.dart | |
sed -i -e "s|const url = 'https://rustdesk.com/';|const url = '${{ fromJson(inputs.extras).urlLink }}';|" ./flutter/lib/mobile/pages/settings_page.dart | |
sed -i -e "s|launchUrlString('https://rustdesk.com/privacy.html')|launchUrlString('${{ fromJson(inputs.extras).urlLink }}/privacy.html')|" ./flutter/lib/mobile/pages/settings_page.dart | |
sed -i -e "s|https://rustdesk.com/privacy.html|${{ fromJson(inputs.extras).urlLink }}/privacy.html|" ./flutter/lib/desktop/pages/install_page.dart | |
- name: change download link to custom | |
if: fromJson(inputs.extras).downloadLink != 'https://rustdesk.com/download' | |
continue-on-error: true | |
shell: bash | |
run: | | |
sed -i -e 's|https://rustdesk.com/download|${{ fromJson(inputs.extras).downloadLink }}|' ./flutter/lib/desktop/pages/desktop_home_page.dart | |
sed -i -e 's|https://rustdesk.com/download|${{ fromJson(inputs.extras).downloadLink }}|' ./flutter/lib/mobile/pages/connection_page.dart | |
sed -i -e 's|https://rustdesk.com/download|${{ fromJson(inputs.extras).downloadLink }}|' ./src/ui/index.tis | |
- name: fix connection delay | |
continue-on-error: true | |
if: ${{ fromJson(inputs.extras).delayFix == 'true' }} | |
shell: bash | |
run: | | |
sed -i -e 's|!key.is_empty()|false|' ./src/client.rs | |
- name: add cycle monitors to toolbar | |
continue-on-error: true | |
if: fromJson(inputs.extras).cycleMonitor == 'true' | |
run: | | |
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/cycle_monitor.diff | |
git apply cycle_monitor.diff | |
- name: use X for offline display instead of orange circle | |
continue-on-error: true | |
if: fromJson(inputs.extras).xOffline == 'true' | |
run: | | |
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/xoffline.diff | |
git apply xoffline.diff | |
- name: hide-cm | |
continue-on-error: true | |
if: fromJson(inputs.extras).hidecm == 'true' | |
run: | | |
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/hidecm.diff | |
git apply hidecm.diff | |
- name: removeNewVersionNotif | |
continue-on-error: true | |
if: fromJson(inputs.extras).removeNewVersionNotif == 'true' | |
run: | | |
sed -i -e 's|updateUrl.isNotEmpty|false|' ./flutter/lib/desktop/pages/desktop_home_page.dart | |
sed -i '/let (request, url) =/,/Ok(())/{/Ok(())/!d}' ./src/common.rs | |
- name: Restore bridge files | |
if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' | |
uses: actions/download-artifact@master | |
with: | |
name: bridge-artifact | |
path: ./ | |
- name: Report Status | |
uses: fjogeleit/http-request-action@v1 | |
continue-on-error: true | |
with: | |
url: ${{ env.STATUS_URL }} | |
method: 'POST' | |
customHeaders: '{"Content-Type": "application/json"}' | |
data: '{"uuid": "${{ inputs.uuid }}", "status": "65% complete"}' | |
- uses: rustdesk-org/run-on-arch-action@amd64-support | |
name: Build rustdesk | |
id: vcpkg | |
if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' | |
with: | |
arch: ${{ matrix.job.arch }} | |
distro: ${{ matrix.job.distro }} | |
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: | | |
apt-get update -y | |
echo -e "installing deps" | |
apt-get install -y \ | |
build-essential \ | |
clang \ | |
cmake \ | |
curl \ | |
gcc \ | |
git \ | |
g++ \ | |
imagemagick \ | |
libayatana-appindicator3-dev \ | |
libasound2-dev \ | |
libclang-dev \ | |
libunwind-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-dev \ | |
nasm \ | |
ninja-build \ | |
pkg-config \ | |
tree \ | |
python3 \ | |
rpm \ | |
unzip \ | |
wget \ | |
xz-utils | |
# we have libopus compiled by us. | |
apt-get remove -y libopus-dev || true | |
# 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 | |
# do not use rustup, because memory overflow in qemu | |
wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }}.tar.gz | |
tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz | |
cd rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} && ./install.sh | |
rm -rf rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} | |
# 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 | |
if [[ "${{ matrix.job.arch }}" == "aarch64" ]]; then | |
export JOBS="--jobs 3" | |
else | |
export JOBS="" | |
fi | |
echo $JOBS | |
cargo build --lib $JOBS --features hwcodec,flutter,unix-file-copy-paste --release | |
rm -rf target/release/deps target/release/build | |
rm -rf ~/.cargo | |
# Setup Flutter | |
# 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 | |
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 | |
rm -rf flutter | |
;; | |
x86_64) | |
flutter doctor -v | |
;; | |
esac | |
if [[ "3.24.5" == ${{ env.FLUTTER_VERSION }} ]]; then | |
case ${{ matrix.job.arch }} in | |
aarch64) | |
pushd /opt/flutter-elinux/flutter | |
;; | |
x86_64) | |
pushd /opt/flutter | |
;; | |
esac | |
git apply ${{ github.workspace }}/.github/patches/flutter_3.24.4_dropdown_menu_enableFilter.diff | |
popd | |
fi | |
# build flutter | |
pushd /workspace | |
mkdir output | |
chmod 777 output -R | |
export CARGO_INCREMENTAL=0 | |
export DEB_ARCH=${{ matrix.job.deb_arch }} | |
mkdir -p flutter/tmpdeb/usr/share/rustdesk | |
cp ./custom.txt ./flutter/tmpdeb/usr/share/rustdesk/custom.txt | |
if [[ "${{ inputs.logolink }}" != "false" ]]; then | |
wget -O ./flutter/assets/logo.png ${{ fromJson(inputs.logolink).url }}/get_png?filename=${{ fromJson(inputs.logolink).file }}"&"uuid=${{ fromJson(inputs.logolink).uuid }} | |
fi | |
if [[ "${{ inputs.iconlink }}" != "false" ]]; then | |
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak | |
convert ./res/icon.png ./flutter/assets/icon.svg | |
convert ./res/128x128.png -resize 200% ./flutter/assets/128x128@2x.png || true | |
cp ./flutter/assets/icon.svg ./res/scalable.svg | |
pushd ./flutter | |
if [[ "${{ matrix.job.arch }}" == "aarch64" ]]; then | |
export PATH="/opt/flutter-elinux/flutter/bin:$PATH" | |
fi | |
flutter pub get | |
dart run flutter_launcher_icons | |
popd | |
fi | |
python3 ./build.py --flutter --skip-cargo | |
for name in rustdesk*??.deb; do | |
mv "$name" /workspace/output/"${{ inputs.filename }}-${{ matrix.job.arch }}.deb" | |
done | |
# 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 }} | |
for name in rustdesk*??.rpm; do | |
mv "$name" /workspace/output/"${{ inputs.filename }}-${{ matrix.job.arch }}.rpm" | |
done | |
# 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 | |
mv "$name" /workspace/output/"${{ inputs.filename }}-suse-${{ matrix.job.arch }}.rpm" | |
done | |
# 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 | |
continue-on-error: true | |
if: matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true' && env.VERSION != 'master' | |
run: | | |
sed -i "s/x86_64/${{ matrix.job.arch }}/g" res/PKGBUILD | |
if [[ "${{ matrix.job.arch }}" == "aarch64" ]]; then | |
sed -i "s/x86_64/aarch64/g" ./res/PKGBUILD | |
fi | |
- name: Build archlinux package | |
continue-on-error: true | |
if: matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true' && env.VERSION != 'master' | |
uses: rustdesk-org/arch-makepkg-action@master | |
with: | |
packages: | |
scripts: | | |
cd res && HBB=`pwd`/.. FLUTTER=1 makepkg -f | |
- name: Rename archlinux package | |
continue-on-error: true | |
if: matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true' && env.VERSION != 'master' | |
run: | | |
cp ./res/rustdesk-${{ env.VERSION }}-0-x86_64.pkg.tar.zst ./output/${{ inputs.filename }}-${{ matrix.job.arch }}.pkg.tar.zst | |
- name: send file to rdgen server | |
if: ${{ fromJson(inputs.extras).rdgen == 'true' }} | |
shell: bash | |
run: | | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}-${{ matrix.job.arch }}.deb" -F "uuid=${{ inputs.uuid }}" ${{ secrets.GENURL }}/save_custom_client | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}-${{ matrix.job.arch }}.rpm" -F "uuid=${{ inputs.uuid }}" ${{ secrets.GENURL }}/save_custom_client | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}-suse-${{ matrix.job.arch }}.rpm" -F "uuid=${{ inputs.uuid }}" ${{ secrets.GENURL }}/save_custom_client | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}-${{ matrix.job.arch }}.pkg.tar.zst" -F "uuid=${{ inputs.uuid }}" ${{ secrets.GENURL }}/save_custom_client || true | |
- name: send file to api server | |
if: ${{ fromJson(inputs.extras).rdgen == 'false' }} | |
shell: bash | |
run: | | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}-${{ matrix.job.arch }}.deb" ${{ inputs.apiServer }}/api/save_custom_client | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}-${{ matrix.job.arch }}.rpm" ${{ inputs.apiServer }}/api/save_custom_client | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}-suse-${{ matrix.job.arch }}.rpm" ${{ inputs.apiServer }}/api/save_custom_client | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}-${{ matrix.job.arch }}.pkg.tar.zst" ${{ inputs.apiServer }}/api/save_custom_client || true | |
- name: Upload deb | |
uses: actions/upload-artifact@master | |
if: env.UPLOAD_ARTIFACT == 'true' | |
with: | |
name: ${{ inputs.filename }}-${{ matrix.job.arch }}.deb | |
path: ./output/${{ inputs.filename }}-${{ matrix.job.arch }}.deb | |
- name: Report Status | |
uses: fjogeleit/http-request-action@v1 | |
continue-on-error: true | |
with: | |
url: ${{ env.STATUS_URL }} | |
method: 'POST' | |
customHeaders: '{"Content-Type": "application/json"}' | |
data: '{"uuid": "${{ inputs.uuid }}", "status": "Finished ${{ matrix.job.arch }}"}' | |
- name: failed | |
if: failure() | |
uses: fjogeleit/http-request-action@v1 | |
with: | |
url: ${{ env.STATUS_URL }} | |
method: 'POST' | |
customHeaders: '{"Content-Type": "application/json"}' | |
data: '{"uuid": "${{ inputs.uuid }}", "status": "Generation failed, try again"}' | |
- name: failed | |
if: cancelled() | |
uses: fjogeleit/http-request-action@v1 | |
with: | |
url: ${{ env.STATUS_URL }} | |
method: 'POST' | |
customHeaders: '{"Content-Type": "application/json"}' | |
data: '{"uuid": "${{ inputs.uuid }}", "status": "Generation cancelled, try again"}' | |
build-appimage: | |
name: Build appimage ${{ matrix.job.target }} | |
needs: [build-rustdesk-linux] | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
job: | |
- { target: x86_64-unknown-linux-gnu, arch: x86_64 } | |
- { target: aarch64-unknown-linux-gnu, arch: aarch64 } | |
steps: | |
- name: Checkout source code | |
if: ${{ env.VERSION != 'master' }} | |
uses: actions/checkout@v4 | |
with: | |
repository: rustdesk/rustdesk | |
ref: refs/tags/${{ env.VERSION }} | |
submodules: recursive | |
- name: Checkout source code | |
if: ${{ env.VERSION == 'master' }} | |
uses: actions/checkout@v4 | |
with: | |
repository: rustdesk/rustdesk | |
submodules: recursive | |
- name: Download Binary | |
uses: actions/download-artifact@master | |
with: | |
name: ${{ inputs.filename }}-${{ matrix.job.arch }}.deb | |
path: . | |
- name: Rename Binary | |
run: | | |
mv ${{ inputs.filename }}-${{ matrix.job.arch }}.deb appimage/rustdesk.deb | |
- name: Build appimage package | |
shell: bash | |
run: | | |
# install libarchive-tools for bsdtar command used in AppImageBuilder.yml | |
sudo apt-get update -y | |
sudo apt-get install -y libarchive-tools libfuse2 | |
# set-up appimage-builder | |
sudo pip3 install git+https://github.com/rustdesk-org/appimage-builder.git | |
# run appimage-builder | |
pushd appimage | |
sudo appimage-builder --skip-tests --recipe ./AppImageBuilder-${{ matrix.job.arch }}.yml | |
sudo mv ./rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.AppImage ./${{ inputs.filename }}-${{ matrix.job.arch }}.AppImage | |
- name: send file to rdgen server | |
if: ${{ fromJson(inputs.extras).rdgen == 'true' }} | |
shell: bash | |
run: | | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./appimage/${{ inputs.filename }}-${{ matrix.job.arch }}.AppImage" -F "uuid=${{ inputs.uuid }}" ${{ secrets.GENURL }}/save_custom_client | |
- name: send file to api server | |
if: ${{ fromJson(inputs.extras).rdgen == 'false' }} | |
shell: bash | |
run: | | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./appimage/${{ inputs.filename }}-${{ matrix.job.arch }}.AppImage" ${{ inputs.apiServer }}/api/save_custom_client | |
build-flatpak: | |
name: Build flatpak ${{ matrix.job.target }}${{ matrix.job.suffix }} | |
needs: | |
- build-rustdesk-linux | |
runs-on: ${{ matrix.job.on }} | |
strategy: | |
fail-fast: false | |
matrix: | |
job: | |
- { | |
target: x86_64-unknown-linux-gnu, | |
distro: ubuntu18.04, | |
on: ubuntu-22.04, | |
arch: x86_64, | |
suffix: "", | |
} | |
- { | |
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: ubuntu-22.04-arm, | |
arch: aarch64, | |
suffix: "", | |
} | |
steps: | |
- name: Checkout source code | |
if: ${{ env.VERSION != 'master' }} | |
uses: actions/checkout@v4 | |
with: | |
repository: rustdesk/rustdesk | |
ref: refs/tags/${{ env.VERSION }} | |
submodules: recursive | |
- name: Checkout source code | |
if: ${{ env.VERSION == 'master' }} | |
uses: actions/checkout@v4 | |
with: | |
repository: rustdesk/rustdesk | |
submodules: recursive | |
- name: Download Binary | |
uses: actions/download-artifact@master | |
with: | |
name: ${{ inputs.filename }}-${{ matrix.job.arch }}.deb | |
path: . | |
- name: Rename Binary | |
run: | | |
mv ${{ inputs.filename }}-${{ matrix.job.arch }}.deb flatpak/rustdesk.deb | |
- uses: rustdesk-org/run-on-arch-action@amd64-support | |
name: Build rustdesk flatpak package for ${{ matrix.job.arch }} | |
continue-on-error: true | |
timeout-minutes: 30 | |
id: flatpak | |
with: | |
arch: ${{ matrix.job.arch }} | |
distro: ${{ matrix.job.distro }} | |
githubToken: ${{ github.token }} | |
setup: | | |
ls -l "${PWD}" | |
dockerRunArgs: | | |
--volume "${PWD}:/workspace" | |
shell: /bin/bash | |
install: | | |
apt-get update -y | |
apt-get install -y git flatpak flatpak-builder | |
run: | | |
# disable git safe.directory | |
git config --global --add safe.directory "*" | |
pushd /workspace | |
# flatpak deps | |
flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo | |
# package | |
pushd flatpak | |
git clone https://github.com/flathub/shared-modules.git --depth=1 | |
flatpak-builder --user --install-deps-from=flathub -y --force-clean --repo=repo ./build ./rustdesk.json | |
flatpak build-bundle ./repo ${{ inputs.filename }}-${{ matrix.job.arch }}.flatpak com.rustdesk.RustDesk | |
- name: send file to rdgen server | |
if: ${{ fromJson(inputs.extras).rdgen == 'true' }} | |
continue-on-error: true | |
shell: bash | |
run: | | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./flatpak/${{ inputs.filename }}-${{ matrix.job.arch }}.flatpak" -F "uuid=${{ inputs.uuid }}" ${{ secrets.GENURL }}/save_custom_client | |
- name: send file to api server | |
if: ${{ fromJson(inputs.extras).rdgen == 'false' }} | |
continue-on-error: true | |
shell: bash | |
run: | | |
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./flatpak/${{ inputs.filename }}-${{ matrix.job.arch }}.flatpak" ${{ inputs.apiServer }}/api/save_custom_client | |
deploy: | |
needs: [build-rustdesk-linux,build-flatpak,build-appimage] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Set rdgen value | |
if: ${{ fromJson(inputs.extras).rdgen == 'true' }} | |
run: | | |
echo "STATUS_URL=${{ secrets.GENURL }}/updategh" >> $GITHUB_ENV | |
- name: Set rdgen value | |
if: ${{ fromJson(inputs.extras).rdgen == 'false' }} | |
run: | | |
echo "STATUS_URL=${{ inputs.apiServer }}/api/updategh" >> $GITHUB_ENV | |
- name: Report Status | |
uses: fjogeleit/http-request-action@v1 | |
with: | |
url: ${{ env.STATUS_URL }} | |
method: 'POST' | |
customHeaders: '{"Content-Type": "application/json"}' | |
data: '{"uuid": "${{ inputs.uuid }}", "status": "Success"}' | |
- uses: geekyeggo/delete-artifact@v5 | |
continue-on-error: true | |
with: | |
name: ${{ inputs.filename }}-*.deb |