Compare commits

..

3 Commits

Author SHA1 Message Date
Yuhang Wu 0242f14aaa docs(ci): 优化发布流程,自动提取版本更新日志作为release body
修改了release.yml工作流,新增步骤从CHANGELOG.md提取当前tag对应版本的更新内容,替代固定的release提示文本,同时给两个版本条目添加了新版本发布提示
2026-08-24 17:42:02 +08:00
Yuhang Wu f4ad3a5195 chore: 版本号升级至0.3.1
仅更新package.json中的项目版本号,完成小版本发布准备
2026-08-24 17:10:37 +08:00
Yuhang Wu b29e2d11bf docs: 新增v0.3.0和v0.2.0版本更新日志
补全StealthReader的更新日志文档,记录各版本的功能新增、优化、修复等变更内容
2026-08-24 17:07:48 +08:00
3 changed files with 95 additions and 3 deletions

View File

@ -61,7 +61,42 @@ jobs:
- name: Install frontend dependencies - name: Install frontend dependencies
run: pnpm install --frozen-lockfile run: pnpm install --frozen-lockfile
# 7. 构建并发布(核心步骤) # 7. 从 docs/CHANGELOG.md 提取当前 tag 对应版本的更新日志
- name: Extract changelog for release
id: changelog
shell: bash
env:
RELEASE_TAG: ${{ github.ref_name }}
run: |
node -e '
const fs = require("fs");
const content = fs.readFileSync("docs/CHANGELOG.md", "utf8");
const lines = content.split(/\r?\n/);
const marker = "## " + process.env.RELEASE_TAG;
const startIdx = lines.findIndex((l) => l.trim().startsWith(marker));
if (startIdx === -1) {
fs.writeFileSync("release_body.md", "");
process.exit(0);
}
let endIdx = lines.length;
for (let i = startIdx + 1; i < lines.length; i++) {
if (/^##\s/.test(lines[i])) {
endIdx = i;
break;
}
}
fs.writeFileSync(
"release_body.md",
lines.slice(startIdx + 1, endIdx).join("\n").trim()
);
'
{
echo "body<<CHANGELOG_BODY_EOF"
cat release_body.md
echo "CHANGELOG_BODY_EOF"
} >> "$GITHUB_OUTPUT"
# 8. 构建并发布(核心步骤)
- name: Build app & publish release - name: Build app & publish release
uses: tauri-apps/tauri-action@v0 uses: tauri-apps/tauri-action@v0
env: env:
@ -71,7 +106,7 @@ jobs:
with: with:
tagName: v__VERSION__ # 自动替换为 tauri.conf.json 里的版本号 tagName: v__VERSION__ # 自动替换为 tauri.conf.json 里的版本号
releaseName: "StealthReader v__VERSION__" releaseName: "StealthReader v__VERSION__"
releaseBody: "See the assets to download and install." releaseBody: ${{ steps.changelog.outputs.body }}
releaseDraft: true # 先创建草稿,手动确认后再发布 releaseDraft: true # 先创建草稿,手动确认后再发布
prerelease: false prerelease: false
args: ${{ matrix.args }} args: ${{ matrix.args }}

57
docs/CHANGELOG.md Normal file
View File

@ -0,0 +1,57 @@
# 更新日志
本文件记录 StealthReader 各版本的更新内容。
---
## v0.3.02026-08-24 16:52
### 🎉 新版本发布!
### ✨ 新增功能
- **应用自动更新**:接入 `@tauri-apps/plugin-updater``process` 插件,应用启动时静默检查并自动更新,完善了更新流程的异常处理与用户交互。
- **手动更新入口**:在「设置 → 关于」页面新增「检查更新」按钮,支持更新中/已是最新/更新失败等状态提示。
### 🎨 优化
- **书籍详情页**:重构布局,新增「继续阅读」快速入口;调整简介展示逻辑,优化页面排版。
- **阅读器**:优化章节标题显示逻辑。
- **关于页面**:重构并完善(升级为完整更新入口页面)。
### 📄 文档
- 新增界面预览图并补充 README直观展示应用效果。
### 🔧 其他
- 升级依赖updater/process 插件)并调整更新相关权限与配置(`capabilities`、`tauri.conf.json`)。
---
## v0.2.02026-08-24 14:00
### 🎉 新版本发布!
### ✨ 新增功能
- **小说阅读器**:整页窗口可拖动;正文按字符串自动分页(一屏一页),支持点击左/右半屏、键盘方向键翻页;提供「上一章 / 下一章」快速切换。
- **阅读进度追踪**:新增 `reading_progress` 表记录每章阅读状态;章节列表已读章节置灰显示(`is_read`);记录书籍最后阅读位置与时间。
- **书籍导入与解析**自动识别文件编码GBK/UTF-8/Big5 等)并解码,按正则智能解析章节,事务一次性写入书籍与全部章节。
- **章节标题模糊搜索**:详情页支持按章节标题关键字搜索。
- **全局加载状态**:新增 `useLoading` hook 与全局加载遮罩,可自定义加载文字(导入中…/加载中…/删除中…)。
- **书籍管理**:列表右键「编辑 / 删除」,编辑弹窗、删除二次确认,默认封面图 `cover.jpg`
### 🎨 优化
- 详情页章节列表双列展示、分页组件;简介区域滚动条包裹;返回按钮悬浮化。
- 阅读器默认封面、返回按钮样式与阅读字号优化。
- 数据库模型与表结构对齐(`introduction` 字段、`chapters` 主键、可空 `last_read_time`)。
### 🐛 修复
- 修复 Windows 下 SQLite 路径无法打开数据库的问题。
- 修复重复阅读已读章节时的 `UNIQUE constraint failed`(改为 UPSERT
- 修复删除确认无响应、Tauri 命令参数 camelCase 不匹配、`NaiveDateTime` 序列化失败等问题。
### 🚀 工程
- 配置 GitHub Actions 多平台打包与 release 发布流程Windows/macOS/Linux

View File

@ -1,7 +1,7 @@
{ {
"name": "stealthreader", "name": "stealthreader",
"private": true, "private": true,
"version": "0.3.0", "version": "0.3.1",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",