Compare commits
5 Commits
build
...
71946965eb
| Author | SHA1 | Date | |
|---|---|---|---|
| 71946965eb | |||
| d4cd22d234 | |||
| 05f2f7d46d | |||
| 9deb2744a9 | |||
| 6fac7c42d6 |
125
.github/workflows/build-release.yml
vendored
125
.github/workflows/build-release.yml
vendored
@@ -50,24 +50,27 @@ jobs:
|
|||||||
MATRIX='{"include":[]}'
|
MATRIX='{"include":[]}'
|
||||||
|
|
||||||
if [[ "$PLATFORMS" == *"windows"* ]]; then
|
if [[ "$PLATFORMS" == *"windows"* ]]; then
|
||||||
MATRIX=$(echo $MATRIX | jq '.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
|
fi
|
||||||
|
|
||||||
if [[ "$PLATFORMS" == *"linux"* ]]; then
|
if [[ "$PLATFORMS" == *"linux"* ]]; then
|
||||||
MATRIX=$(echo $MATRIX | jq '.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
|
fi
|
||||||
|
|
||||||
if [[ "$PLATFORMS" == *"macos-intel"* ]]; then
|
if [[ "$PLATFORMS" == *"macos-intel"* ]]; then
|
||||||
MATRIX=$(echo $MATRIX | jq '.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
|
fi
|
||||||
|
|
||||||
if [[ "$PLATFORMS" == *"macos-arm"* ]]; then
|
if [[ "$PLATFORMS" == *"macos-arm"* ]]; then
|
||||||
MATRIX=$(echo $MATRIX | jq '.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
|
fi
|
||||||
|
|
||||||
echo "matrix=$MATRIX" >> $GITHUB_OUTPUT
|
# 使用 -c 确保输出紧凑的单行 JSON,符合 GitHub Actions 输出格式
|
||||||
|
echo "matrix=$(echo "$MATRIX" | jq -c .)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# 输出美化的 JSON 用于日志查看
|
||||||
echo "生成的矩阵:"
|
echo "生成的矩阵:"
|
||||||
echo $MATRIX | jq .
|
echo "$MATRIX" | jq .
|
||||||
|
|
||||||
- name: 检查是否创建 Release
|
- name: 检查是否创建 Release
|
||||||
id: check-release
|
id: check-release
|
||||||
@@ -113,17 +116,41 @@ jobs:
|
|||||||
if: matrix.os == 'linux'
|
if: matrix.os == 'linux'
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
# Wails 3 + 项目特定依赖
|
||||||
sudo apt-get install -y \
|
sudo apt-get install -y \
|
||||||
build-essential \
|
build-essential \
|
||||||
|
pkg-config \
|
||||||
libgtk-3-dev \
|
libgtk-3-dev \
|
||||||
libwebkit2gtk-4.0-dev \
|
libwebkit2gtk-4.1-dev \
|
||||||
pkg-config
|
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 构建环境
|
- name: 设置 Windows 构建环境
|
||||||
if: matrix.os == 'windows'
|
if: matrix.os == 'windows'
|
||||||
run: |
|
run: |
|
||||||
echo "Windows runner 已包含构建工具"
|
# 安装 NSIS (用于创建安装程序)
|
||||||
|
choco install nsis -y
|
||||||
|
# 将 NSIS 添加到 PATH
|
||||||
|
echo "C:\Program Files (x86)\NSIS" >> $GITHUB_PATH
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
# macOS 平台依赖
|
# macOS 平台依赖
|
||||||
@@ -147,52 +174,64 @@ jobs:
|
|||||||
working-directory: frontend
|
working-directory: frontend
|
||||||
run: npm run build
|
run: npm run build
|
||||||
|
|
||||||
# 构建 Wails 应用
|
# 使用 Wails Task 构建和打包应用
|
||||||
- name: 构建 Wails 应用
|
- name: 构建和打包 Wails 应用
|
||||||
run: |
|
run: wails3 task ${{ matrix.id }}:package PRODUCTION=true ARCH=${{ matrix.arch }}
|
||||||
wails3 build -platform ${{ matrix.os }}/${{ matrix.arch }}
|
env:
|
||||||
|
CGO_ENABLED: 1
|
||||||
|
APP_NAME: voidraft
|
||||||
|
BIN_DIR: bin
|
||||||
|
ROOT_DIR: .
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
# 查找构建产物
|
# 整理构建产物
|
||||||
- name: 查找构建产物
|
- name: 整理构建产物
|
||||||
id: find_binary
|
id: organize_artifacts
|
||||||
shell: bash
|
|
||||||
run: |
|
run: |
|
||||||
|
echo "=== 构建产物列表 ==="
|
||||||
|
ls -lhR bin/ || echo "bin 目录不存在"
|
||||||
|
|
||||||
|
# 创建输出目录
|
||||||
|
mkdir -p artifacts
|
||||||
|
|
||||||
|
# 根据平台复制产物
|
||||||
if [ "${{ matrix.os }}" = "windows" ]; then
|
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
|
elif [ "${{ matrix.os }}" = "darwin" ]; then
|
||||||
# macOS 可能生成 .app 包或二进制文件
|
echo "macOS 平台:查找 .app bundle"
|
||||||
BINARY=$(find build/bin -type f \( -name "*.app" -o ! -name ".*" \) | head -n 1)
|
find bin -name "*.app" -type d
|
||||||
else
|
# macOS: .app bundle,打包成 zip
|
||||||
BINARY=$(find build/bin -type f ! -name ".*" | head -n 1)
|
if [ -d "bin/voidraft.app" ]; then
|
||||||
fi
|
cd bin
|
||||||
echo "binary_path=$BINARY" >> $GITHUB_OUTPUT
|
zip -r ../artifacts/voidraft-darwin-${{ matrix.arch }}.app.zip voidraft.app
|
||||||
echo "找到的二进制文件: $BINARY"
|
cd ..
|
||||||
|
|
||||||
# 重命名构建产物
|
|
||||||
- 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
|
|
||||||
else
|
else
|
||||||
cp "$BINARY_PATH" "${{ matrix.output_name }}"
|
echo "未找到 .app bundle"
|
||||||
echo "ARTIFACT_PATH=$(pwd)/${{ matrix.output_name }}" >> $GITHUB_ENV
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "=== 最终产物 ==="
|
||||||
|
ls -lh artifacts/ || echo "artifacts 目录为空"
|
||||||
|
shell: bash
|
||||||
|
|
||||||
# 上传构建产物到 Artifacts
|
# 上传构建产物到 Artifacts
|
||||||
- name: 上传构建产物
|
- name: 上传构建产物
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.output_name }}
|
name: voidraft-${{ matrix.id }}
|
||||||
path: ${{ env.ARTIFACT_PATH }}
|
path: artifacts/*
|
||||||
if-no-files-found: error
|
if-no-files-found: warn
|
||||||
|
|
||||||
# 创建 GitHub Release 并上传所有构建产物
|
# 创建 GitHub Release 并上传所有构建产物
|
||||||
release:
|
release:
|
||||||
|
|||||||
12
Taskfile.yml
12
Taskfile.yml
@@ -12,25 +12,13 @@ vars:
|
|||||||
VITE_PORT: '{{.WAILS_VITE_PORT | default 9245}}'
|
VITE_PORT: '{{.WAILS_VITE_PORT | default 9245}}'
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
version:
|
|
||||||
summary: Generate version information
|
|
||||||
cmds:
|
|
||||||
- '{{if eq OS "windows"}}cmd /c ".\scripts\version.bat"{{else}}bash ./scripts/version.sh{{end}}'
|
|
||||||
sources:
|
|
||||||
- scripts/version.bat
|
|
||||||
- scripts/version.sh
|
|
||||||
generates:
|
|
||||||
- version.txt
|
|
||||||
|
|
||||||
build:
|
build:
|
||||||
summary: Builds the application
|
summary: Builds the application
|
||||||
deps: [version]
|
|
||||||
cmds:
|
cmds:
|
||||||
- task: "{{OS}}:build"
|
- task: "{{OS}}:build"
|
||||||
|
|
||||||
package:
|
package:
|
||||||
summary: Packages a production build of the application
|
summary: Packages a production build of the application
|
||||||
deps: [version]
|
|
||||||
cmds:
|
cmds:
|
||||||
- task: "{{OS}}:package"
|
- task: "{{OS}}:package"
|
||||||
|
|
||||||
|
|||||||
293
build/COMMANDS.md
Normal file
293
build/COMMANDS.md
Normal file
@@ -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`<br>`generate webview2bootstrapper` | `.syso` 资源文件<br>NSIS 安装程序 |
|
||||||
|
| **Linux** | `generate .desktop`<br>`generate appimage`<br>`tool package -format deb/rpm/archlinux` | `.desktop` 文件<br>`.AppImage`<br>`.deb` / `.rpm` / `.pkg.tar.zst` |
|
||||||
|
| **macOS** | `generate icons` | `.icns` 图标<br>`.app` 应用包 |
|
||||||
|
| **通用** | `generate bindings`<br>`generate icons` | TypeScript 绑定<br>多平台图标 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 快速参考
|
||||||
|
|
||||||
|
### 完整构建流程
|
||||||
|
|
||||||
|
```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/)
|
||||||
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 6.9 KiB |
@@ -20,6 +20,8 @@ const (
|
|||||||
ModShift = darwin.ModShift
|
ModShift = darwin.ModShift
|
||||||
ModOption = darwin.ModOption
|
ModOption = darwin.ModOption
|
||||||
ModCmd = darwin.ModCmd
|
ModCmd = darwin.ModCmd
|
||||||
|
ModAlt = darwin.ModOption // Alias for ModOption (Alt key on macOS)
|
||||||
|
ModWin = darwin.ModCmd // Alias for ModCmd (Cmd key is like Win key)
|
||||||
)
|
)
|
||||||
|
|
||||||
// Key represents a key.
|
// Key represents a key.
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ const (
|
|||||||
ModCtrl = linux.ModCtrl
|
ModCtrl = linux.ModCtrl
|
||||||
ModShift = linux.ModShift
|
ModShift = linux.ModShift
|
||||||
ModAlt = linux.ModAlt // Alias for Mod1
|
ModAlt = linux.ModAlt // Alias for Mod1
|
||||||
|
ModWin = linux.Mod4 // Super/Windows key is typically Mod4 on Linux
|
||||||
Mod1 = linux.Mod1
|
Mod1 = linux.Mod1
|
||||||
Mod2 = linux.Mod2
|
Mod2 = linux.Mod2
|
||||||
Mod3 = linux.Mod3
|
Mod3 = linux.Mod3
|
||||||
|
|||||||
@@ -218,23 +218,3 @@ func NewDefaultAppConfig() *AppConfig {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetVersion 获取配置版本
|
|
||||||
func (ac *AppConfig) GetVersion() string {
|
|
||||||
return ac.Metadata.Version
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetVersion 设置配置版本
|
|
||||||
func (ac *AppConfig) SetVersion(version string) {
|
|
||||||
ac.Metadata.Version = version
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetLastUpdated 设置最后更新时间
|
|
||||||
func (ac *AppConfig) SetLastUpdated(timeStr string) {
|
|
||||||
ac.Metadata.LastUpdated = timeStr
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetDefaultConfig 获取默认配置
|
|
||||||
func (ac *AppConfig) GetDefaultConfig() any {
|
|
||||||
return NewDefaultAppConfig()
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -59,15 +59,14 @@ CREATE TABLE IF NOT EXISTS key_bindings (
|
|||||||
enabled INTEGER NOT NULL DEFAULT 1,
|
enabled INTEGER NOT NULL DEFAULT 1,
|
||||||
is_default INTEGER NOT NULL DEFAULT 0,
|
is_default INTEGER NOT NULL DEFAULT 0,
|
||||||
created_at TEXT NOT NULL,
|
created_at TEXT NOT NULL,
|
||||||
updated_at TEXT NOT NULL,
|
updated_at TEXT NOT NULL
|
||||||
UNIQUE(command, extension)
|
|
||||||
)`
|
)`
|
||||||
|
|
||||||
// Themes table
|
// Themes table
|
||||||
sqlCreateThemesTable = `
|
sqlCreateThemesTable = `
|
||||||
CREATE TABLE IF NOT EXISTS themes (
|
CREATE TABLE IF NOT EXISTS themes (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
name TEXT NOT NULL UNIQUE,
|
name TEXT NOT NULL,
|
||||||
type TEXT NOT NULL,
|
type TEXT NOT NULL,
|
||||||
colors TEXT NOT NULL,
|
colors TEXT NOT NULL,
|
||||||
is_default INTEGER NOT NULL DEFAULT 0,
|
is_default INTEGER NOT NULL DEFAULT 0,
|
||||||
@@ -244,8 +243,6 @@ func (ds *DatabaseService) createIndexes() error {
|
|||||||
// Themes indexes
|
// Themes indexes
|
||||||
`CREATE INDEX IF NOT EXISTS idx_themes_type ON themes(type)`,
|
`CREATE INDEX IF NOT EXISTS idx_themes_type ON themes(type)`,
|
||||||
`CREATE INDEX IF NOT EXISTS idx_themes_is_default ON themes(is_default)`,
|
`CREATE INDEX IF NOT EXISTS idx_themes_is_default ON themes(is_default)`,
|
||||||
// 条件唯一索引:确保每种类型只能有一个默认主题
|
|
||||||
`CREATE UNIQUE INDEX IF NOT EXISTS idx_themes_type_default ON themes(type) WHERE is_default = 1`,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, index := range indexes {
|
for _, index := range indexes {
|
||||||
|
|||||||
@@ -302,7 +302,9 @@ func (s *SelfUpdateService) handleUpdateSuccess(result *SelfUpdateResult) {
|
|||||||
if err := s.configService.Set("updates.version", result.LatestVersion); err != nil {
|
if err := s.configService.Set("updates.version", result.LatestVersion); err != nil {
|
||||||
s.logger.Error("update config version failed", "error", err)
|
s.logger.Error("update config version failed", "error", err)
|
||||||
}
|
}
|
||||||
|
if err := s.configService.Set("metadata.version", result.LatestVersion); err != nil {
|
||||||
|
s.logger.Error("update config version failed", "error", err)
|
||||||
|
}
|
||||||
// 执行配置迁移
|
// 执行配置迁移
|
||||||
if err := s.configService.MigrateConfig(); err != nil {
|
if err := s.configService.MigrateConfig(); err != nil {
|
||||||
s.logger.Error("migrate config failed", "error", err)
|
s.logger.Error("migrate config failed", "error", err)
|
||||||
|
|||||||
@@ -1,86 +0,0 @@
|
|||||||
@echo off
|
|
||||||
setlocal enabledelayedexpansion
|
|
||||||
|
|
||||||
REM Simplified version management script - Windows version
|
|
||||||
REM Auto-increment patch version from git tags or use custom version
|
|
||||||
|
|
||||||
REM Configuration section - Set custom version here if needed
|
|
||||||
set "CUSTOM_VERSION="
|
|
||||||
REM Example: set "CUSTOM_VERSION=2.0.0"
|
|
||||||
|
|
||||||
set "VERSION_FILE=version.txt"
|
|
||||||
|
|
||||||
REM Check if custom version is set
|
|
||||||
if not "%CUSTOM_VERSION%"=="" (
|
|
||||||
echo [INFO] Using custom version: %CUSTOM_VERSION%
|
|
||||||
set "VERSION=%CUSTOM_VERSION%"
|
|
||||||
goto :save_version
|
|
||||||
)
|
|
||||||
|
|
||||||
REM Check if git is available
|
|
||||||
git --version >nul 2>&1
|
|
||||||
if errorlevel 1 (
|
|
||||||
echo [ERROR] Git is not installed or not in PATH
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
|
|
||||||
REM Check if in git repository
|
|
||||||
git rev-parse --git-dir >nul 2>&1
|
|
||||||
if errorlevel 1 (
|
|
||||||
echo [ERROR] Not in a git repository
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
|
|
||||||
REM Sync remote tags
|
|
||||||
echo [INFO] Syncing remote tags...
|
|
||||||
echo [INFO] Deleting local tags...
|
|
||||||
for /f "delims=" %%i in ('git tag -l') do git tag -d %%i >nul 2>&1
|
|
||||||
|
|
||||||
echo [INFO] Fetching remote tags...
|
|
||||||
git fetch origin --prune >nul 2>&1
|
|
||||||
if errorlevel 1 (
|
|
||||||
echo [WARNING] Failed to fetch from remote, using local tags
|
|
||||||
) else (
|
|
||||||
echo [INFO] Remote tags synced successfully
|
|
||||||
)
|
|
||||||
|
|
||||||
REM Get latest git tag
|
|
||||||
git describe --abbrev=0 --tags > temp_tag.txt 2>nul
|
|
||||||
if errorlevel 1 (
|
|
||||||
echo [ERROR] No git tags found in repository
|
|
||||||
if exist temp_tag.txt del temp_tag.txt
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
|
|
||||||
set /p LATEST_TAG=<temp_tag.txt
|
|
||||||
del temp_tag.txt
|
|
||||||
|
|
||||||
if not defined LATEST_TAG (
|
|
||||||
echo [ERROR] Failed to read git tag
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
|
|
||||||
echo [INFO] Latest git tag: %LATEST_TAG%
|
|
||||||
|
|
||||||
REM Remove v prefix
|
|
||||||
set "CLEAN_VERSION=%LATEST_TAG:v=%"
|
|
||||||
|
|
||||||
REM Split version number and increment patch
|
|
||||||
for /f "tokens=1,2,3 delims=." %%a in ("%CLEAN_VERSION%") do (
|
|
||||||
set "MAJOR=%%a"
|
|
||||||
set "MINOR=%%b"
|
|
||||||
set /a "PATCH=%%c+1"
|
|
||||||
)
|
|
||||||
|
|
||||||
set "VERSION=%MAJOR%.%MINOR%.%PATCH%"
|
|
||||||
echo [INFO] Auto-incremented patch version: %VERSION%
|
|
||||||
|
|
||||||
:save_version
|
|
||||||
REM Output version information
|
|
||||||
echo [SUCCESS] Version resolved: %VERSION%
|
|
||||||
echo VERSION=%VERSION%
|
|
||||||
|
|
||||||
REM Save to file
|
|
||||||
echo VERSION=%VERSION% > %VERSION_FILE%
|
|
||||||
|
|
||||||
echo [INFO] Version information saved to %VERSION_FILE%
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# 配置区域 - 如需自定义版本,请在此处设置
|
|
||||||
CUSTOM_VERSION=""
|
|
||||||
# 示例: CUSTOM_VERSION="2.0.0"
|
|
||||||
|
|
||||||
VERSION_FILE="version.txt"
|
|
||||||
|
|
||||||
# 检查是否设置了自定义版本
|
|
||||||
if [ -n "$CUSTOM_VERSION" ]; then
|
|
||||||
echo "[INFO] Using custom version: $CUSTOM_VERSION"
|
|
||||||
VERSION="$CUSTOM_VERSION"
|
|
||||||
else
|
|
||||||
# 检查git是否可用
|
|
||||||
if ! command -v git &> /dev/null; then
|
|
||||||
echo "[ERROR] Git is not installed or not in PATH"
|
|
||||||
exit 1
|
|
||||||
elif ! git rev-parse --git-dir &> /dev/null; then
|
|
||||||
echo "[ERROR] Not in a git repository"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
# 同步远程标签
|
|
||||||
echo "[INFO] Syncing remote tags..."
|
|
||||||
echo "[INFO] Deleting local tags..."
|
|
||||||
git tag -l | xargs git tag -d &> /dev/null
|
|
||||||
|
|
||||||
echo "[INFO] Fetching remote tags..."
|
|
||||||
if git fetch origin --prune &> /dev/null; then
|
|
||||||
echo "[INFO] Remote tags synced successfully"
|
|
||||||
else
|
|
||||||
echo "[WARNING] Failed to fetch from remote, using local tags"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 获取最新的git标签
|
|
||||||
LATEST_TAG=$(git describe --abbrev=0 --tags 2>/dev/null)
|
|
||||||
|
|
||||||
if [ -z "$LATEST_TAG" ]; then
|
|
||||||
echo "[ERROR] No git tags found in repository"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "[INFO] Latest git tag: $LATEST_TAG"
|
|
||||||
|
|
||||||
# 移除v前缀
|
|
||||||
CLEAN_VERSION=${LATEST_TAG#v}
|
|
||||||
|
|
||||||
# 分割版本号并递增patch版本
|
|
||||||
IFS='.' read -r MAJOR MINOR PATCH <<< "$CLEAN_VERSION"
|
|
||||||
PATCH=$((PATCH + 1))
|
|
||||||
|
|
||||||
VERSION="$MAJOR.$MINOR.$PATCH"
|
|
||||||
echo "[INFO] Auto-incremented patch version: $VERSION"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 输出版本信息
|
|
||||||
echo "VERSION=$VERSION"
|
|
||||||
|
|
||||||
# 保存到文件供其他脚本使用
|
|
||||||
echo "VERSION=$VERSION" > "$VERSION_FILE"
|
|
||||||
|
|
||||||
echo "[INFO] Version information saved to $VERSION_FILE"
|
|
||||||
Reference in New Issue
Block a user