From 63342478ad8a896cb2fc6d014cf78b9ab621adbb Mon Sep 17 00:00:00 2001 From: Yihang Huang <180665176+PekingSpades@users.noreply.github.com> Date: Fri, 15 May 2026 13:07:30 +0000 Subject: [PATCH 1/6] fix(relay): restore commandline bundle CI --- .github/workflows/relay-build.yml | 2 +- .github/workflows/relay-ci.yml | 2 +- .github/workflows/relay-gui-build.yml | 2 +- relay/scripts/prepare-commandline-bundle.mjs | 48 ++++++++++++++++++-- 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/.github/workflows/relay-build.yml b/.github/workflows/relay-build.yml index 2a17e9ee..bac90902 100644 --- a/.github/workflows/relay-build.yml +++ b/.github/workflows/relay-build.yml @@ -20,7 +20,7 @@ permissions: env: BUNDLED_NODE_VERSION: "24.14.1" CHROME_DEVTOOLS_MCP_VERSION: "0.20.0" - BUNDLED_PYTHON_VERSION: "3.14.1" + BUNDLED_PYTHON_VERSION: "3.13.10" BUNDLED_PYTHON_STANDALONE_RELEASE: "20251202" BUNDLED_WINDOWS_GIT_VERSION: "2.49.0.windows.1" BUNDLED_FFMPEG_RELEASE_TAG: "n7.1-2" diff --git a/.github/workflows/relay-ci.yml b/.github/workflows/relay-ci.yml index cc468772..0faa8400 100644 --- a/.github/workflows/relay-ci.yml +++ b/.github/workflows/relay-ci.yml @@ -16,7 +16,7 @@ permissions: env: BUNDLED_NODE_VERSION: "24.14.1" CHROME_DEVTOOLS_MCP_VERSION: "0.20.0" - BUNDLED_PYTHON_VERSION: "3.14.1" + BUNDLED_PYTHON_VERSION: "3.13.10" BUNDLED_PYTHON_STANDALONE_RELEASE: "20251202" BUNDLED_WINDOWS_GIT_VERSION: "2.49.0.windows.1" BUNDLED_FFMPEG_RELEASE_TAG: "n7.1-2" diff --git a/.github/workflows/relay-gui-build.yml b/.github/workflows/relay-gui-build.yml index e1ce50dd..f4cdb759 100644 --- a/.github/workflows/relay-gui-build.yml +++ b/.github/workflows/relay-gui-build.yml @@ -24,7 +24,7 @@ permissions: env: BUNDLED_NODE_VERSION: "24.14.1" CHROME_DEVTOOLS_MCP_VERSION: "0.20.0" - BUNDLED_PYTHON_VERSION: "3.14.1" + BUNDLED_PYTHON_VERSION: "3.13.10" BUNDLED_PYTHON_STANDALONE_RELEASE: "20251202" BUNDLED_WINDOWS_GIT_VERSION: "2.49.0.windows.1" BUNDLED_FFMPEG_RELEASE_TAG: "n7.1-2" diff --git a/relay/scripts/prepare-commandline-bundle.mjs b/relay/scripts/prepare-commandline-bundle.mjs index 89d97f3a..0e873692 100644 --- a/relay/scripts/prepare-commandline-bundle.mjs +++ b/relay/scripts/prepare-commandline-bundle.mjs @@ -22,7 +22,7 @@ import { fileURLToPath } from "node:url" import { resolveRequiredSubprojectRoot } from "./lib/subprojects.mjs" const DEFAULT_NODE_VERSION = "24.14.1" -const DEFAULT_PYTHON_VERSION = "3.14.1" +const DEFAULT_PYTHON_VERSION = "3.13.10" const DEFAULT_PYTHON_STANDALONE_RELEASE = "20251202" const DEFAULT_WINDOWS_GIT_VERSION = "2.49.0.windows.1" const DEFAULT_FFMPEG_RELEASE_TAG = "n7.1-2" @@ -49,7 +49,7 @@ const PYTHON_DISTRIBUTIONS = { }, "darwin-amd64": { distribution: "x86_64-apple-darwin-install_only_stripped", - pipPlatform: "macosx_10_13_x86_64", + pipPlatform: "macosx_11_0_x86_64", }, "darwin-arm64": { distribution: "aarch64-apple-darwin-install_only_stripped", @@ -128,7 +128,7 @@ const PYTHON_REQUIREMENTS = [ "lxml==6.0.2", "mutagen==1.47.0", "openpyxl==3.1.5", - "pandas==3.0.2", + "pandas==2.3.2", "pdfplumber==0.11.4", "Pillow==12.2.0", "pydub==0.25.1", @@ -146,6 +146,9 @@ const PYTHON_REQUIREMENTS = [ "xlrd==2.0.1", ] +// Cross-platform pip installs require wheels; prebuild known pure-Python sdists. +const PURE_PYTHON_SOURCE_WHEEL_REQUIREMENTS = ["pyaes==1.6.1"] + const NODE_MODULE_PRUNE_DIRS = new Set([ "__image_snapshots__", "__snapshots__", @@ -378,6 +381,7 @@ function getCommandlineAssetVersion( nodeAssetVersion, nodeDependencies: NODE_DEPENDENCIES, pythonRequirements: PYTHON_REQUIREMENTS, + purePythonSourceWheelRequirements: PURE_PYTHON_SOURCE_WHEEL_REQUIREMENTS, managedProviders: managedProviders.map((provider) => ({ slug: provider.slug, displayName: provider.displayName, @@ -648,6 +652,32 @@ async function installPythonPackages( ) } +async function preparePurePythonSourceWheelhouse(wheelhouseDirectory) { + if (PURE_PYTHON_SOURCE_WHEEL_REQUIREMENTS.length === 0) { + return + } + + const hostPython = + process.env.PYTHON || (process.platform === "win32" ? "python" : "python3") + await mkdir(wheelhouseDirectory, { recursive: true }) + await runCommand( + hostPython, + [ + "-m", + "pip", + "wheel", + "--disable-pip-version-check", + "--no-deps", + "--wheel-dir", + wheelhouseDirectory, + ...PURE_PYTHON_SOURCE_WHEEL_REQUIREMENTS, + ], + { + shell: process.platform === "win32", + } + ) +} + async function findFiles(rootDir, matcher) { const queue = [rootDir] const matches = [] @@ -1177,7 +1207,8 @@ async function installManagedPythonPackages( pythonVersion, targetDirectory, providers, - providerRoots + providerRoots, + wheelhouseDirectory ) { const pythonSpec = PYTHON_DISTRIBUTIONS[targetPlatform] if (!pythonSpec) { @@ -1210,6 +1241,9 @@ async function installManagedPythonPackages( "--target", targetDirectory, ] + if (wheelhouseDirectory) { + pipArgs.push("--find-links", wheelhouseDirectory) + } const shouldAllowSourceDists = installSpec.allowSourceDists && targetPlatform === getNativeTargetPlatform() @@ -1595,12 +1629,14 @@ async function main() { const pythonArchivePath = join(workDir, pythonSpec.archiveFileName) const pythonExtractDir = join(workDir, "python-extract") const pythonPackageDir = join(workDir, "python-site-packages") + const pythonSourceWheelhouseDir = join(workDir, "python-source-wheelhouse") const gitExtractDir = join(workDir, "git-extract") const ffmpegDownloadDir = join(workDir, "ffmpeg-downloads") await mkdir(nodePackageDir, { recursive: true }) await mkdir(pythonExtractDir, { recursive: true }) await mkdir(pythonPackageDir, { recursive: true }) + await mkdir(pythonSourceWheelhouseDir, { recursive: true }) await mkdir(gitExtractDir, { recursive: true }) await mkdir(ffmpegDownloadDir, { recursive: true }) @@ -1625,6 +1661,7 @@ async function main() { console.log( `Installing bundled Python packages (${options.packageProfile})` ) + await preparePurePythonSourceWheelhouse(pythonSourceWheelhouseDir) await installPythonPackages( options.targetPlatform, options.pythonVersion, @@ -1635,7 +1672,8 @@ async function main() { options.pythonVersion, pythonPackageDir, managedProviderManifest, - providerRoots + providerRoots, + pythonSourceWheelhouseDir ) await installCliAnythingExtraPythonPackages( options.targetPlatform, From 59c4a09dffed89c26de89040ff83f89b4c9f926d Mon Sep 17 00:00:00 2001 From: Yihang Huang <180665176+PekingSpades@users.noreply.github.com> Date: Fri, 15 May 2026 13:30:01 +0000 Subject: [PATCH 2/6] fix(relay): install CI desktop build prerequisites --- .github/workflows/relay-build.yml | 2 +- .github/workflows/relay-ci.yml | 13 ++++++++----- .github/workflows/relay-gui-build.yml | 11 +++++++---- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.github/workflows/relay-build.yml b/.github/workflows/relay-build.yml index bac90902..1e23f6d4 100644 --- a/.github/workflows/relay-build.yml +++ b/.github/workflows/relay-build.yml @@ -131,7 +131,7 @@ jobs: if: matrix.goos == 'linux' && matrix.goarch == 'amd64' run: | sudo apt-get update -qq - sudo apt-get install -y -qq libfuse-dev libfuse2t64 + sudo apt-get install -y -qq libfuse-dev libfuse2t64 libx11-dev libxtst-dev libxinerama-dev libxrandr-dev - name: Prepare shared Node runtime run: node relay/scripts/prepare-node-bundle.mjs --target-platform=${{ matrix.goos }}-${{ matrix.goarch }} --node-version=${{ env.BUNDLED_NODE_VERSION }} diff --git a/.github/workflows/relay-ci.yml b/.github/workflows/relay-ci.yml index 0faa8400..57f3398a 100644 --- a/.github/workflows/relay-ci.yml +++ b/.github/workflows/relay-ci.yml @@ -64,10 +64,10 @@ jobs: env: MATRIX_JSON: >- [ - {"runner":"ubuntu-latest","goos":"linux","goarch":"amd64","suffix":"linux-amd64","wails_tags":"desktop_cua,webkit2_41","cgo_ldflags_allow":"","wails_extra_args":"","setup":"sudo apt-get update -qq\nsudo apt-get install -y -qq libgtk-3-dev libwebkit2gtk-4.1-dev desktop-file-utils patchelf squashfs-tools"}, - {"runner":"macos-15","goos":"darwin","goarch":"arm64","suffix":"darwin-arm64","wails_tags":"desktop_cua","cgo_ldflags_allow":"^(-weak_framework|ScreenCaptureKit)$","wails_extra_args":"","setup":""}, - {"runner":"macos-15-intel","goos":"darwin","goarch":"amd64","suffix":"darwin-amd64","wails_tags":"desktop_cua","cgo_ldflags_allow":"^(-weak_framework|ScreenCaptureKit)$","wails_extra_args":"","setup":""}, - {"runner":"windows-latest","goos":"windows","goarch":"amd64","suffix":"windows-amd64","ext":".exe","wails_tags":"desktop_cua","cgo_ldflags_allow":"","wails_extra_args":"-nsis","setup":"pwsh -File .github/scripts/setup-windows-gui-build.ps1"} + {"runner":"ubuntu-latest","goos":"linux","goarch":"amd64","suffix":"linux-amd64","wails_tags":"desktop_cua,webkit2_41","cgo_ldflags_allow":"","macos_deployment_target":"","wails_extra_args":"","setup":"sudo apt-get update -qq\nsudo apt-get install -y -qq libgtk-3-dev libwebkit2gtk-4.1-dev desktop-file-utils patchelf squashfs-tools"}, + {"runner":"macos-15","goos":"darwin","goarch":"arm64","suffix":"darwin-arm64","wails_tags":"desktop_cua","cgo_ldflags_allow":"^(-weak_framework|ScreenCaptureKit)$","macos_deployment_target":"14.4","wails_extra_args":"","setup":""}, + {"runner":"macos-15-intel","goos":"darwin","goarch":"amd64","suffix":"darwin-amd64","wails_tags":"desktop_cua","cgo_ldflags_allow":"^(-weak_framework|ScreenCaptureKit)$","macos_deployment_target":"14.4","wails_extra_args":"","setup":""}, + {"runner":"windows-latest","goos":"windows","goarch":"amd64","suffix":"windows-amd64","ext":".exe","wails_tags":"desktop_cua","cgo_ldflags_allow":"","macos_deployment_target":"","wails_extra_args":"-nsis","setup":"pwsh -File .github/scripts/setup-windows-gui-build.ps1"} ] REQUESTED_PLATFORMS: ${{ vars.RELAY_GUI_BUILD_PLATFORMS || 'all' }} run: python3 .github/scripts/filter-platform-matrix.py @@ -224,7 +224,7 @@ jobs: if: matrix.goos == 'linux' && matrix.goarch == 'amd64' run: | sudo apt-get update -qq - sudo apt-get install -y -qq libfuse-dev libfuse2t64 + sudo apt-get install -y -qq libfuse-dev libfuse2t64 libx11-dev libxtst-dev libxinerama-dev libxrandr-dev - name: Build working-directory: relay @@ -467,6 +467,9 @@ jobs: env: CGO_LDFLAGS_ALLOW: ${{ matrix.cgo_ldflags_allow }} run: | + if [ -n "${{ matrix.macos_deployment_target }}" ]; then + export MACOSX_DEPLOYMENT_TARGET="${{ matrix.macos_deployment_target }}" + fi extra_args="${{ matrix.wails_extra_args }}" if [ "${{ matrix.goos }}" = "windows" ]; then extra_args="${{ steps.windows_package_variants.outputs.wails_extra_args }}" diff --git a/.github/workflows/relay-gui-build.yml b/.github/workflows/relay-gui-build.yml index f4cdb759..71f33439 100644 --- a/.github/workflows/relay-gui-build.yml +++ b/.github/workflows/relay-gui-build.yml @@ -76,10 +76,10 @@ jobs: env: MATRIX_JSON: >- [ - {"runner":"ubuntu-latest","goos":"linux","goarch":"amd64","suffix":"linux-amd64","wails_tags":"desktop_cua,webkit2_41","cgo_ldflags_allow":"","wails_extra_args":"","setup":"sudo apt-get update -qq\nsudo apt-get install -y -qq libgtk-3-dev libwebkit2gtk-4.1-dev desktop-file-utils patchelf squashfs-tools"}, - {"runner":"macos-15","goos":"darwin","goarch":"arm64","suffix":"darwin-arm64","wails_tags":"desktop_cua","cgo_ldflags_allow":"^(-weak_framework|ScreenCaptureKit)$","wails_extra_args":"","setup":""}, - {"runner":"macos-15-intel","goos":"darwin","goarch":"amd64","suffix":"darwin-amd64","wails_tags":"desktop_cua","cgo_ldflags_allow":"^(-weak_framework|ScreenCaptureKit)$","wails_extra_args":"","setup":""}, - {"runner":"windows-latest","goos":"windows","goarch":"amd64","suffix":"windows-amd64","ext":".exe","wails_tags":"desktop_cua","cgo_ldflags_allow":"","wails_extra_args":"-nsis","setup":"pwsh -File .github/scripts/setup-windows-gui-build.ps1"} + {"runner":"ubuntu-latest","goos":"linux","goarch":"amd64","suffix":"linux-amd64","wails_tags":"desktop_cua,webkit2_41","cgo_ldflags_allow":"","macos_deployment_target":"","wails_extra_args":"","setup":"sudo apt-get update -qq\nsudo apt-get install -y -qq libgtk-3-dev libwebkit2gtk-4.1-dev desktop-file-utils patchelf squashfs-tools"}, + {"runner":"macos-15","goos":"darwin","goarch":"arm64","suffix":"darwin-arm64","wails_tags":"desktop_cua","cgo_ldflags_allow":"^(-weak_framework|ScreenCaptureKit)$","macos_deployment_target":"14.4","wails_extra_args":"","setup":""}, + {"runner":"macos-15-intel","goos":"darwin","goarch":"amd64","suffix":"darwin-amd64","wails_tags":"desktop_cua","cgo_ldflags_allow":"^(-weak_framework|ScreenCaptureKit)$","macos_deployment_target":"14.4","wails_extra_args":"","setup":""}, + {"runner":"windows-latest","goos":"windows","goarch":"amd64","suffix":"windows-amd64","ext":".exe","wails_tags":"desktop_cua","cgo_ldflags_allow":"","macos_deployment_target":"","wails_extra_args":"-nsis","setup":"pwsh -File .github/scripts/setup-windows-gui-build.ps1"} ] REQUESTED_PLATFORMS: ${{ github.event_name == 'workflow_dispatch' && inputs.platforms || vars.RELAY_GUI_BUILD_PLATFORMS || 'all' }} run: python3 .github/scripts/filter-platform-matrix.py @@ -210,6 +210,9 @@ jobs: env: CGO_LDFLAGS_ALLOW: ${{ matrix.cgo_ldflags_allow }} run: | + if [ -n "${{ matrix.macos_deployment_target }}" ]; then + export MACOSX_DEPLOYMENT_TARGET="${{ matrix.macos_deployment_target }}" + fi extra_args="${{ matrix.wails_extra_args }}" if [ "${{ matrix.goos }}" = "windows" ]; then extra_args="${{ steps.windows_package_variants.outputs.wails_extra_args }}" From 49048b89df6f3f02889f0f1d224f197b0dd06fde Mon Sep 17 00:00:00 2001 From: Yihang Huang <180665176+PekingSpades@users.noreply.github.com> Date: Fri, 15 May 2026 13:42:33 +0000 Subject: [PATCH 3/6] fix(relay): avoid duplicate macOS overlay symbols --- .../internal/builtinmcp/cua/overlay_darwin.go | 19 ----------- .../builtinmcp/cua/overlay_darwin_export.go | 32 +++++++++++++++++++ 2 files changed, 32 insertions(+), 19 deletions(-) create mode 100644 relay/internal/builtinmcp/cua/overlay_darwin_export.go diff --git a/relay/internal/builtinmcp/cua/overlay_darwin.go b/relay/internal/builtinmcp/cua/overlay_darwin.go index 6ab1e214..b2dd6431 100644 --- a/relay/internal/builtinmcp/cua/overlay_darwin.go +++ b/relay/internal/builtinmcp/cua/overlay_darwin.go @@ -799,22 +799,3 @@ func (d *darwinOverlayController) CaptureInfo(runtimeSessionID string) overlayCa } return overlayCaptureInfo{ExcludedWindowIDs: windowIDs} } - -//export synapseDarwinOverlayHotkeyCallback -func synapseDarwinOverlayHotkeyCallback(controllerID C.uintptr_t, action C.int) { - raw, ok := darwinOverlayControllers.Load(uint64(controllerID)) - if !ok { - return - } - controller, ok := raw.(*darwinOverlayController) - if !ok || controller == nil || controller.hotkeyHandler == nil { - return - } - - switch int(action) { - case int(C.SynapseDarwinHotkeyTerminate): - go controller.hotkeyHandler(overlayHotkeyTerminate) - case int(C.SynapseDarwinHotkeyDisable): - go controller.hotkeyHandler(overlayHotkeyDisableBoot) - } -} diff --git a/relay/internal/builtinmcp/cua/overlay_darwin_export.go b/relay/internal/builtinmcp/cua/overlay_darwin_export.go new file mode 100644 index 00000000..dad220a3 --- /dev/null +++ b/relay/internal/builtinmcp/cua/overlay_darwin_export.go @@ -0,0 +1,32 @@ +//go:build darwin && desktop_cua && cgo + +package cua + +/* +#include +*/ +import "C" + +const ( + synapseDarwinHotkeyTerminate = 1 + synapseDarwinHotkeyDisable = 2 +) + +//export synapseDarwinOverlayHotkeyCallback +func synapseDarwinOverlayHotkeyCallback(controllerID C.uintptr_t, action C.int) { + raw, ok := darwinOverlayControllers.Load(uint64(controllerID)) + if !ok { + return + } + controller, ok := raw.(*darwinOverlayController) + if !ok || controller == nil || controller.hotkeyHandler == nil { + return + } + + switch int(action) { + case synapseDarwinHotkeyTerminate: + go controller.hotkeyHandler(overlayHotkeyTerminate) + case synapseDarwinHotkeyDisable: + go controller.hotkeyHandler(overlayHotkeyDisableBoot) + } +} From eb964bda69c26400622ef6ea977bc822b6655038 Mon Sep 17 00:00:00 2001 From: Yihang Huang <180665176+PekingSpades@users.noreply.github.com> Date: Fri, 15 May 2026 14:06:58 +0000 Subject: [PATCH 4/6] fix(relay): expose bundled Linux GUI libraries to linuxdeploy --- relay/scripts/package-gui-linux.sh | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/relay/scripts/package-gui-linux.sh b/relay/scripts/package-gui-linux.sh index 35b13aef..d13f6c37 100755 --- a/relay/scripts/package-gui-linux.sh +++ b/relay/scripts/package-gui-linux.sh @@ -155,7 +155,22 @@ curl -fsSL "https://github.com/linuxdeploy/linuxdeploy/releases/download/continu curl -fsSL "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" -o "$appimagetool" chmod +x "$linuxdeploy" "$appimagetool" -APPIMAGE_EXTRACT_AND_RUN=1 "$linuxdeploy" \ +runtime_library_path="$( + find "${appdir}/usr/lib/synapse-relay-gui/runtime" \ + -type f \( -name '*.so' -o -name '*.so.*' \) \ + -printf '%h\n' \ + | sort -u \ + | paste -sd ':' - +)" +linuxdeploy_env=(APPIMAGE_EXTRACT_AND_RUN=1) +if [[ -n "$runtime_library_path" ]]; then + if [[ -n "${LD_LIBRARY_PATH:-}" ]]; then + runtime_library_path="${runtime_library_path}:${LD_LIBRARY_PATH}" + fi + linuxdeploy_env+=("LD_LIBRARY_PATH=${runtime_library_path}") +fi + +env "${linuxdeploy_env[@]}" "$linuxdeploy" \ --appdir "$appdir" \ -e "${appdir}/usr/bin/synapse-relay-gui-bin" \ -d "${appdir}/usr/share/applications/synapse-relay-gui.desktop" \ From 0cd15399218cd52823b3fa4422c73b7604e5d239 Mon Sep 17 00:00:00 2001 From: Yihang Huang <180665176+PekingSpades@users.noreply.github.com> Date: Fri, 15 May 2026 14:25:58 +0000 Subject: [PATCH 5/6] fix(relay): package Linux AppImage runtime after linuxdeploy --- relay/scripts/package-gui-linux.sh | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/relay/scripts/package-gui-linux.sh b/relay/scripts/package-gui-linux.sh index d13f6c37..b45d4bce 100755 --- a/relay/scripts/package-gui-linux.sh +++ b/relay/scripts/package-gui-linux.sh @@ -119,7 +119,6 @@ mkdir -p \ "${appdir}/usr/share/icons/hicolor/256x256/apps" \ "${appdir}/usr/share/metainfo" install -m 0755 "$binary_path" "${appdir}/usr/bin/synapse-relay-gui-bin" -node "${repo_root}/relay/scripts/prepare-gui-build-assets.mjs" --runtime-output="${appdir}/usr/lib/synapse-relay-gui/runtime" install -m 0644 "${repo_root}/packages/web-next/public/synapse.png" "${appdir}/usr/share/icons/hicolor/256x256/apps/synapse-relay-gui.png" cat >"${appdir}/usr/share/applications/synapse-relay-gui.desktop" <<'EOF' @@ -155,27 +154,14 @@ curl -fsSL "https://github.com/linuxdeploy/linuxdeploy/releases/download/continu curl -fsSL "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" -o "$appimagetool" chmod +x "$linuxdeploy" "$appimagetool" -runtime_library_path="$( - find "${appdir}/usr/lib/synapse-relay-gui/runtime" \ - -type f \( -name '*.so' -o -name '*.so.*' \) \ - -printf '%h\n' \ - | sort -u \ - | paste -sd ':' - -)" -linuxdeploy_env=(APPIMAGE_EXTRACT_AND_RUN=1) -if [[ -n "$runtime_library_path" ]]; then - if [[ -n "${LD_LIBRARY_PATH:-}" ]]; then - runtime_library_path="${runtime_library_path}:${LD_LIBRARY_PATH}" - fi - linuxdeploy_env+=("LD_LIBRARY_PATH=${runtime_library_path}") -fi - -env "${linuxdeploy_env[@]}" "$linuxdeploy" \ +APPIMAGE_EXTRACT_AND_RUN=1 "$linuxdeploy" \ --appdir "$appdir" \ -e "${appdir}/usr/bin/synapse-relay-gui-bin" \ -d "${appdir}/usr/share/applications/synapse-relay-gui.desktop" \ -i "${appdir}/usr/share/icons/hicolor/256x256/apps/synapse-relay-gui.png" +node "${repo_root}/relay/scripts/prepare-gui-build-assets.mjs" --runtime-output="${appdir}/usr/lib/synapse-relay-gui/runtime" + cat >"${appdir}/usr/bin/synapse-relay-gui" <<'EOF' #!/bin/sh set -eu From aaf0eaa7a44f34634f7891e98b77293800584d9d Mon Sep 17 00:00:00 2001 From: Yihang Huang <180665176+PekingSpades@users.noreply.github.com> Date: Fri, 15 May 2026 14:44:58 +0000 Subject: [PATCH 6/6] fix(relay): use valid Linux GUI package icon --- .../packaging/linux/synapse-relay-gui.png | Bin 0 -> 16124 bytes relay/scripts/package-gui-linux.sh | 5 +++-- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 relay/cmd/synapse-relay-gui/packaging/linux/synapse-relay-gui.png diff --git a/relay/cmd/synapse-relay-gui/packaging/linux/synapse-relay-gui.png b/relay/cmd/synapse-relay-gui/packaging/linux/synapse-relay-gui.png new file mode 100644 index 0000000000000000000000000000000000000000..acde14a1487f46685b60f583317e52486c2c76f2 GIT binary patch literal 16124 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 literal 0 HcmV?d00001 diff --git a/relay/scripts/package-gui-linux.sh b/relay/scripts/package-gui-linux.sh index b45d4bce..8352c71f 100755 --- a/relay/scripts/package-gui-linux.sh +++ b/relay/scripts/package-gui-linux.sh @@ -47,6 +47,7 @@ portable_root="synapse-relay-gui-${suffix}-portable" portable_archive="synapse-relay-gui-${suffix}-portable.tar.gz" deb_output="synapse-relay-gui-${suffix}.deb" appimage_output="synapse-relay-gui-${suffix}.AppImage" +icon_path="${repo_root}/relay/cmd/synapse-relay-gui/packaging/linux/synapse-relay-gui.png" package_version="${version#v}" if [[ ! "$package_version" =~ ^[0-9] ]]; then @@ -83,7 +84,7 @@ mkdir -p \ "${deb_root}/DEBIAN" install -m 0755 "$binary_path" "${install_root}/synapse-relay-gui" node "${repo_root}/relay/scripts/prepare-gui-build-assets.mjs" --runtime-output="${install_root}/runtime" -install -m 0644 "${repo_root}/packages/web-next/public/synapse.png" "${deb_root}/usr/share/icons/hicolor/256x256/apps/synapse-relay-gui.png" +install -m 0644 "$icon_path" "${deb_root}/usr/share/icons/hicolor/256x256/apps/synapse-relay-gui.png" ln -s /opt/synapse-relay-gui/synapse-relay-gui "${deb_root}/usr/bin/synapse-relay-gui" cat >"${deb_root}/usr/share/applications/synapse-relay-gui.desktop" <<'EOF' @@ -119,7 +120,7 @@ mkdir -p \ "${appdir}/usr/share/icons/hicolor/256x256/apps" \ "${appdir}/usr/share/metainfo" install -m 0755 "$binary_path" "${appdir}/usr/bin/synapse-relay-gui-bin" -install -m 0644 "${repo_root}/packages/web-next/public/synapse.png" "${appdir}/usr/share/icons/hicolor/256x256/apps/synapse-relay-gui.png" +install -m 0644 "$icon_path" "${appdir}/usr/share/icons/hicolor/256x256/apps/synapse-relay-gui.png" cat >"${appdir}/usr/share/applications/synapse-relay-gui.desktop" <<'EOF' [Desktop Entry]