From 1ba68fcbfe6c46369eab1558301369d22b06f0ed Mon Sep 17 00:00:00 2001 From: Syngnat Date: Sat, 14 Feb 2026 15:17:03 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(release):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20Debian=2013=20Linux=20=E4=BA=A7=E7=89=A9=20WebKitGT?= =?UTF-8?q?K=20=E4=BE=9D=E8=B5=96=E4=B8=8D=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Linux Release 增加 WebKitGTK 4.1 变体(-WebKit41),保留 4.0 产物 - CI 按 WebKit 版本安装依赖,并为 Wails 注入 webkit2_41 构建标签 - 完善驱动代理可执行文件路径校验错误提示(区分不存在/目录) - README 补充 Linux 依赖排障与产物选择说明 - refs #98 --- .github/workflows/release.yml | 60 ++++++++++++++++++++--- README.md | 22 +++++++++ internal/db/mysql_agent_impl.go | 6 ++- internal/db/optional_driver_agent_impl.go | 6 ++- 4 files changed, 85 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1180a629..01ae239e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,26 +22,56 @@ jobs: os_name: MacOS arch_name: Amd64 build_name: gonavi-build-darwin-amd64 + wails_tags: "" + artifact_suffix: "" + build_optional_agents: true + linux_webkit: "" - os: macos-latest platform: darwin/arm64 os_name: MacOS arch_name: Arm64 build_name: gonavi-build-darwin-arm64 + wails_tags: "" + artifact_suffix: "" + build_optional_agents: true + linux_webkit: "" - os: windows-latest platform: windows/amd64 os_name: Windows arch_name: Amd64 build_name: gonavi-build-windows-amd64 + wails_tags: "" + artifact_suffix: "" + build_optional_agents: true + linux_webkit: "" - os: windows-latest platform: windows/arm64 os_name: Windows arch_name: Arm64 build_name: gonavi-build-windows-arm64 + wails_tags: "" + artifact_suffix: "" + build_optional_agents: true + linux_webkit: "" - os: ubuntu-22.04 platform: linux/amd64 os_name: Linux arch_name: Amd64 build_name: gonavi-build-linux-amd64 + wails_tags: "" + artifact_suffix: "" + build_optional_agents: true + linux_webkit: "4.0" + # Debian 13 (trixie) 默认仓库已切到 WebKitGTK 4.1:单独提供 4.1 变体产物 + - os: ubuntu-24.04 + platform: linux/amd64 + os_name: Linux + arch_name: Amd64 + build_name: gonavi-build-linux-amd64-webkit41 + wails_tags: "webkit2_41" + artifact_suffix: "-WebKit41" + build_optional_agents: false + linux_webkit: "4.1" steps: - name: Checkout code @@ -63,7 +93,17 @@ jobs: if: contains(matrix.platform, 'linux') run: | sudo apt-get update - sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libfuse2 + sudo apt-get install -y libgtk-3-dev + + # WebKitGTK 4.1 需要 libsoup3;4.0 使用 libsoup2(通常由 webkit2gtk dev 包拉起) + if [ "${{ matrix.linux_webkit }}" = "4.1" ]; then + sudo apt-get install -y libwebkit2gtk-4.1-dev libsoup-3.0-dev + else + sudo apt-get install -y libwebkit2gtk-4.0-dev + fi + + # AppImage 运行/打包可能需要 FUSE2。不同发行版/版本包名不同,做兼容兜底。 + sudo apt-get install -y libfuse2 || sudo apt-get install -y libfuse2t64 || true # Download linuxdeploy tools for AppImage packaging LINUXDEPLOY_URL="https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" @@ -94,9 +134,15 @@ jobs: - name: Build shell: bash run: | - wails build -platform ${{ matrix.platform }} -clean -o ${{ matrix.build_name }} -ldflags "-s -w -X GoNavi-Wails/internal/app.AppVersion=${{ github.ref_name }}" + set -euo pipefail + TAG_ARGS=() + if [ -n "${{ matrix.wails_tags }}" ]; then + TAG_ARGS+=(-tags "${{ matrix.wails_tags }}") + fi + wails build -platform ${{ matrix.platform }} -clean -o ${{ matrix.build_name }} "${TAG_ARGS[@]}" -ldflags "-s -w -X GoNavi-Wails/internal/app.AppVersion=${{ github.ref_name }}" - name: Build Optional Driver Agents + if: ${{ matrix.build_optional_agents }} shell: bash run: | set -euo pipefail @@ -160,7 +206,7 @@ jobs: codesign --force --options runtime --deep --sign - "$APP_NAME" DMG_NAME="${{ matrix.build_name }}.dmg" - FINAL_NAME="GoNavi-$VERSION-${{ matrix.os_name }}-${{ matrix.arch_name }}.dmg" + FINAL_NAME="GoNavi-$VERSION-${{ matrix.os_name }}-${{ matrix.arch_name }}${{ matrix.artifact_suffix }}.dmg" echo "📦 正在生成 DMG: $DMG_NAME..." create-dmg \ @@ -187,8 +233,8 @@ jobs: $version = $version.Substring(1) } $target = "${{ matrix.build_name }}" - $finalExeName = "GoNavi-$version-${{ matrix.os_name }}-${{ matrix.arch_name }}.exe" - $finalZipName = "GoNavi-$version-${{ matrix.os_name }}-${{ matrix.arch_name }}.zip" + $finalExeName = "GoNavi-$version-${{ matrix.os_name }}-${{ matrix.arch_name }}${{ matrix.artifact_suffix }}.exe" + $finalZipName = "GoNavi-$version-${{ matrix.os_name }}-${{ matrix.arch_name }}${{ matrix.artifact_suffix }}.zip" if (Test-Path "$target.exe") { $finalExe = "$target.exe" @@ -214,8 +260,8 @@ jobs: VERSION="${VERSION#v}" cd build/bin TARGET="${{ matrix.build_name }}" - TAR_NAME="GoNavi-$VERSION-${{ matrix.os_name }}-${{ matrix.arch_name }}.tar.gz" - APPIMAGE_NAME="GoNavi-$VERSION-${{ matrix.os_name }}-${{ matrix.arch_name }}.AppImage" + TAR_NAME="GoNavi-$VERSION-${{ matrix.os_name }}-${{ matrix.arch_name }}${{ matrix.artifact_suffix }}.tar.gz" + APPIMAGE_NAME="GoNavi-$VERSION-${{ matrix.os_name }}-${{ matrix.arch_name }}${{ matrix.artifact_suffix }}.AppImage" if [ ! -f "$TARGET" ]; then echo "❌ 未找到构建产物 '$TARGET'!" diff --git a/README.md b/README.md index 25963498..d773de95 100644 --- a/README.md +++ b/README.md @@ -129,6 +129,7 @@ wails build -clean 支持构建: * macOS (AMD64 / ARM64) * Windows (AMD64) +* Linux (AMD64,提供 WebKitGTK 4.0 与 4.1 变体产物) --- @@ -146,6 +147,27 @@ wails build -clean ``` 4. 或者:在 Finder 中右键点击应用图标,按住 `Control` 键选择 **打开**,然后在弹出的窗口中再次点击 **打开**。 +### Linux 启动报错缺少 `libwebkit2gtk` / `libjavascriptcoregtk` + +GoNavi 的 Linux 二进制依赖系统 WebKitGTK 运行库。不同发行版默认版本不同: + +- Debian 13 / Ubuntu 24.04 及更新版本:通常为 WebKitGTK 4.1 +- Ubuntu 22.04 / Debian 12 等:通常为 WebKitGTK 4.0 + +如果启动时报错(如 `libwebkit2gtk-4.0.so.37: cannot open shared object file`),请按系统安装对应依赖后重试: + +```bash +# Debian 13 / Ubuntu 24.04+ +sudo apt-get update +sudo apt-get install -y libgtk-3-0 libwebkit2gtk-4.1-0 libjavascriptcoregtk-4.1-0 + +# Ubuntu 22.04 / Debian 12 +sudo apt-get update +sudo apt-get install -y libgtk-3-0 libwebkit2gtk-4.0-37 libjavascriptcoregtk-4.0-18 +``` + +如果你使用的是 Release 中带 `-WebKit41` 后缀的 Linux 产物,请优先在 Debian 13 / Ubuntu 24.04+ 上使用;普通 Linux 产物更适合 WebKitGTK 4.0 运行环境。 + --- ## 🤝 贡献指南 diff --git a/internal/db/mysql_agent_impl.go b/internal/db/mysql_agent_impl.go index b3ffe191..3ad540da 100644 --- a/internal/db/mysql_agent_impl.go +++ b/internal/db/mysql_agent_impl.go @@ -67,9 +67,13 @@ func newMySQLAgentClient(executablePath string) (*mysqlAgentClient, error) { if pathText == "" { return nil, fmt.Errorf("MySQL 驱动代理路径为空") } - if info, err := os.Stat(pathText); err != nil || info.IsDir() { + info, err := os.Stat(pathText) + if err != nil { return nil, fmt.Errorf("MySQL 驱动代理不存在:%s", pathText) } + if info.IsDir() { + return nil, fmt.Errorf("MySQL 驱动代理路径是目录:%s", pathText) + } cmd := exec.Command(pathText) configureAgentProcess(cmd) diff --git a/internal/db/optional_driver_agent_impl.go b/internal/db/optional_driver_agent_impl.go index c61bd70d..cde793a4 100644 --- a/internal/db/optional_driver_agent_impl.go +++ b/internal/db/optional_driver_agent_impl.go @@ -68,9 +68,13 @@ func newOptionalDriverAgentClient(driverType string, executablePath string) (*op if pathText == "" { return nil, fmt.Errorf("%s 驱动代理路径为空", driverDisplayName(driverType)) } - if info, err := os.Stat(pathText); err != nil || info.IsDir() { + info, err := os.Stat(pathText) + if err != nil { return nil, fmt.Errorf("%s 驱动代理不存在:%s", driverDisplayName(driverType), pathText) } + if info.IsDir() { + return nil, fmt.Errorf("%s 驱动代理路径是目录:%s", driverDisplayName(driverType), pathText) + } cmd := exec.Command(pathText) configureAgentProcess(cmd)