Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ca0d321873 | |||
| 80fc9f6a84 | |||
| b567c74902 | |||
| cc47350fab | |||
| e882a604d7 | |||
| 1b7468a1f2 | |||
| 1424caffb0 | |||
| 47cf713307 | |||
| fe505ed35c | |||
| a68e9d8a83 | |||
| 995f78b6a1 | |||
| 7951080c6c | |||
| 6792760e57 | |||
| da33c6f5fd | |||
| 6c2e2f39e9 | |||
| f420425ecb | |||
| 4a5dce088a | |||
| 51cb240b13 | |||
| a9bf03b34b | |||
| 286320cd81 | |||
| 0f1b1d1d55 | |||
| ee673c2667 | |||
| 2c970680ef |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
|
|||||||
|
diff --git a/src/common.rs b/src/common.rs
|
||||||
|
index 56361a5da..92b221e9a 100644
|
||||||
|
--- a/src/common.rs
|
||||||
|
+++ b/src/common.rs
|
||||||
|
@@ -1474,15 +1474,15 @@ pub fn read_custom_client(config: &str) {
|
||||||
|
log::error!("Failed to decode custom client config");
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
- const KEY: &str = "5Qbwsde3unUcJBtrx9ZkvUmwFNoExHzpryHuPUdqlWM=";
|
||||||
|
- let Some(pk) = get_rs_pk(KEY) else {
|
||||||
|
- log::error!("Failed to parse public key of custom client");
|
||||||
|
- return;
|
||||||
|
- };
|
||||||
|
- let Ok(data) = sign::verify(&data, &pk) else {
|
||||||
|
- log::error!("Failed to dec custom client config");
|
||||||
|
- return;
|
||||||
|
- };
|
||||||
|
+ // const KEY: &str = "5Qbwsde3unUcJBtrx9ZkvUmwFNoExHzpryHuPUdqlWM=";
|
||||||
|
+ // let Some(pk) = get_rs_pk(KEY) else {
|
||||||
|
+ // log::error!("Failed to parse public key of custom client");
|
||||||
|
+ // return;
|
||||||
|
+ // };
|
||||||
|
+ // let Ok(data) = sign::verify(&data, &pk) else {
|
||||||
|
+ // log::error!("Failed to dec custom client config");
|
||||||
|
+ // return;
|
||||||
|
+ // };
|
||||||
|
let Ok(mut data) =
|
||||||
|
serde_json::from_slice::<std::collections::HashMap<String, serde_json::Value>>(&data)
|
||||||
|
else {
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart
|
||||||
|
index d9dc3eec4..76f386b76 100644
|
||||||
|
--- a/flutter/lib/desktop/pages/connection_page.dart
|
||||||
|
+++ b/flutter/lib/desktop/pages/connection_page.dart
|
||||||
|
@@ -131,7 +131,7 @@ class _OnlineStatusWidgetState extends State<OnlineStatusWidget> {
|
||||||
|
if (!isIncomingOnly) startServiceWidget(),
|
||||||
|
// ready && public
|
||||||
|
// No need to show the guide if is custom client.
|
||||||
|
- if (!isIncomingOnly) setupServerWidget(),
|
||||||
|
+ //if (!isIncomingOnly) setupServerWidget(),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
@@ -75,15 +75,8 @@ env:
|
|||||||
#signing keys env variable checks
|
#signing keys env variable checks
|
||||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||||
# To make a custom build with your own servers set the below secret values
|
|
||||||
RS_PUB_KEY: "${{ inputs.key }}"
|
|
||||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
|
||||||
CUSTOM: "${{ inputs.custom }}"
|
|
||||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
|
||||||
API_SERVER: "${{ inputs.apiServer }}"
|
|
||||||
UPLOAD_ARTIFACT: 'true'
|
UPLOAD_ARTIFACT: 'true'
|
||||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||||
ICONBASE64: "$${{ inputs.iconbase64 }}"
|
|
||||||
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -297,7 +290,6 @@ jobs:
|
|||||||
mv ./res/icon.ico ./res/icon.ico.bak
|
mv ./res/icon.ico ./res/icon.ico.bak
|
||||||
mv ./res/icon.png ./res/icon.png.bak
|
mv ./res/icon.png ./res/icon.png.bak
|
||||||
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
||||||
#echo "${{ inputs.iconbase64 }}" | base64 -d > ./res/icon.png
|
|
||||||
wget -O ./res/icon.png ${{ fromJson(inputs.iconlink).url }}/get_png?filename=${{ fromJson(inputs.iconlink).file }}"&"uuid=${{ fromJson(inputs.iconlink).uuid }}
|
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/32x32.png ./res/32x32.png.bak
|
||||||
mv ./res/64x64.png ./res/64x64.png.bak
|
mv ./res/64x64.png ./res/64x64.png.bak
|
||||||
@@ -338,7 +330,7 @@ jobs:
|
|||||||
sed -i -e 's|"Copyright © 2025 Purslane Ltd. All rights reserved."|"Copyright © 2025"|' ./flutter/windows/runner/Runner.rc
|
sed -i -e 's|"Copyright © 2025 Purslane Ltd. All rights reserved."|"Copyright © 2025"|' ./flutter/windows/runner/Runner.rc
|
||||||
sed -i -e 's|"rustdesk.exe"|"${{ inputs.filename }}"|' ./flutter/windows/runner/Runner.rc
|
sed -i -e 's|"rustdesk.exe"|"${{ inputs.filename }}"|' ./flutter/windows/runner/Runner.rc
|
||||||
sed -i -e 's|"RustDesk"|"${{ inputs.appname }}"|' ./flutter/windows/runner/Runner.rc
|
sed -i -e 's|"RustDesk"|"${{ inputs.appname }}"|' ./flutter/windows/runner/Runner.rc
|
||||||
sed -i -e 's|RustDesk|${{ inputs.appname }}|' ./src/lang/en.rs
|
find ./src/lang -name "*.rs" -exec sed -i -e 's|RustDesk|${{ inputs.appname }}|' {} \;
|
||||||
sed -i -e 's|RustDesk|${{ inputs.appname }}|' ./flutter/android/app/src/main/res/values/strings.xml
|
sed -i -e 's|RustDesk|${{ inputs.appname }}|' ./flutter/android/app/src/main/res/values/strings.xml
|
||||||
sed -i -e "s|title: 'RustDesk'|title: '${{ inputs.appname }}'|" ./flutter/lib/main.dart
|
sed -i -e "s|title: 'RustDesk'|title: '${{ inputs.appname }}'|" ./flutter/lib/main.dart
|
||||||
sed -i -e "s|return 'RustDesk';|return '${{ inputs.appname }}';|" ./flutter/lib/web/bridge.dart
|
sed -i -e "s|return 'RustDesk';|return '${{ inputs.appname }}';|" ./flutter/lib/web/bridge.dart
|
||||||
@@ -499,7 +491,7 @@ jobs:
|
|||||||
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a
|
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a
|
||||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/
|
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/
|
||||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
|
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||||
@@ -516,7 +508,7 @@ jobs:
|
|||||||
mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a
|
mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a
|
||||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/
|
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/
|
||||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so
|
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||||
@@ -533,7 +525,7 @@ jobs:
|
|||||||
mkdir -p ./flutter/android/app/src/main/jniLibs/x86_64
|
mkdir -p ./flutter/android/app/src/main/jniLibs/x86_64
|
||||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86_64/
|
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86_64/
|
||||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86_64/librustdesk.so
|
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86_64/librustdesk.so
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||||
@@ -550,7 +542,7 @@ jobs:
|
|||||||
mkdir -p ./flutter/android/app/src/main/jniLibs/x86
|
mkdir -p ./flutter/android/app/src/main/jniLibs/x86
|
||||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/i686-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86/
|
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/i686-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86/
|
||||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86/librustdesk.so
|
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86/librustdesk.so
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||||
@@ -603,17 +595,6 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./signed-apk/${{ inputs.filename }}-${{ matrix.job.arch }}.apk" ${{ 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=@./signed-apk/${{ inputs.filename }}-${{ matrix.job.arch }}.apk" ${{ inputs.apiServer }}/api/save_custom_client
|
||||||
# uses: SamKirkland/FTP-Deploy-Action@v4.3.5
|
|
||||||
# with:
|
|
||||||
# server: ${{ secrets.GEN_FTP_SERVER }}
|
|
||||||
# username: ${{ secrets.GEN_FTP_USER }}
|
|
||||||
# password: ${{ secrets.GEN_FTP_PASSWORD }}
|
|
||||||
# local-dir: ./signed-apk/
|
|
||||||
# server-dir: /root/rdgen/exe/${{ env.UUIDFOLDER }}/
|
|
||||||
# exclude: |
|
|
||||||
# *.idsig
|
|
||||||
# *.jks
|
|
||||||
# *aligned.apk
|
|
||||||
|
|
||||||
- name: Report Status
|
- name: Report Status
|
||||||
uses: fjogeleit/http-request-action@v1
|
uses: fjogeleit/http-request-action@v1
|
||||||
|
|||||||
@@ -75,15 +75,8 @@ env:
|
|||||||
#signing keys env variable checks
|
#signing keys env variable checks
|
||||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||||
# To make a custom build with your own servers set the below secret values
|
|
||||||
RS_PUB_KEY: "${{ inputs.key }}"
|
|
||||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
|
||||||
CUSTOM: "${{ inputs.custom }}"
|
|
||||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
|
||||||
API_SERVER: "${{ inputs.apiServer }}"
|
|
||||||
UPLOAD_ARTIFACT: 'true'
|
UPLOAD_ARTIFACT: 'true'
|
||||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||||
ICONBASE64: "$${{ inputs.iconbase64 }}"
|
|
||||||
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -252,7 +245,6 @@ jobs:
|
|||||||
mv ./res/icon.ico ./res/icon.ico.bak
|
mv ./res/icon.ico ./res/icon.ico.bak
|
||||||
mv ./res/icon.png ./res/icon.png.bak
|
mv ./res/icon.png ./res/icon.png.bak
|
||||||
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
||||||
#echo "${{ inputs.iconbase64 }}" | base64 -d > ./res/icon.png
|
|
||||||
wget -O ./res/icon.png ${{ fromJson(inputs.iconlink).url }}/get_png?filename=${{ fromJson(inputs.iconlink).file }}"&"uuid=${{ fromJson(inputs.iconlink).uuid }}
|
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/32x32.png ./res/32x32.png.bak
|
||||||
mv ./res/64x64.png ./res/64x64.png.bak
|
mv ./res/64x64.png ./res/64x64.png.bak
|
||||||
@@ -283,20 +275,31 @@ jobs:
|
|||||||
sed -i -e 's|ProductName = "RustDesk"|ProductName = "${{ 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|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
|
sed -i -e 's|OriginalFilename = "rustdesk.exe"|OriginalFilename = "${{ inputs.appname }}.exe"|' ./libs/portable/Cargo.toml
|
||||||
sed -i -e 's|RustDesk|${{ inputs.appname }}|' ./src/lang/en.rs
|
find ./src/lang -name "*.rs" -exec sed -i -e 's|RustDesk|${{ inputs.appname }}|' {} \;
|
||||||
sed -i -e '/-p tmpdeb\/usr\/lib\/rustdesk/d' ./build.py
|
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
|
- name: allow custom.txt
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
sed -i -e 's|rs-ny.rustdesk.com|${{ env.RENDEZVOUS_SERVER }}|' ./libs/hbb_common/src/config.rs
|
sed -i -e 's|rs-ny.rustdesk.com|${{ inputs.server }}|' ./libs/hbb_common/src/config.rs
|
||||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ env.RS_PUB_KEY }}|' ./libs/hbb_common/src/config.rs
|
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ inputs.key }}|' ./libs/hbb_common/src/config.rs
|
||||||
sed -i -e 's|For faster connection, please set up your own server||' ./src/lang/en.rs
|
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/allowCustom.diff
|
||||||
sed -i -e '/const KEY:/,/};/d' ./src/common.rs
|
git apply allowCustom.diff
|
||||||
sed -i -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/removeSetupServerTip.diff
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./custom.txt
|
git apply removeSetupServerTip.diff
|
||||||
|
echo -n "${{ inputs.custom }}" | cat > ./custom.txt
|
||||||
sed -i '/intl:/a \ \ archive: ^3.6.1' ./flutter/pubspec.yaml
|
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
|
- name: change url to custom
|
||||||
if: fromJson(inputs.extras).urlLink != 'https://rustdesk.com'
|
if: fromJson(inputs.extras).urlLink != 'https://rustdesk.com'
|
||||||
@@ -369,22 +372,6 @@ jobs:
|
|||||||
name: bridge-artifact
|
name: bridge-artifact
|
||||||
path: ./
|
path: ./
|
||||||
|
|
||||||
# - name: logo stuff
|
|
||||||
# if: ${{ inputs.logolink != 'false' }}
|
|
||||||
# continue-on-error: true
|
|
||||||
# shell: bash
|
|
||||||
# run: |
|
|
||||||
# #echo "${{ inputs.logobase64 }}" | base64 -d > ./rustdesk/data/flutter_assets/assets/logo.png
|
|
||||||
# wget -O ./rustdesk/data/flutter_assets/assets/logo.png https://${{ fromJson(inputs.logolink).url }}/get_png?filename=${{ fromJson(inputs.logolink).file }}"&"uuid=${{ fromJson(inputs.logolink).uuid }}
|
|
||||||
|
|
||||||
# - name: icon stuff
|
|
||||||
# if: ${{ inputs.iconlink != 'false' }}
|
|
||||||
# continue-on-error: true
|
|
||||||
# run: |
|
|
||||||
# #mv ./rustdesk/data/flutter_assets/assets/icon.svg ./rustdesk/data/flutter_assets/assets/icon.svg.bak
|
|
||||||
# convert ./res/icon.png ./rustdesk/data/flutter_assets/assets/icon.svg
|
|
||||||
# convert ./res/icon.png ./rustdesk/data/flutter_assets/assets/scalable.svg
|
|
||||||
|
|
||||||
- name: Report Status
|
- name: Report Status
|
||||||
uses: fjogeleit/http-request-action@v1
|
uses: fjogeleit/http-request-action@v1
|
||||||
with:
|
with:
|
||||||
@@ -538,7 +525,6 @@ jobs:
|
|||||||
mkdir -p flutter/tmpdeb/usr/lib/rustdesk
|
mkdir -p flutter/tmpdeb/usr/lib/rustdesk
|
||||||
cp ./custom.txt ./flutter/tmpdeb/usr/lib/rustdesk/custom.txt
|
cp ./custom.txt ./flutter/tmpdeb/usr/lib/rustdesk/custom.txt
|
||||||
if [[ "${{ inputs.logolink }}" != "false" ]]; then
|
if [[ "${{ inputs.logolink }}" != "false" ]]; then
|
||||||
#echo "${{ inputs.logobase64 }}" | base64 -d > ./flutter/assets/logo.png
|
|
||||||
wget -O ./flutter/assets/logo.png ${{ fromJson(inputs.logolink).url }}/get_png?filename=${{ fromJson(inputs.logolink).file }}"&"uuid=${{ fromJson(inputs.logolink).uuid }}
|
wget -O ./flutter/assets/logo.png ${{ fromJson(inputs.logolink).url }}/get_png?filename=${{ fromJson(inputs.logolink).file }}"&"uuid=${{ fromJson(inputs.logolink).uuid }}
|
||||||
fi
|
fi
|
||||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||||
@@ -584,25 +570,32 @@ jobs:
|
|||||||
mv "$name" /workspace/output/"${{ inputs.filename }}-suse.rpm"
|
mv "$name" /workspace/output/"${{ inputs.filename }}-suse.rpm"
|
||||||
done
|
done
|
||||||
|
|
||||||
# - name: Publish debian/rpm package
|
# only x86_64 for arch since we can not find newest arm64 docker image to build
|
||||||
# if: env.UPLOAD_ARTIFACT == 'true'
|
# old arch image does not make sense for arch since it is "arch" which always update to date
|
||||||
# uses: softprops/action-gh-release@v1
|
# and failed to makepkg arm64 on x86_64
|
||||||
# with:
|
- name: Patch archlinux PKGBUILD
|
||||||
# prerelease: true
|
continue-on-error: true
|
||||||
# tag_name: ${{ env.TAG_NAME }}
|
if: matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true' && env.VERSION != 'master'
|
||||||
# files: |
|
run: |
|
||||||
# rustdesk-*.deb
|
sed -i "s/x86_64/${{ matrix.job.arch }}/g" res/PKGBUILD
|
||||||
# rustdesk-*.rpm
|
if [[ "${{ matrix.job.arch }}" == "aarch64" ]]; then
|
||||||
|
sed -i "s/x86_64/aarch64/g" ./res/PKGBUILD
|
||||||
|
fi
|
||||||
|
|
||||||
# - name: Upload to FTP
|
- name: Build archlinux package
|
||||||
# if: ${{ fromJson(inputs.extras).rdgen == 'true' }}
|
continue-on-error: true
|
||||||
# uses: SamKirkland/FTP-Deploy-Action@v4.3.5
|
if: matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true' && env.VERSION != 'master'
|
||||||
# with:
|
uses: rustdesk-org/arch-makepkg-action@master
|
||||||
# server: ${{ secrets.GEN_FTP_SERVER }}
|
with:
|
||||||
# username: ${{ secrets.GEN_FTP_USER }}
|
packages:
|
||||||
# password: ${{ secrets.GEN_FTP_PASSWORD }}
|
scripts: |
|
||||||
# local-dir: output/
|
cd res && HBB=`pwd`/.. FLUTTER=1 makepkg -f
|
||||||
# server-dir: /root/rdgen/exe/${{ env.UUIDFOLDER }}/
|
|
||||||
|
- 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 }}.pkg.tar.zst
|
||||||
|
|
||||||
- name: send file to rdgen server
|
- name: send file to rdgen server
|
||||||
if: ${{ fromJson(inputs.extras).rdgen == 'true' }}
|
if: ${{ fromJson(inputs.extras).rdgen == 'true' }}
|
||||||
@@ -611,6 +604,7 @@ jobs:
|
|||||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}.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 }}.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 }}.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 }}.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.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.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 }}.pkg.tar.zst" -F "uuid=${{ inputs.uuid }}" ${{ secrets.GENURL }}/save_custom_client || true
|
||||||
|
|
||||||
- name: send file to api server
|
- name: send file to api server
|
||||||
if: ${{ fromJson(inputs.extras).rdgen == 'false' }}
|
if: ${{ fromJson(inputs.extras).rdgen == 'false' }}
|
||||||
@@ -619,13 +613,7 @@ jobs:
|
|||||||
curl -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer ${{ fromJson(inputs.extras).token }}" -F "file=@./output/${{ inputs.filename }}.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 }}.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 }}.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 }}.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.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.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 }}.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: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb
|
|
||||||
path: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb
|
|
||||||
|
|
||||||
- name: Report Status
|
- name: Report Status
|
||||||
uses: fjogeleit/http-request-action@v1
|
uses: fjogeleit/http-request-action@v1
|
||||||
|
|||||||
@@ -75,12 +75,6 @@ env:
|
|||||||
#signing keys env variable checks
|
#signing keys env variable checks
|
||||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||||
# To make a custom build with your own servers set the below secret values
|
|
||||||
RS_PUB_KEY: "${{ inputs.key }}"
|
|
||||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
|
||||||
CUSTOM: "${{ inputs.custom }}"
|
|
||||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
|
||||||
API_SERVER: "${{ inputs.apiServer }}"
|
|
||||||
UPLOAD_ARTIFACT: 'true'
|
UPLOAD_ARTIFACT: 'true'
|
||||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||||
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
||||||
@@ -186,9 +180,12 @@ jobs:
|
|||||||
# MACSTUFF Update AppInfo.xcconfig
|
# MACSTUFF Update AppInfo.xcconfig
|
||||||
sed -i '' -e 's|PRODUCT_NAME = .*|PRODUCT_NAME = ${{ inputs.appname }}|' ./flutter/macos/Runner/Configs/AppInfo.xcconfig
|
sed -i '' -e 's|PRODUCT_NAME = .*|PRODUCT_NAME = ${{ inputs.appname }}|' ./flutter/macos/Runner/Configs/AppInfo.xcconfig
|
||||||
sed -i '' -e 's|PRODUCT_BUNDLE_IDENTIFIER = .*|PRODUCT_BUNDLE_IDENTIFIER = com.${{ inputs.appname }}.app|' ./flutter/macos/Runner/Configs/AppInfo.xcconfig
|
sed -i '' -e 's|PRODUCT_BUNDLE_IDENTIFIER = .*|PRODUCT_BUNDLE_IDENTIFIER = com.${{ inputs.appname }}.app|' ./flutter/macos/Runner/Configs/AppInfo.xcconfig
|
||||||
#sed -i '' -e 's|PRODUCT_COPYRIGHT = .*|PRODUCT_COPYRIGHT = Copyright 2025 ${{ inputs.appname }}. All rights reserved.|' ./flutter/macos/Runner/Configs/AppInfo.xcconfig
|
sed -i '' -e 's|Purslane Ltd.|${{ inputs.appname }}|' ./flutter/macos/Runner/Configs/AppInfo.xcconfig
|
||||||
# Keep DEVELOPMENT_TEAM if it exists, don't blank it out
|
# Keep DEVELOPMENT_TEAM if it exists, don't blank it out
|
||||||
|
|
||||||
|
sed -i -e 's|Purslane Ltd.|${{ inputs.appname }}|' ./Cargo.toml
|
||||||
|
sed -i -e 's|Purslane Ltd|${{ inputs.appname }}|' ./libs/portable/Cargo.toml
|
||||||
|
|
||||||
# Update Xcode project settings
|
# Update Xcode project settings
|
||||||
sed -i '' -e 's/PRODUCT_NAME = "RustDesk"/PRODUCT_NAME = "${{ inputs.appname }}"/' ./flutter/macos/Runner.xcodeproj/project.pbxproj
|
sed -i '' -e 's/PRODUCT_NAME = "RustDesk"/PRODUCT_NAME = "${{ inputs.appname }}"/' ./flutter/macos/Runner.xcodeproj/project.pbxproj
|
||||||
sed -i '' -e 's/PRODUCT_BUNDLE_IDENTIFIER = ".*"/PRODUCT_BUNDLE_IDENTIFIER = "com.${{ inputs.appname }}.app"/' ./flutter/macos/Runner.xcodeproj/project.pbxproj
|
sed -i '' -e 's/PRODUCT_BUNDLE_IDENTIFIER = ".*"/PRODUCT_BUNDLE_IDENTIFIER = "com.${{ inputs.appname }}.app"/' ./flutter/macos/Runner.xcodeproj/project.pbxproj
|
||||||
@@ -205,7 +202,7 @@ jobs:
|
|||||||
|
|
||||||
cp ./src/lang/en.rs ./src/lang/en.rs.bak
|
cp ./src/lang/en.rs ./src/lang/en.rs.bak
|
||||||
cp ./src/lang/nl.rs ./src/lang/nl.rs.bak
|
cp ./src/lang/nl.rs ./src/lang/nl.rs.bak
|
||||||
sed -i '' -e 's|RustDesk|${{ inputs.appname }}|' ./src/lang/en.rs
|
find ./src/lang -name "*.rs" -exec sed -i '' -e 's|RustDesk|${{ inputs.appname }}|' {} \;
|
||||||
sed -i '' -e 's|RustDesk|${{ inputs.appname }}|' ./src/lang/nl.rs
|
sed -i '' -e 's|RustDesk|${{ inputs.appname }}|' ./src/lang/nl.rs
|
||||||
|
|
||||||
sed -i '' -e 's|Homepage: https://rustdesk.com|Homepage: ${{ fromJson(inputs.extras).urlLink }}|' ./build.py
|
sed -i '' -e 's|Homepage: https://rustdesk.com|Homepage: ${{ fromJson(inputs.extras).urlLink }}|' ./build.py
|
||||||
@@ -239,12 +236,14 @@ jobs:
|
|||||||
sed -i '' -e 's/("About RustDesk", "Over RustDesk")/("About RustDesk", "Over ${{ inputs.appname }}")/' ./src/lang/nl.rs
|
sed -i '' -e 's/("About RustDesk", "Over RustDesk")/("About RustDesk", "Over ${{ inputs.appname }}")/' ./src/lang/nl.rs
|
||||||
sed -i '' -e 's/("About", "Over")/("About", "Over ${{ inputs.appname }}")/' ./src/lang/nl.rs
|
sed -i '' -e 's/("About", "Over")/("About", "Over ${{ inputs.appname }}")/' ./src/lang/nl.rs
|
||||||
|
|
||||||
sed -i -e 's|rs-ny.rustdesk.com|${{ env.RENDEZVOUS_SERVER }}|' ./libs/hbb_common/src/config.rs
|
sed -i -e 's|rs-ny.rustdesk.com|${{ inputs.server }}|' ./libs/hbb_common/src/config.rs
|
||||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ env.RS_PUB_KEY }}|' ./libs/hbb_common/src/config.rs
|
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ inputs.key }}|' ./libs/hbb_common/src/config.rs
|
||||||
sed -i -e 's|For faster connection, please set up your own server||' ./src/lang/en.rs
|
sed -i -e 's|https://admin.rustdesk.com|${{ inputs.apiServer }}|' ./src/common.rs
|
||||||
|
|
||||||
sed -i '' -e '/const KEY:/,/};/d' ./src/common.rs
|
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/allowCustom.diff
|
||||||
sed -i '' -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
git apply allowCustom.diff
|
||||||
|
wget https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/removeSetupServerTip.diff
|
||||||
|
git apply removeSetupServerTip.diff
|
||||||
|
|
||||||
# Update pubspec.yaml with proper YAML formatting
|
# Update pubspec.yaml with proper YAML formatting
|
||||||
cp ./flutter/pubspec.yaml ./flutter/pubspec.yaml.bak
|
cp ./flutter/pubspec.yaml ./flutter/pubspec.yaml.bak
|
||||||
@@ -724,14 +723,6 @@ jobs:
|
|||||||
"${{ inputs.appname }}.app"
|
"${{ inputs.appname }}.app"
|
||||||
mv "${{ inputs.appname }}-${{ matrix.job.arch }}.dmg" $GITHUB_WORKSPACE/
|
mv "${{ inputs.appname }}-${{ matrix.job.arch }}.dmg" $GITHUB_WORKSPACE/
|
||||||
|
|
||||||
#- name: Upload unsigned macOS app
|
|
||||||
# if: env.UPLOAD_ARTIFACT == 'true'
|
|
||||||
# uses: actions/upload-artifact@master
|
|
||||||
# with:
|
|
||||||
# name: ${{ inputs.appname }}-${{ matrix.job.arch }}
|
|
||||||
# path: ${{ inputs.appname }}-${{ matrix.job.arch }}.dmg
|
|
||||||
|
|
||||||
|
|
||||||
- name: Rename rustdesk
|
- name: Rename rustdesk
|
||||||
if: env.UPLOAD_ARTIFACT == 'true'
|
if: env.UPLOAD_ARTIFACT == 'true'
|
||||||
run: |
|
run: |
|
||||||
@@ -798,12 +789,3 @@ jobs:
|
|||||||
method: 'POST'
|
method: 'POST'
|
||||||
customHeaders: '{"Content-Type": "application/json"}'
|
customHeaders: '{"Content-Type": "application/json"}'
|
||||||
data: '{"uuid": "${{ inputs.uuid }}", "status": "Generation cancelled, try again"}'
|
data: '{"uuid": "${{ inputs.uuid }}", "status": "Generation cancelled, try again"}'
|
||||||
|
|
||||||
#- name: Publish DMG package
|
|
||||||
# if: env.UPLOAD_ARTIFACT == 'true'
|
|
||||||
# uses: softprops/action-gh-release@v1
|
|
||||||
# with:
|
|
||||||
# prerelease: true
|
|
||||||
# tag_name: ${{ inputs.upload-tag }}
|
|
||||||
# files: |
|
|
||||||
# ${{ inputs.appname }}*-${{ matrix.job.arch }}.dmg
|
|
||||||
|
|||||||
@@ -76,12 +76,6 @@ env:
|
|||||||
#signing keys env variable checks
|
#signing keys env variable checks
|
||||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||||
# To make a custom build with your own servers set the below secret values
|
|
||||||
RS_PUB_KEY: "${{ inputs.key }}"
|
|
||||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
|
||||||
CUSTOM: "${{ inputs.custom }}"
|
|
||||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
|
||||||
API_SERVER: "${{ inputs.apiServer }}"
|
|
||||||
UPLOAD_ARTIFACT: 'true'
|
UPLOAD_ARTIFACT: 'true'
|
||||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||||
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
||||||
@@ -191,11 +185,25 @@ jobs:
|
|||||||
# ./flutter/windows/runner/Runner.rc
|
# ./flutter/windows/runner/Runner.rc
|
||||||
sed -i -e 's|"RustDesk Remote Desktop"|"${{ inputs.appname }}"|' ./flutter/windows/runner/Runner.rc
|
sed -i -e 's|"RustDesk Remote Desktop"|"${{ inputs.appname }}"|' ./flutter/windows/runner/Runner.rc
|
||||||
sed -i -e 's|VALUE "InternalName", "rustdesk" "\0"|VALUE "InternalName", "${{ inputs.appname }}" "\0"|' ./flutter/windows/runner/Runner.rc
|
sed -i -e 's|VALUE "InternalName", "rustdesk" "\0"|VALUE "InternalName", "${{ inputs.appname }}" "\0"|' ./flutter/windows/runner/Runner.rc
|
||||||
sed -i -e 's|"Copyright © 2025 Purslane Ltd. All rights reserved."|"Copyright © 2025"|' ./flutter/windows/runner/Runner.rc
|
|
||||||
sed -i -e 's|"rustdesk.exe"|"${{ inputs.filename }}"|' ./flutter/windows/runner/Runner.rc
|
sed -i -e 's|"rustdesk.exe"|"${{ inputs.filename }}"|' ./flutter/windows/runner/Runner.rc
|
||||||
sed -i -e 's|"RustDesk"|"${{ inputs.appname }}"|' ./flutter/windows/runner/Runner.rc
|
sed -i -e 's|"RustDesk"|"${{ inputs.appname }}"|' ./flutter/windows/runner/Runner.rc
|
||||||
# ./src/lang/en.rs
|
# ./src/lang/en.rs
|
||||||
sed -i -e 's|RustDesk|${{ inputs.appname }}|' ./src/lang/en.rs
|
find ./src/lang -name "*.rs" -exec sed -i -e 's|RustDesk|${{ inputs.appname }}|' {} \;
|
||||||
|
|
||||||
|
|
||||||
|
- 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 }}|' ./res/setup.nsi
|
||||||
|
sed -i -e 's|PURSLANE|${{ fromJson(inputs.extras).compname }}|' ./res/msi/preprocess.py
|
||||||
|
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./res/msi/preprocess.py
|
||||||
|
sed -i -e 's|"Copyright © 2025 Purslane Ltd. All rights reserved."|"Copyright © 2025 ${{ fromJson(inputs.extras).compname }}. All rights reserved."|' ./flutter/windows/runner/Runner.rc
|
||||||
|
sed -i -e 's|Purslane Ltd|${{ fromJson(inputs.extras).compname }}|' ./flutter/windows/runner/Runner.rc
|
||||||
|
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: change url to custom
|
- name: change url to custom
|
||||||
if: fromJson(inputs.extras).urlLink != 'https://rustdesk.com'
|
if: fromJson(inputs.extras).urlLink != 'https://rustdesk.com'
|
||||||
@@ -209,6 +217,7 @@ jobs:
|
|||||||
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|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|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
|
sed -i -e "s|https://rustdesk.com/privacy.html|${{ fromJson(inputs.extras).urlLink }}/privacy.html|" ./flutter/lib/desktop/pages/install_page.dart
|
||||||
|
sed -i -e "s|https://rustdesk.com/|${{fromJson(inputs.extras).urlLink }}|" ./res/setup.nsi
|
||||||
|
|
||||||
- name: change download link to custom
|
- name: change download link to custom
|
||||||
if: fromJson(inputs.extras).downloadLink != 'https://rustdesk.com/download'
|
if: fromJson(inputs.extras).downloadLink != 'https://rustdesk.com/download'
|
||||||
@@ -219,18 +228,24 @@ jobs:
|
|||||||
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 }}|' ./flutter/lib/mobile/pages/connection_page.dart
|
||||||
sed -i -e 's|https://rustdesk.com/download|${{ fromJson(inputs.extras).downloadLink }}|' ./src/ui/index.tis
|
sed -i -e 's|https://rustdesk.com/download|${{ fromJson(inputs.extras).downloadLink }}|' ./src/ui/index.tis
|
||||||
|
|
||||||
- name: allow custom.txt
|
- name: set server, key, and apiserver
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
sed -i -e 's|rs-ny.rustdesk.com|${{ env.RENDEZVOUS_SERVER }}|' ./libs/hbb_common/src/config.rs
|
sed -i -e 's|rs-ny.rustdesk.com|${{ inputs.server }}|' ./libs/hbb_common/src/config.rs
|
||||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ env.RS_PUB_KEY }}|' ./libs/hbb_common/src/config.rs
|
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ inputs.key }}|' ./libs/hbb_common/src/config.rs
|
||||||
sed -i -e 's|For faster connection, please set up your own server||' ./src/lang/en.rs
|
sed -i -e 's|https://admin.rustdesk.com|${{ inputs.apiServer }}|' ./src/common.rs
|
||||||
sed -i -e '/const KEY:/,/};/d' ./src/common.rs
|
|
||||||
sed -i -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
|
||||||
# ./flutter/pubspec.yaml
|
# ./flutter/pubspec.yaml
|
||||||
sed -i '/intl:/a \ \ archive: ^3.6.1' ./flutter/pubspec.yaml
|
sed -i '/intl:/a \ \ archive: ^3.6.1' ./flutter/pubspec.yaml
|
||||||
|
|
||||||
|
- name: allow custom.txt
|
||||||
|
continue-on-error: true
|
||||||
|
run: |
|
||||||
|
Invoke-WebRequest -Uri https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/allowCustom.diff -OutFile allowCustom.diff
|
||||||
|
git apply allowCustom.diff
|
||||||
|
Invoke-WebRequest -Uri https://raw.githubusercontent.com/bryangerlach/rdgen/refs/heads/master/.github/patches/removeSetupServerTip.diff -OutFile removeSetupServerTip.diff
|
||||||
|
git apply removeSetupServerTip.diff
|
||||||
|
|
||||||
|
|
||||||
- name: Install LLVM and Clang
|
- name: Install LLVM and Clang
|
||||||
uses: KyleMayes/install-llvm-action@v1
|
uses: KyleMayes/install-llvm-action@v1
|
||||||
@@ -330,7 +345,6 @@ jobs:
|
|||||||
mv ./res/icon.ico ./res/icon.ico.bak
|
mv ./res/icon.ico ./res/icon.ico.bak
|
||||||
mv ./res/icon.png ./res/icon.png.bak
|
mv ./res/icon.png ./res/icon.png.bak
|
||||||
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
||||||
#echo "${{ inputs.iconbase64 }}" | base64 -d > ./res/icon.png
|
|
||||||
|
|
||||||
- name: magick stuff
|
- name: magick stuff
|
||||||
if: ${{ inputs.iconlink != 'false' }}
|
if: ${{ inputs.iconlink != 'false' }}
|
||||||
@@ -483,20 +497,6 @@ jobs:
|
|||||||
name: topmostwindow-artifacts
|
name: topmostwindow-artifacts
|
||||||
path: "./rustdesk"
|
path: "./rustdesk"
|
||||||
|
|
||||||
- name: Upload unsigned
|
|
||||||
if: env.UPLOAD_ARTIFACT == 'true'
|
|
||||||
uses: actions/upload-artifact@master
|
|
||||||
with:
|
|
||||||
name: rustdesk-unsigned-windows-${{ matrix.job.arch }}
|
|
||||||
path: rustdesk
|
|
||||||
|
|
||||||
# - name: Sign rustdesk files
|
|
||||||
# if: env.UPLOAD_ARTIFACT == 'true' && env.SIGN_BASE_URL != ''
|
|
||||||
# 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 ./rustdesk/
|
|
||||||
|
|
||||||
- name: Report Status
|
- name: Report Status
|
||||||
uses: fjogeleit/http-request-action@v1
|
uses: fjogeleit/http-request-action@v1
|
||||||
with:
|
with:
|
||||||
@@ -530,12 +530,14 @@ jobs:
|
|||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
Expand-Archive -Path ./rustdesk/signed_files.zip -DestinationPath ./rustdesk/ -Force
|
Expand-Archive -Path ./rustdesk/signed_files.zip -DestinationPath ./rustdesk/ -Force
|
||||||
|
Remove-Item ./rustdesk/unsigned_files.zip
|
||||||
|
Remove-Item ./rustdesk/signed_files.zip
|
||||||
|
|
||||||
|
|
||||||
- name: Create custom.txt file
|
- name: Create custom.txt file
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./rustdesk/custom.txt
|
echo -n "${{ inputs.custom }}" | cat > ./rustdesk/custom.txt
|
||||||
|
|
||||||
|
|
||||||
- name: Build self-extracted executable
|
- name: Build self-extracted executable
|
||||||
@@ -568,12 +570,6 @@ jobs:
|
|||||||
mv ./Package/bin/x64/Release/en-us/Package.msi ../../SignOutput/rustdesk.msi
|
mv ./Package/bin/x64/Release/en-us/Package.msi ../../SignOutput/rustdesk.msi
|
||||||
sha256sum ../../SignOutput/rustdesk.msi
|
sha256sum ../../SignOutput/rustdesk.msi
|
||||||
|
|
||||||
# - name: Sign rustdesk self-extracted file
|
|
||||||
# if: env.UPLOAD_ARTIFACT == 'true' && env.SIGN_BASE_URL != ''
|
|
||||||
# shell: bash
|
|
||||||
# run: |
|
|
||||||
# BASE_URL=${{ secrets.SIGN_BASE_URL }} SECRET_KEY=${{ secrets.SIGN_SECRET_KEY }} python3 res/job.py sign_files ./SignOutput
|
|
||||||
|
|
||||||
- name: Report Status
|
- name: Report Status
|
||||||
uses: fjogeleit/http-request-action@v1
|
uses: fjogeleit/http-request-action@v1
|
||||||
with:
|
with:
|
||||||
@@ -607,27 +603,8 @@ jobs:
|
|||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
Expand-Archive -Path ./SignOutput/signed_files.zip -DestinationPath ./SignOutput/ -Force
|
Expand-Archive -Path ./SignOutput/signed_files.zip -DestinationPath ./SignOutput/ -Force
|
||||||
|
Remove-Item ./SignOutput/unsigned_files.zip
|
||||||
# - name: Sign rustdesk self-extracted file
|
Remove-Item ./SignOutput/signed_files.zip
|
||||||
# uses: GermanBluefox/code-sign-action@v7
|
|
||||||
# if: env.UPLOAD_ARTIFACT == 'true'
|
|
||||||
# with:
|
|
||||||
# certificate: '${{ secrets.WINDOWS_PFX_BASE64 }}'
|
|
||||||
# password: '${{ secrets.WINDOWS_PFX_PASSWORD }}'
|
|
||||||
# certificatesha1: '${{ secrets.WINDOWS_PFX_SHA1_THUMBPRINT }}'
|
|
||||||
# # certificatename: '${{ secrets.WINDOWS_PFX_NAME }}'
|
|
||||||
# folder: './SignOutput'
|
|
||||||
# recursive: false
|
|
||||||
|
|
||||||
# - name: Publish Release
|
|
||||||
# uses: softprops/action-gh-release@v1
|
|
||||||
# if: env.UPLOAD_ARTIFACT == 'true'
|
|
||||||
# with:
|
|
||||||
# prerelease: true
|
|
||||||
# tag_name: ${{ env.TAG_NAME }}
|
|
||||||
# files: |
|
|
||||||
# ./SignOutput/rustdesk-*.msi
|
|
||||||
# ./SignOutput/rustdesk-*.exe
|
|
||||||
|
|
||||||
- name: rename rustdesk.exe to filename.exe
|
- name: rename rustdesk.exe to filename.exe
|
||||||
run: |
|
run: |
|
||||||
@@ -638,15 +615,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
mv ./SignOutput/rustdesk.msi "./SignOutput/${{ inputs.filename }}.msi" || echo "rustdesk"
|
mv ./SignOutput/rustdesk.msi "./SignOutput/${{ inputs.filename }}.msi" || echo "rustdesk"
|
||||||
|
|
||||||
# - name: Upload to FTP
|
|
||||||
# if: ${{ fromJson(inputs.extras).rdgen == 'true' }}
|
|
||||||
# uses: SamKirkland/FTP-Deploy-Action@v4.3.5
|
|
||||||
# with:
|
|
||||||
# server: ${{ secrets.GEN_FTP_SERVER }}
|
|
||||||
# username: ${{ secrets.GEN_FTP_USER }}
|
|
||||||
# password: ${{ secrets.GEN_FTP_PASSWORD }}
|
|
||||||
# local-dir: ./SignOutput/
|
|
||||||
# server-dir: /root/rdgen/exe/${{ env.UUIDFOLDER }}/
|
|
||||||
- name: send file to rdgen server
|
- name: send file to rdgen server
|
||||||
if: ${{ fromJson(inputs.extras).rdgen == 'true' }}
|
if: ${{ fromJson(inputs.extras).rdgen == 'true' }}
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
@@ -75,12 +75,6 @@ env:
|
|||||||
#signing keys env variable checks
|
#signing keys env variable checks
|
||||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||||
# To make a custom build with your own servers set the below secret values
|
|
||||||
RS_PUB_KEY: "${{ inputs.key }}"
|
|
||||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
|
||||||
CUSTOM: "${{ inputs.custom }}"
|
|
||||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
|
||||||
API_SERVER: "${{ inputs.apiServer }}"
|
|
||||||
UPLOAD_ARTIFACT: 'true'
|
UPLOAD_ARTIFACT: 'true'
|
||||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||||
ICONBASE64: "$${{ inputs.iconbase64 }}"
|
ICONBASE64: "$${{ inputs.iconbase64 }}"
|
||||||
@@ -488,7 +482,7 @@ jobs:
|
|||||||
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a
|
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a
|
||||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/
|
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/
|
||||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
|
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||||
@@ -505,7 +499,7 @@ jobs:
|
|||||||
mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a
|
mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a
|
||||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/
|
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/
|
||||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so
|
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||||
@@ -522,7 +516,7 @@ jobs:
|
|||||||
mkdir -p ./flutter/android/app/src/main/jniLibs/x86_64
|
mkdir -p ./flutter/android/app/src/main/jniLibs/x86_64
|
||||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86_64/
|
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86_64/
|
||||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86_64/librustdesk.so
|
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86_64/librustdesk.so
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||||
@@ -539,7 +533,7 @@ jobs:
|
|||||||
mkdir -p ./flutter/android/app/src/main/jniLibs/x86
|
mkdir -p ./flutter/android/app/src/main/jniLibs/x86
|
||||||
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/i686-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86/
|
cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/i686-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86/
|
||||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86/librustdesk.so
|
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86/librustdesk.so
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./flutter/assets/custom.txt
|
echo -n "${{ inputs.custom }}" | cat > ./flutter/assets/custom.txt
|
||||||
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
#sed -i '/^ - assets\//a\ - assets/custom.txt' ./flutter/pubspec.yaml
|
||||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||||
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
mv ./flutter/assets/icon.svg ./flutter/assets/icon.svg.bak
|
||||||
|
|||||||
@@ -76,11 +76,6 @@ env:
|
|||||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||||
# To make a custom build with your own servers set the below secret values
|
# To make a custom build with your own servers set the below secret values
|
||||||
RS_PUB_KEY: "${{ inputs.key }}"
|
|
||||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
|
||||||
CUSTOM: "${{ inputs.custom }}"
|
|
||||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
|
||||||
API_SERVER: "${{ inputs.apiServer }}"
|
|
||||||
UPLOAD_ARTIFACT: 'true'
|
UPLOAD_ARTIFACT: 'true'
|
||||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||||
ICONBASE64: "$${{ inputs.iconbase64 }}"
|
ICONBASE64: "$${{ inputs.iconbase64 }}"
|
||||||
@@ -250,7 +245,6 @@ jobs:
|
|||||||
mv ./res/icon.ico ./res/icon.ico.bak
|
mv ./res/icon.ico ./res/icon.ico.bak
|
||||||
mv ./res/icon.png ./res/icon.png.bak
|
mv ./res/icon.png ./res/icon.png.bak
|
||||||
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
||||||
#echo "${{ inputs.iconbase64 }}" | base64 -d > ./res/icon.png
|
|
||||||
wget -O ./res/icon.png ${{ fromJson(inputs.iconlink).url }}/get_png?filename=${{ fromJson(inputs.iconlink).file }}"&"uuid=${{ fromJson(inputs.iconlink).uuid }}
|
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/32x32.png ./res/32x32.png.bak
|
||||||
mv ./res/64x64.png ./res/64x64.png.bak
|
mv ./res/64x64.png ./res/64x64.png.bak
|
||||||
@@ -288,12 +282,12 @@ jobs:
|
|||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
sed -i -e 's|rs-ny.rustdesk.com|${{ env.RENDEZVOUS_SERVER }}|' ./libs/hbb_common/src/config.rs
|
sed -i -e 's|rs-ny.rustdesk.com|${{ inputs.server }}|' ./libs/hbb_common/src/config.rs
|
||||||
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ env.RS_PUB_KEY }}|' ./libs/hbb_common/src/config.rs
|
sed -i -e 's|OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=|${{ inputs.key }}|' ./libs/hbb_common/src/config.rs
|
||||||
sed -i -e 's|For faster connection, please set up your own server||' ./src/lang/en.rs
|
sed -i -e 's|For faster connection, please set up your own server||' ./src/lang/en.rs
|
||||||
sed -i -e '/const KEY:/,/};/d' ./src/common.rs
|
sed -i -e '/const KEY:/,/};/d' ./src/common.rs
|
||||||
sed -i -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
sed -i -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./custom.txt
|
echo -n "${{ inputs.custom }}" | cat > ./custom.txt
|
||||||
sed -i '/intl:/a \ \ archive: ^3.6.1' ./flutter/pubspec.yaml
|
sed -i '/intl:/a \ \ archive: ^3.6.1' ./flutter/pubspec.yaml
|
||||||
|
|
||||||
- name: change url to custom
|
- name: change url to custom
|
||||||
@@ -527,7 +521,6 @@ jobs:
|
|||||||
mkdir -p flutter/tmpdeb/usr/lib/rustdesk
|
mkdir -p flutter/tmpdeb/usr/lib/rustdesk
|
||||||
cp ./custom.txt ./flutter/tmpdeb/usr/lib/rustdesk/custom.txt
|
cp ./custom.txt ./flutter/tmpdeb/usr/lib/rustdesk/custom.txt
|
||||||
if [[ "${{ inputs.logolink }}" != "false" ]]; then
|
if [[ "${{ inputs.logolink }}" != "false" ]]; then
|
||||||
#echo "${{ inputs.logobase64 }}" | base64 -d > ./flutter/assets/logo.png
|
|
||||||
wget -O ./flutter/assets/logo.png ${{ fromJson(inputs.logolink).url }}/get_png?filename=${{ fromJson(inputs.logolink).file }}"&"uuid=${{ fromJson(inputs.logolink).uuid }}
|
wget -O ./flutter/assets/logo.png ${{ fromJson(inputs.logolink).url }}/get_png?filename=${{ fromJson(inputs.logolink).file }}"&"uuid=${{ fromJson(inputs.logolink).uuid }}
|
||||||
fi
|
fi
|
||||||
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
if [[ "${{ inputs.iconlink }}" != "false" ]]; then
|
||||||
|
|||||||
@@ -76,12 +76,6 @@ env:
|
|||||||
#signing keys env variable checks
|
#signing keys env variable checks
|
||||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||||
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
MACOS_P12_BASE64: "${{ secrets.MACOS_P12_BASE64 }}"
|
||||||
# To make a custom build with your own servers set the below secret values
|
|
||||||
RS_PUB_KEY: "${{ inputs.key }}"
|
|
||||||
RENDEZVOUS_SERVER: "${{ inputs.server }}"
|
|
||||||
CUSTOM: "${{ inputs.custom }}"
|
|
||||||
UUIDFOLDER: "${{ inputs.uuid }}"
|
|
||||||
API_SERVER: "${{ inputs.apiServer }}"
|
|
||||||
UPLOAD_ARTIFACT: 'true'
|
UPLOAD_ARTIFACT: 'true'
|
||||||
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}"
|
||||||
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
STATUS_URL: "${{ secrets.GENURL }}/updategh"
|
||||||
@@ -212,6 +206,9 @@ jobs:
|
|||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
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
|
||||||
|
sed -i -e 's|For faster connection, please set up your own server||' ./src/lang/en.rs
|
||||||
sed -i -e '/const KEY:/,/};/d' ./src/common.rs
|
sed -i -e '/const KEY:/,/};/d' ./src/common.rs
|
||||||
sed -i -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
sed -i -e '/let Ok(data) = sign::verify(&data, &pk)/,/};/d' ./src/common.rs
|
||||||
# ./flutter/pubspec.yaml
|
# ./flutter/pubspec.yaml
|
||||||
@@ -317,7 +314,6 @@ jobs:
|
|||||||
mv ./res/icon.ico ./res/icon.ico.bak
|
mv ./res/icon.ico ./res/icon.ico.bak
|
||||||
mv ./res/icon.png ./res/icon.png.bak
|
mv ./res/icon.png ./res/icon.png.bak
|
||||||
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
mv ./res/tray-icon.ico ./res/tray-icon.ico.bak
|
||||||
#echo "${{ inputs.iconbase64 }}" | base64 -d > ./res/icon.png
|
|
||||||
|
|
||||||
- name: magick stuff
|
- name: magick stuff
|
||||||
if: ${{ inputs.iconlink != 'false' }}
|
if: ${{ inputs.iconlink != 'false' }}
|
||||||
@@ -522,7 +518,7 @@ jobs:
|
|||||||
- name: Create custom.txt file
|
- name: Create custom.txt file
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
echo -n "${{ env.CUSTOM }}" | cat > ./rustdesk/custom.txt
|
echo -n "${{ inputs.custom }}" | cat > ./rustdesk/custom.txt
|
||||||
|
|
||||||
|
|
||||||
- name: Build self-extracted executable
|
- name: Build self-extracted executable
|
||||||
|
|||||||
+28
-1
@@ -1,9 +1,10 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
class GenerateForm(forms.Form):
|
class GenerateForm(forms.Form):
|
||||||
#Platform
|
#Platform
|
||||||
platform = forms.ChoiceField(choices=[('windows','Windows'),('linux','Linux (currently unavailable)'),('android','Android'),('macos','macOS')], initial='windows')
|
platform = forms.ChoiceField(choices=[('windows','Windows'),('linux','Linux (currently unavailable)'),('android','Android'),('macos','macOS')], initial='windows')
|
||||||
version = forms.ChoiceField(choices=[('master','nightly'),('1.3.7','1.3.7'),('1.3.6','1.3.6'),('1.3.5','1.3.5'),('1.3.4','1.3.4'),('1.3.3','1.3.3')], initial='1.3.7')
|
version = forms.ChoiceField(choices=[('master','nightly'),('1.3.8','1.3.8'),('1.3.7','1.3.7'),('1.3.6','1.3.6'),('1.3.5','1.3.5'),('1.3.4','1.3.4'),('1.3.3','1.3.3')], initial='1.3.8')
|
||||||
delayFix = forms.BooleanField(initial=True, required=False)
|
delayFix = forms.BooleanField(initial=True, required=False)
|
||||||
|
|
||||||
#General
|
#General
|
||||||
@@ -29,6 +30,7 @@ class GenerateForm(forms.Form):
|
|||||||
key = forms.CharField(label="Key", required=False)
|
key = forms.CharField(label="Key", required=False)
|
||||||
urlLink = forms.CharField(label="Custom URL for links", required=False)
|
urlLink = forms.CharField(label="Custom URL for links", required=False)
|
||||||
downloadLink = forms.CharField(label="Custom URL for downloading new versions", required=False)
|
downloadLink = forms.CharField(label="Custom URL for downloading new versions", required=False)
|
||||||
|
compname = forms.CharField(label="Company name",required=False)
|
||||||
|
|
||||||
#Visual
|
#Visual
|
||||||
iconfile = forms.FileField(label="Custom App Icon (in .png format)", required=False, widget=forms.FileInput(attrs={'accept': 'image/png'}))
|
iconfile = forms.FileField(label="Custom App Icon (in .png format)", required=False, widget=forms.FileInput(attrs={'accept': 'image/png'}))
|
||||||
@@ -76,3 +78,28 @@ class GenerateForm(forms.Form):
|
|||||||
hidecm = forms.BooleanField(initial=False, required=False)
|
hidecm = forms.BooleanField(initial=False, required=False)
|
||||||
statussort = forms.BooleanField(initial=False, required=False)
|
statussort = forms.BooleanField(initial=False, required=False)
|
||||||
removeNewVersionNotif = forms.BooleanField(initial=False, required=False)
|
removeNewVersionNotif = forms.BooleanField(initial=False, required=False)
|
||||||
|
|
||||||
|
def clean_iconfile(self):
|
||||||
|
print("checking icon")
|
||||||
|
image = self.cleaned_data['iconfile']
|
||||||
|
if image:
|
||||||
|
try:
|
||||||
|
# Open the image using Pillow
|
||||||
|
img = Image.open(image)
|
||||||
|
|
||||||
|
# Check if the image is a PNG (optional, but good practice)
|
||||||
|
if img.format != 'PNG':
|
||||||
|
raise forms.ValidationError("Only PNG images are allowed.")
|
||||||
|
|
||||||
|
# Get image dimensions
|
||||||
|
width, height = img.size
|
||||||
|
|
||||||
|
# Check for square dimensions
|
||||||
|
if width != height:
|
||||||
|
raise forms.ValidationError("Custom App Icon dimensions must be square.")
|
||||||
|
|
||||||
|
return image
|
||||||
|
except OSError: # Handle cases where the uploaded file is not a valid image
|
||||||
|
raise forms.ValidationError("Invalid icon file.")
|
||||||
|
except Exception as e: # Catch any other image processing errors
|
||||||
|
raise forms.ValidationError(f"Error processing icon: {e}")
|
||||||
@@ -133,6 +133,7 @@
|
|||||||
<a href='/download?filename={{filename}}.deb&uuid={{uuid}}' class="download-link">Download {{filename}}.deb</a>
|
<a href='/download?filename={{filename}}.deb&uuid={{uuid}}' class="download-link">Download {{filename}}.deb</a>
|
||||||
<a href='/download?filename={{filename}}.rpm&uuid={{uuid}}' class="download-link">Download {{filename}}.rpm</a>
|
<a href='/download?filename={{filename}}.rpm&uuid={{uuid}}' class="download-link">Download {{filename}}.rpm</a>
|
||||||
<a href='/download?filename={{filename}}-suse.rpm&uuid={{uuid}}' class="download-link">Download {{filename}}-suse.rpm</a>
|
<a href='/download?filename={{filename}}-suse.rpm&uuid={{uuid}}' class="download-link">Download {{filename}}-suse.rpm</a>
|
||||||
|
<a href='/download?filename={{filename}}.pkg.tar.zst&uuid={{uuid}}' class="download-link">Download {{filename}}.pkg.tar.zst</a>
|
||||||
{% elif platform == 'android' %}
|
{% elif platform == 'android' %}
|
||||||
<a href='/download?filename={{filename}}-aarch64.apk&uuid={{uuid}}' class="download-link">Download {{filename}}-aarch64.apk</a>
|
<a href='/download?filename={{filename}}-aarch64.apk&uuid={{uuid}}' class="download-link">Download {{filename}}-aarch64.apk</a>
|
||||||
<a href='/download?filename={{filename}}-x86_64.apk&uuid={{uuid}}' class="download-link">Download {{filename}}-x86_64.apk</a>
|
<a href='/download?filename={{filename}}-x86_64.apk&uuid={{uuid}}' class="download-link">Download {{filename}}-x86_64.apk</a>
|
||||||
|
|||||||
@@ -122,6 +122,20 @@
|
|||||||
.error {
|
.error {
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
|
.errorlist {
|
||||||
|
color: red;
|
||||||
|
display: flex; /* Enable flexbox for centering */
|
||||||
|
justify-content: center; /* Center horizontally */
|
||||||
|
align-items: center; /* Center vertically (if needed) */
|
||||||
|
list-style: none; /* Remove bullet points if it's a list */
|
||||||
|
padding: 0; /* Remove default padding */
|
||||||
|
margin: 10px auto; /* Center the list itself, add some top/bottom margin */
|
||||||
|
width: fit-content; /* Make the width fit the content */
|
||||||
|
}
|
||||||
|
|
||||||
|
.errorlist li {
|
||||||
|
margin: 5px; /* Add some spacing between list items */
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -137,6 +151,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% if form.iconfile.errors %}
|
||||||
|
<ul class="errorlist">
|
||||||
|
{% for error in form.iconfile.errors %}
|
||||||
|
<li>{{ error }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
<div class="platform">
|
<div class="platform">
|
||||||
<h2><i class="fas fa-desktop"></i> Select Platform</h2>
|
<h2><i class="fas fa-desktop"></i> Select Platform</h2>
|
||||||
<div class="platform-icons">
|
<div class="platform-icons">
|
||||||
@@ -183,6 +204,8 @@
|
|||||||
{{ form.urlLink }}<br><br>
|
{{ form.urlLink }}<br><br>
|
||||||
<label for="{{ form.downloadLink.id_for_label }}">Custom URL for downloading updates (replaces https://rustdesk.com/download):</label>
|
<label for="{{ form.downloadLink.id_for_label }}">Custom URL for downloading updates (replaces https://rustdesk.com/download):</label>
|
||||||
{{ form.downloadLink }}<br><br>
|
{{ form.downloadLink }}<br><br>
|
||||||
|
<label for="{{ form.compname.id_for_label }}">Company name for copyright (replaces Purslane Ltd):</label>
|
||||||
|
{{ form.compname }}<br><br>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -398,24 +421,33 @@
|
|||||||
try {
|
try {
|
||||||
const formData = JSON.parse(e.target.result);
|
const formData = JSON.parse(e.target.result);
|
||||||
for (const key in formData) {
|
for (const key in formData) {
|
||||||
const element = document.querySelector(`[name="${key}"]`);
|
// More robust selector: checks for name OR id
|
||||||
|
const elements = document.querySelectorAll(`[name="${key}"], [id="${key}"]`);
|
||||||
|
|
||||||
if (element) { // Check if the element exists
|
if (elements.length > 0) { // Check if any element(s) exist
|
||||||
if (element.type === 'checkbox' || element.type === 'radio') {
|
elements.forEach(element => { // Loop through all matching elements (important for radios)
|
||||||
element.checked = formData[key]; // Set checked property
|
if (element.type === 'radio') {
|
||||||
} else if (element.type !== 'file') { //for other elements
|
if (element.value === String(formData[key])) { // Compare value, crucial for radios
|
||||||
|
element.checked = true;
|
||||||
|
} else {
|
||||||
|
element.checked = false; // Uncheck others in the group
|
||||||
|
}
|
||||||
|
} else if (element.type === 'checkbox') {
|
||||||
|
element.checked = formData[key];
|
||||||
|
} else if (element.type !== 'file') {
|
||||||
element.value = formData[key];
|
element.value = formData[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle image previews (as before)
|
// Handle image previews (as before)
|
||||||
if (key === 'iconfile' && formData[key]) {
|
if (key === 'iconfile' && formData[key]) {
|
||||||
document.getElementById('id_iconbase64').value = formData[key]
|
document.getElementById('id_iconbase64').value = formData[key];
|
||||||
document.getElementById('icon-preview').innerHTML = `<img src="${formData[key]}" style="max-width: 300px; max-height: 60px;">`;
|
document.getElementById('icon-preview').innerHTML = `<img src="${formData[key]}" style="max-width: 300px; max-height: 60px;">`;
|
||||||
}
|
}
|
||||||
if (key === 'logofile' && formData[key]) {
|
if (key === 'logofile' && formData[key]) {
|
||||||
document.getElementById('id_logobase64').value = formData[key]
|
document.getElementById('id_logobase64').value = formData[key];
|
||||||
document.getElementById('logo-preview').innerHTML = `<img src="${formData[key]}" style="max-width: 300px; max-height: 60px;">`;
|
document.getElementById('logo-preview').innerHTML = `<img src="${formData[key]}" style="max-width: 300px; max-height: 60px;">`;
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
+10
-23
@@ -48,6 +48,9 @@ def generator_view(request):
|
|||||||
settings = form.cleaned_data['settings']
|
settings = form.cleaned_data['settings']
|
||||||
appname = form.cleaned_data['appname']
|
appname = form.cleaned_data['appname']
|
||||||
filename = form.cleaned_data['exename']
|
filename = form.cleaned_data['exename']
|
||||||
|
compname = form.cleaned_data['compname']
|
||||||
|
if not compname:
|
||||||
|
compname = "Purslane Ltd"
|
||||||
permPass = form.cleaned_data['permanentPassword']
|
permPass = form.cleaned_data['permanentPassword']
|
||||||
theme = form.cleaned_data['theme']
|
theme = form.cleaned_data['theme']
|
||||||
themeDorO = form.cleaned_data['themeDorO']
|
themeDorO = form.cleaned_data['themeDorO']
|
||||||
@@ -72,8 +75,13 @@ def generator_view(request):
|
|||||||
defaultManual = form.cleaned_data['defaultManual']
|
defaultManual = form.cleaned_data['defaultManual']
|
||||||
overrideManual = form.cleaned_data['overrideManual']
|
overrideManual = form.cleaned_data['overrideManual']
|
||||||
|
|
||||||
|
if all(char.isascii() for char in filename):
|
||||||
filename = re.sub(r'[^\w\s-]', '_', filename).strip()
|
filename = re.sub(r'[^\w\s-]', '_', filename).strip()
|
||||||
|
filename = filename.replace(" ","_")
|
||||||
|
else:
|
||||||
|
filename = "rustdesk"
|
||||||
|
if not all(char.isascii() for char in appname):
|
||||||
|
appname = "rustdesk"
|
||||||
myuuid = str(uuid.uuid4())
|
myuuid = str(uuid.uuid4())
|
||||||
protocol = _settings.PROTOCOL
|
protocol = _settings.PROTOCOL
|
||||||
host = request.get_host()
|
host = request.get_host()
|
||||||
@@ -170,6 +178,7 @@ def generator_view(request):
|
|||||||
extras['hidecm'] = 'true' if hidecm else 'false'
|
extras['hidecm'] = 'true' if hidecm else 'false'
|
||||||
extras['statussort'] = 'true' if statussort else 'false'
|
extras['statussort'] = 'true' if statussort else 'false'
|
||||||
extras['removeNewVersionNotif'] = 'true' if removeNewVersionNotif else 'false'
|
extras['removeNewVersionNotif'] = 'true' if removeNewVersionNotif else 'false'
|
||||||
|
extras['compname'] = compname
|
||||||
extra_input = json.dumps(extras)
|
extra_input = json.dumps(extras)
|
||||||
|
|
||||||
####from here run the github action, we need user, repo, access token.
|
####from here run the github action, we need user, repo, access token.
|
||||||
@@ -183,28 +192,6 @@ def generator_view(request):
|
|||||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/generator-macos.yml/dispatches'
|
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/generator-macos.yml/dispatches'
|
||||||
else:
|
else:
|
||||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/generator-windows.yml/dispatches'
|
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/generator-windows.yml/dispatches'
|
||||||
####changes were made to use hbb_common as a submodule in version 1.3.7, so if 1.3.3 through 1.3.6, use:
|
|
||||||
if version == '1.3.3' or version == '1.3.4' or version == '1.3.5' or version == '1.3.6':
|
|
||||||
if platform == 'windows':
|
|
||||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre137-generator-windows.yml/dispatches'
|
|
||||||
elif platform == 'linux':
|
|
||||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre137-generator-linux.yml/dispatches'
|
|
||||||
elif platform == 'android':
|
|
||||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre137-generator-android.yml/dispatches'
|
|
||||||
elif platform == 'macos':
|
|
||||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre137-generator-macos.yml/dispatches'
|
|
||||||
else:
|
|
||||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre137-generator-windows.yml/dispatches'
|
|
||||||
####breaking changes were made in 1.3.3 version, so if 1.3.2 or lower, use:
|
|
||||||
if version == '1.3.2' or version == '1.3.1' or version == '1.3.0':
|
|
||||||
if platform == 'windows':
|
|
||||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre133-generator-windows.yml/dispatches'
|
|
||||||
elif platform == 'linux':
|
|
||||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre133-generator-linux.yml/dispatches'
|
|
||||||
elif platform == 'android':
|
|
||||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre133-generator-android.yml/dispatches'
|
|
||||||
else:
|
|
||||||
url = 'https://api.github.com/repos/'+_settings.GHUSER+'/'+_settings.REPONAME+'/actions/workflows/pre133-generator-windows.yml/dispatches'
|
|
||||||
|
|
||||||
#url = 'https://api.github.com/repos/'+_settings.GHUSER+'/rustdesk/actions/workflows/test.yml/dispatches'
|
#url = 'https://api.github.com/repos/'+_settings.GHUSER+'/rustdesk/actions/workflows/test.yml/dispatches'
|
||||||
data = {
|
data = {
|
||||||
|
|||||||
@@ -1,4 +1,35 @@
|
|||||||
## To fully host the client generator yourself, you will need to following:
|
## Host the rdgen server with docker
|
||||||
|
|
||||||
|
1. First you will need to fork this repo on github
|
||||||
|
2. Next, setup a A Github fine-grained access token with permissions for your rdgen
|
||||||
|
repository:
|
||||||
|
* login to your github account
|
||||||
|
* click on your profile picture at the top right, click Settings
|
||||||
|
* at the bottom of the left panel, click Developer Settings
|
||||||
|
* click Personal access tokens
|
||||||
|
* click Fine-grained tokens
|
||||||
|
* click Generate new token
|
||||||
|
* give a token name, change expiration to whatever you want
|
||||||
|
* under Repository access, select Only select repositories, then pick your
|
||||||
|
rdgen repo
|
||||||
|
* give Read and Write access to actions and workflows
|
||||||
|
* You might have to go to: https://github.com/USERNAME/rdgen/actions and hit green Enable Actions button so it works.
|
||||||
|
3. Next, login to your Github account, go to your rdgen repo page (https://github.com/USERNAME/rdgen)
|
||||||
|
* Click on Settings
|
||||||
|
* In the left pane, click on Secrets and variables, then click Actions
|
||||||
|
* Now click New repository secret
|
||||||
|
* Set the Name to GENURL
|
||||||
|
* Set the Secret to https://rdgen.hostname.com (or whatever your server will be accessed from)
|
||||||
|
4. Now download the docker-compose.yml file and fill in the environment variables:
|
||||||
|
* SECRET_KEY="your secret key" - generate a secret key by running: ```python3 -c 'import secrets; print(secrets.token_hex(100))'```
|
||||||
|
* GHUSER="your github username"
|
||||||
|
* GHBEARER="your fine-grained access token"
|
||||||
|
* PROTOCOL="https" *optional - defaults to "https", change to "http" if you need to
|
||||||
|
* REPONAME="rdgen" *optional - defaults to "rdgen", change this if you renamed the repo when you forked it
|
||||||
|
5. Now just run ```docker compose up -d```
|
||||||
|
|
||||||
|
|
||||||
|
## Host manually:
|
||||||
|
|
||||||
1. A Github account with a fork of this repo
|
1. A Github account with a fork of this repo
|
||||||
2. A Github fine-grained access token with permissions for your rdgen
|
2. A Github fine-grained access token with permissions for your rdgen
|
||||||
@@ -24,20 +55,6 @@
|
|||||||
* GENURL="example.com:8000" *this is the domain and port that you are
|
* GENURL="example.com:8000" *this is the domain and port that you are
|
||||||
running rdgen on, needs to be accessible on the internet, depending
|
running rdgen on, needs to be accessible on the internet, depending
|
||||||
on how you have this setup the port may not be needed
|
on how you have this setup the port may not be needed
|
||||||
* optional github secrets (for signing the code):
|
|
||||||
* WINDOWS_PFX_BASE64
|
|
||||||
* WINDOWS_PFX_PASSWORD
|
|
||||||
* WINDOWS_PFX_SHA1_THUMBPRINT
|
|
||||||
|
|
||||||
|
|
||||||
## A few notes:
|
|
||||||
|
|
||||||
* If you change your repository name, make sure to change the url on lines
|
|
||||||
172-203 of views.py to reflect the change
|
|
||||||
* If you are running on http instead of https, make sure to make the change on
|
|
||||||
line 75 of views.py
|
|
||||||
|
|
||||||
## To run rdgen on your server without docker:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
# Open to the directory you want to install rdgen (change /opt to wherever you want)
|
# Open to the directory you want to install rdgen (change /opt to wherever you want)
|
||||||
@@ -69,7 +86,7 @@ open your web browser to yourdomain:8000
|
|||||||
|
|
||||||
use nginx, caddy, traefik, etc. for ssl reverse proxy
|
use nginx, caddy, traefik, etc. for ssl reverse proxy
|
||||||
|
|
||||||
## To autostart the server on boot, you can set up a systemd service called rdgen.service
|
### To autostart the server on boot, you can set up a systemd service called rdgen.service
|
||||||
|
|
||||||
replace user, group, and port if you need to replace /opt with wherever you
|
replace user, group, and port if you need to replace /opt with wherever you
|
||||||
have installed rdgen save the following file as
|
have installed rdgen save the following file as
|
||||||
|
|||||||
Reference in New Issue
Block a user