diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml
index 2444d40..671dc86 100644
--- a/.github/workflows/build-release.yml
+++ b/.github/workflows/build-release.yml
@@ -50,19 +50,19 @@ jobs:
MATRIX='{"include":[]}'
if [[ "$PLATFORMS" == *"windows"* ]]; then
- MATRIX=$(echo "$MATRIX" | jq -c '.include += [{"platform":"windows-latest","os":"windows","arch":"amd64","output_name":"voidraft-windows-amd64.exe","id":"windows"}]')
+ MATRIX=$(echo "$MATRIX" | jq -c '.include += [{"platform":"windows-latest","os":"windows","arch":"amd64","platform_dir":"windows","id":"windows"}]')
fi
if [[ "$PLATFORMS" == *"linux"* ]]; then
- MATRIX=$(echo "$MATRIX" | jq -c '.include += [{"platform":"ubuntu-22.04","os":"linux","arch":"amd64","output_name":"voidraft-linux-amd64","id":"linux"}]')
+ MATRIX=$(echo "$MATRIX" | jq -c '.include += [{"platform":"ubuntu-22.04","os":"linux","arch":"amd64","platform_dir":"linux","id":"linux"}]')
fi
if [[ "$PLATFORMS" == *"macos-intel"* ]]; then
- MATRIX=$(echo "$MATRIX" | jq -c '.include += [{"platform":"macos-latest","os":"darwin","arch":"amd64","output_name":"voidraft-darwin-amd64","id":"macos-intel"}]')
+ MATRIX=$(echo "$MATRIX" | jq -c '.include += [{"platform":"macos-latest","os":"darwin","arch":"amd64","platform_dir":"darwin","id":"macos-intel"}]')
fi
if [[ "$PLATFORMS" == *"macos-arm"* ]]; then
- MATRIX=$(echo "$MATRIX" | jq -c '.include += [{"platform":"macos-latest","os":"darwin","arch":"arm64","output_name":"voidraft-darwin-arm64","id":"macos-arm"}]')
+ MATRIX=$(echo "$MATRIX" | jq -c '.include += [{"platform":"macos-latest","os":"darwin","arch":"arm64","platform_dir":"darwin","id":"macos-arm"}]')
fi
# 使用 -c 确保输出紧凑的单行 JSON,符合 GitHub Actions 输出格式
@@ -116,17 +116,41 @@ jobs:
if: matrix.os == 'linux'
run: |
sudo apt-get update
+ # Wails 3 + 项目特定依赖
sudo apt-get install -y \
build-essential \
+ pkg-config \
libgtk-3-dev \
- libwebkit2gtk-4.0-dev \
- pkg-config
+ libwebkit2gtk-4.1-dev \
+ libayatana-appindicator3-dev \
+ librsvg2-dev \
+ patchelf \
+ libx11-dev \
+ rpm \
+ fuse \
+ file
+
+ # 依赖说明:
+ # - build-essential: C/C++ 编译工具链
+ # - pkg-config: 包配置工具
+ # - libgtk-3-dev: GTK3 GUI 框架
+ # - libwebkit2gtk-4.1-dev: WebKit2GTK 4.1 (Wails 3 要求)
+ # - libayatana-appindicator3-dev: 系统托盘支持
+ # - librsvg2-dev: SVG 图标支持
+ # - patchelf: 修改 ELF 二进制文件
+ # - libx11-dev: X11 库 (热键服务依赖)
+ # - rpm: RPM 打包工具
+ # - fuse: AppImage 运行依赖
+ # - file: 文件类型检测工具
- # Windows 平台依赖(GitHub Actions 的 Windows runner 已包含 MinGW)
+ # Windows 平台依赖
- name: 设置 Windows 构建环境
if: matrix.os == 'windows'
run: |
- echo "Windows runner 已包含构建工具"
+ # 安装 NSIS (用于创建安装程序)
+ choco install nsis -y
+ # 将 NSIS 添加到 PATH
+ echo "C:\Program Files (x86)\NSIS" >> $GITHUB_PATH
shell: bash
# macOS 平台依赖
@@ -150,52 +174,67 @@ jobs:
working-directory: frontend
run: npm run build
- # 构建 Wails 应用
- - name: 构建 Wails 应用
+ # 使用 Wails Task 构建和打包应用
+ - name: 构建和打包 Wails 应用
run: |
- wails3 build -platform ${{ matrix.os }}/${{ matrix.arch }}
+ # 使用 wails3 task 执行平台特定的打包任务
+ cd build/${{ matrix.platform_dir }}
+ wails3 task package PRODUCTION=true ARCH=${{ matrix.arch }}
+ env:
+ CGO_ENABLED: 1
+ APP_NAME: voidraft
+ BIN_DIR: ../../bin
+ ROOT_DIR: ../..
shell: bash
- # 查找构建产物
- - name: 查找构建产物
- id: find_binary
- shell: bash
+ # 整理构建产物
+ - name: 整理构建产物
+ id: organize_artifacts
run: |
+ echo "=== 构建产物列表 ==="
+ ls -lhR bin/ || echo "bin 目录不存在"
+
+ # 创建输出目录
+ mkdir -p artifacts
+
+ # 根据平台复制产物
if [ "${{ matrix.os }}" = "windows" ]; then
- BINARY=$(find build/bin -name "*.exe" -type f | head -n 1)
+ echo "Windows 平台:查找 NSIS 安装程序"
+ find . -name "*.exe" -type f
+ cp bin/*.exe artifacts/ 2>/dev/null || echo "未找到 .exe 文件"
+
+ elif [ "${{ matrix.os }}" = "linux" ]; then
+ echo "Linux 平台:查找 AppImage, deb, rpm, archlinux 包"
+ find bin -type f
+ cp bin/*.AppImage artifacts/ 2>/dev/null || echo "未找到 AppImage"
+ cp bin/*.deb artifacts/ 2>/dev/null || echo "未找到 deb"
+ cp bin/*.rpm artifacts/ 2>/dev/null || echo "未找到 rpm"
+ cp bin/*.pkg.tar.zst artifacts/ 2>/dev/null || echo "未找到 archlinux 包"
+
elif [ "${{ matrix.os }}" = "darwin" ]; then
- # macOS 可能生成 .app 包或二进制文件
- BINARY=$(find build/bin -type f \( -name "*.app" -o ! -name ".*" \) | head -n 1)
- else
- BINARY=$(find build/bin -type f ! -name ".*" | head -n 1)
- fi
- echo "binary_path=$BINARY" >> $GITHUB_OUTPUT
- echo "找到的二进制文件: $BINARY"
-
- # 重命名构建产物
- - name: 重命名构建产物
- shell: bash
- run: |
- BINARY_PATH="${{ steps.find_binary.outputs.binary_path }}"
- if [ -n "$BINARY_PATH" ]; then
- # 对于 macOS .app 包,打包为 zip
- if [[ "$BINARY_PATH" == *.app ]]; then
- cd "$(dirname "$BINARY_PATH")"
- zip -r "${{ matrix.output_name }}.zip" "$(basename "$BINARY_PATH")"
- echo "ARTIFACT_PATH=$(pwd)/${{ matrix.output_name }}.zip" >> $GITHUB_ENV
+ echo "macOS 平台:查找 .app bundle"
+ find bin -name "*.app" -type d
+ # macOS: .app bundle,打包成 zip
+ if [ -d "bin/voidraft.app" ]; then
+ cd bin
+ zip -r ../artifacts/voidraft-darwin-${{ matrix.arch }}.app.zip voidraft.app
+ cd ..
else
- cp "$BINARY_PATH" "${{ matrix.output_name }}"
- echo "ARTIFACT_PATH=$(pwd)/${{ matrix.output_name }}" >> $GITHUB_ENV
+ echo "未找到 .app bundle"
fi
fi
+
+ echo "=== 最终产物 ==="
+ ls -lh artifacts/ || echo "artifacts 目录为空"
+ shell: bash
# 上传构建产物到 Artifacts
- name: 上传构建产物
uses: actions/upload-artifact@v4
with:
- name: ${{ matrix.output_name }}
- path: ${{ env.ARTIFACT_PATH }}
- if-no-files-found: error
+ name: voidraft-${{ matrix.id }}
+ path: artifacts/*
+ if-no-files-found: warn
# 创建 GitHub Release 并上传所有构建产物
release:
diff --git a/build/COMMANDS.md b/build/COMMANDS.md
new file mode 100644
index 0000000..c1ea3fd
--- /dev/null
+++ b/build/COMMANDS.md
@@ -0,0 +1,293 @@
+# Wails 3 命令参考表
+
+本文档列出了 Voidraft 项目中使用的所有 Wails 3 命令和参数。
+
+## 📋 命令总览
+
+| 类别 | 命令 | 用途 |
+|------|------|------|
+| 生成工具 | `wails3 generate` | 生成项目所需的各种资源文件 |
+| 打包工具 | `wails3 tool package` | 使用 nfpm 打包应用程序 |
+| 任务执行 | `wails3 task` | 执行 Taskfile.yml 中定义的任务 |
+
+---
+
+## 🔧 详细命令参数
+
+### 1. `wails3 generate bindings`
+**生成 TypeScript 绑定文件**
+
+| 参数 | 说明 | 示例值 |
+|------|------|--------|
+| `-f` | 构建标志 | `''` (空字符串) |
+| `-clean` | 清理旧绑定 | `true` |
+| `-ts` | 生成 TypeScript | 无需值 |
+
+**使用位置:** `build/Taskfile.yml:53`
+
+**完整命令:**
+```bash
+wails3 generate bindings -f '' -clean=true -ts
+```
+
+---
+
+### 2. `wails3 generate icons`
+**从单个图片生成多平台图标**
+
+| 参数 | 说明 | 示例值 |
+|------|------|--------|
+| `-input` | 输入图片路径 | `appicon.png` |
+| `-macfilename` | macOS 图标输出路径 | `darwin/icons.icns` |
+| `-windowsfilename` | Windows 图标输出路径 | `windows/icons.ico` |
+
+**使用位置:** `build/Taskfile.yml:64`
+
+**完整命令:**
+```bash
+wails3 generate icons \
+ -input appicon.png \
+ -macfilename darwin/icons.icns \
+ -windowsfilename windows/icons.ico
+```
+
+---
+
+### 3. `wails3 generate syso`
+**生成 Windows .syso 资源文件**
+
+| 参数 | 说明 | 示例值 |
+|------|------|--------|
+| `-arch` | 目标架构 | `amd64` / `arm64` |
+| `-icon` | 图标文件 | `windows/icon.ico` |
+| `-manifest` | 清单文件 | `windows/wails.exe.manifest` |
+| `-info` | 应用信息 JSON | `windows/info.json` |
+| `-out` | 输出文件路径 | `../wails_windows_amd64.syso` |
+
+**使用位置:** `build/windows/Taskfile.yml:42`
+
+**完整命令:**
+```bash
+wails3 generate syso \
+ -arch amd64 \
+ -icon windows/icon.ico \
+ -manifest windows/wails.exe.manifest \
+ -info windows/info.json \
+ -out ../wails_windows_amd64.syso
+```
+
+---
+
+### 4. `wails3 generate webview2bootstrapper`
+**生成 Windows WebView2 引导程序**
+
+| 参数 | 说明 | 示例值 |
+|------|------|--------|
+| `-dir` | 输出目录 | `build/windows/nsis` |
+
+**使用位置:** `build/windows/Taskfile.yml:55`
+
+**完整命令:**
+```bash
+wails3 generate webview2bootstrapper -dir "build/windows/nsis"
+```
+
+**说明:** 下载 Microsoft Edge WebView2 运行时安装程序,用于 NSIS 打包。
+
+---
+
+### 5. `wails3 generate .desktop`
+**生成 Linux .desktop 桌面文件**
+
+| 参数 | 说明 | 示例值 |
+|------|------|--------|
+| `-name` | 应用名称 | `voidraft` |
+| `-exec` | 可执行文件名 | `voidraft` |
+| `-icon` | 图标名称 | `appicon` |
+| `-outputfile` | 输出文件路径 | `build/linux/voidraft.desktop` |
+| `-categories` | 应用分类 | `Development;` |
+
+**使用位置:** `build/linux/Taskfile.yml:107`
+
+**完整命令:**
+```bash
+wails3 generate .desktop \
+ -name "voidraft" \
+ -exec "voidraft" \
+ -icon "appicon" \
+ -outputfile build/linux/voidraft.desktop \
+ -categories "Development;"
+```
+
+---
+
+### 6. `wails3 generate appimage`
+**生成 Linux AppImage 包**
+
+| 参数 | 说明 | 示例值 |
+|------|------|--------|
+| `-binary` | 二进制文件名 | `voidraft` |
+| `-icon` | 图标文件路径 | `../../appicon.png` |
+| `-desktopfile` | .desktop 文件路径 | `../voidraft.desktop` |
+| `-outputdir` | 输出目录 | `../../../bin` |
+| `-builddir` | 构建临时目录 | `build/linux/appimage/build` |
+
+**使用位置:** `build/linux/Taskfile.yml:49`
+
+**完整命令:**
+```bash
+wails3 generate appimage \
+ -binary voidraft \
+ -icon ../../appicon.png \
+ -desktopfile ../voidraft.desktop \
+ -outputdir ../../../bin \
+ -builddir build/linux/appimage/build
+```
+
+**说明:** 自动下载 linuxdeploy 工具并创建 AppImage。
+
+---
+
+### 7. `wails3 tool package` (deb)
+**创建 Debian/Ubuntu .deb 包**
+
+| 参数 | 说明 | 示例值 |
+|------|------|--------|
+| `-name` | 包名称 | `voidraft` |
+| `-format` | 包格式 | `deb` |
+| `-config` | nfpm 配置文件 | `./build/linux/nfpm/nfpm.yaml` |
+| `-out` | 输出目录 | `./bin` |
+
+**使用位置:** `build/linux/Taskfile.yml:90`
+
+**完整命令:**
+```bash
+wails3 tool package \
+ -name voidraft \
+ -format deb \
+ -config ./build/linux/nfpm/nfpm.yaml \
+ -out ./bin
+```
+
+---
+
+### 8. `wails3 tool package` (rpm)
+**创建 RedHat/CentOS/Fedora .rpm 包**
+
+| 参数 | 说明 | 示例值 |
+|------|------|--------|
+| `-name` | 包名称 | `voidraft` |
+| `-format` | 包格式 | `rpm` |
+| `-config` | nfpm 配置文件 | `./build/linux/nfpm/nfpm.yaml` |
+| `-out` | 输出目录 | `./bin` |
+
+**使用位置:** `build/linux/Taskfile.yml:95`
+
+**完整命令:**
+```bash
+wails3 tool package \
+ -name voidraft \
+ -format rpm \
+ -config ./build/linux/nfpm/nfpm.yaml \
+ -out ./bin
+```
+
+---
+
+### 9. `wails3 tool package` (archlinux)
+**创建 Arch Linux .pkg.tar.zst 包**
+
+| 参数 | 说明 | 示例值 |
+|------|------|--------|
+| `-name` | 包名称 | `voidraft` |
+| `-format` | 包格式 | `archlinux` |
+| `-config` | nfpm 配置文件 | `./build/linux/nfpm/nfpm.yaml` |
+| `-out` | 输出目录 | `./bin` |
+
+**使用位置:** `build/linux/Taskfile.yml:100`
+
+**完整命令:**
+```bash
+wails3 tool package \
+ -name voidraft \
+ -format archlinux \
+ -config ./build/linux/nfpm/nfpm.yaml \
+ -out ./bin
+```
+
+---
+
+### 10. `wails3 task`
+**执行 Taskfile.yml 中定义的任务**
+
+| 参数 | 说明 | 示例值 |
+|------|------|--------|
+| `[taskname]` | 任务名称 | `build`, `package`, `run` |
+| `[VAR=value]` | 变量赋值 | `PRODUCTION=true`, `ARCH=amd64` |
+
+**常用任务:**
+
+| 任务 | 说明 | 命令 |
+|------|------|------|
+| `build` | 构建应用 | `wails3 task build PRODUCTION=true` |
+| `package` | 打包应用 | `wails3 task package` |
+| `run` | 运行应用 | `wails3 task run` |
+
+**使用位置:** `build/config.yml`
+
+---
+
+## 📊 平台对应命令表
+
+| 平台 | 主要命令 | 产物 |
+|------|----------|------|
+| **Windows** | `generate syso`
`generate webview2bootstrapper` | `.syso` 资源文件
NSIS 安装程序 |
+| **Linux** | `generate .desktop`
`generate appimage`
`tool package -format deb/rpm/archlinux` | `.desktop` 文件
`.AppImage`
`.deb` / `.rpm` / `.pkg.tar.zst` |
+| **macOS** | `generate icons` | `.icns` 图标
`.app` 应用包 |
+| **通用** | `generate bindings`
`generate icons` | TypeScript 绑定
多平台图标 |
+
+---
+
+## 🚀 快速参考
+
+### 完整构建流程
+
+```bash
+# 1. 生成绑定和图标
+wails3 task common:generate:bindings
+wails3 task common:generate:icons
+
+# 2. 构建前端
+cd frontend
+npm install
+npm run build
+cd ..
+
+# 3. 构建应用(各平台)
+cd build/windows && wails3 task build PRODUCTION=true # Windows
+cd build/linux && wails3 task build PRODUCTION=true # Linux
+cd build/darwin && wails3 task build PRODUCTION=true # macOS
+
+# 4. 打包应用(各平台)
+cd build/windows && wails3 task package # NSIS 安装程序
+cd build/linux && wails3 task package # AppImage + deb + rpm + archlinux
+cd build/darwin && wails3 task package # .app bundle
+```
+
+---
+
+## 📝 注意事项
+
+1. **变量传递:** Task 命令支持通过 `VAR=value` 格式传递变量
+2. **路径问题:** 相对路径基于 Taskfile.yml 所在目录
+3. **依赖顺序:** 某些任务有依赖关系(通过 `deps:` 定义)
+4. **环境变量:** 使用 `env:` 定义的环境变量会自动设置
+
+---
+
+## 🔗 相关文档
+
+- [Wails 3 官方文档](https://v3alpha.wails.io/)
+- [Taskfile 语法](https://taskfile.dev/)
+- [nfpm 打包工具](https://nfpm.goreleaser.com/)
+