From 05f2f7d46d577fb715b7b52b3911bebeb369753d Mon Sep 17 00:00:00 2001 From: landaiqing Date: Sat, 8 Nov 2025 17:05:31 +0800 Subject: [PATCH] :rocket: Update build and release workflows --- .github/workflows/build-release.yml | 11 +-- Taskfile.yml | 12 ---- build/linux/appimage/appicon.png | Bin 0 -> 7019 bytes internal/common/hotkey/hotkey_darwin.go | 2 + internal/common/hotkey/hotkey_linux.go | 1 + internal/models/config.go | 20 ------ internal/services/self_update_service.go | 4 +- scripts/version.bat | 86 ----------------------- scripts/version.sh | 62 ---------------- 9 files changed, 13 insertions(+), 185 deletions(-) delete mode 100644 scripts/version.bat delete mode 100644 scripts/version.sh diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 671dc86..7d8ae32 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -174,12 +174,15 @@ jobs: working-directory: frontend run: npm run build + # 生成图标(构建前需要) + - name: 生成图标 + run: wails3 task common:generate:icons + shell: bash + # 使用 Wails Task 构建和打包应用 - name: 构建和打包 Wails 应用 - run: | - # 使用 wails3 task 执行平台特定的打包任务 - cd build/${{ matrix.platform_dir }} - wails3 task package PRODUCTION=true ARCH=${{ matrix.arch }} + working-directory: build/${{ matrix.platform_dir }} + run: wails3 task package PRODUCTION=true ARCH=${{ matrix.arch }} env: CGO_ENABLED: 1 APP_NAME: voidraft diff --git a/Taskfile.yml b/Taskfile.yml index f589c23..938975e 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -12,25 +12,13 @@ vars: VITE_PORT: '{{.WAILS_VITE_PORT | default 9245}}' 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: summary: Builds the application - deps: [version] cmds: - task: "{{OS}}:build" package: summary: Packages a production build of the application - deps: [version] cmds: - task: "{{OS}}:package" diff --git a/build/linux/appimage/appicon.png b/build/linux/appimage/appicon.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..613d22351886f3b3382d9c1cb1442702def45659 100644 GIT binary patch literal 7019 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 JPDHLkV1ljL1djj! literal 0 HcmV?d00001 diff --git a/internal/common/hotkey/hotkey_darwin.go b/internal/common/hotkey/hotkey_darwin.go index 25737c9..43b5810 100644 --- a/internal/common/hotkey/hotkey_darwin.go +++ b/internal/common/hotkey/hotkey_darwin.go @@ -20,6 +20,8 @@ const ( ModShift = darwin.ModShift ModOption = darwin.ModOption 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. diff --git a/internal/common/hotkey/hotkey_linux.go b/internal/common/hotkey/hotkey_linux.go index 0ead90d..8b609c5 100644 --- a/internal/common/hotkey/hotkey_linux.go +++ b/internal/common/hotkey/hotkey_linux.go @@ -19,6 +19,7 @@ const ( ModCtrl = linux.ModCtrl ModShift = linux.ModShift ModAlt = linux.ModAlt // Alias for Mod1 + ModWin = linux.Mod4 // Super/Windows key is typically Mod4 on Linux Mod1 = linux.Mod1 Mod2 = linux.Mod2 Mod3 = linux.Mod3 diff --git a/internal/models/config.go b/internal/models/config.go index 596af9e..827c085 100644 --- a/internal/models/config.go +++ b/internal/models/config.go @@ -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() -} diff --git a/internal/services/self_update_service.go b/internal/services/self_update_service.go index 989d2eb..d0bbf1a 100644 --- a/internal/services/self_update_service.go +++ b/internal/services/self_update_service.go @@ -302,7 +302,9 @@ func (s *SelfUpdateService) handleUpdateSuccess(result *SelfUpdateResult) { if err := s.configService.Set("updates.version", result.LatestVersion); err != nil { 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 { s.logger.Error("migrate config failed", "error", err) diff --git a/scripts/version.bat b/scripts/version.bat deleted file mode 100644 index 81ecec5..0000000 --- a/scripts/version.bat +++ /dev/null @@ -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= %VERSION_FILE% - -echo [INFO] Version information saved to %VERSION_FILE% \ No newline at end of file diff --git a/scripts/version.sh b/scripts/version.sh deleted file mode 100644 index fda8012..0000000 --- a/scripts/version.sh +++ /dev/null @@ -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" \ No newline at end of file