后端: - ffmpeg parser 找不到 FFmpeg 且异步初始化仍在 checking/downloading 时 挂起等待终态(可被 ctx 取消或 Stop 中断),等待结束后立即重查并开始 录制,不再进入"找不到 FFmpeg → 5 秒重试"失败循环(Codex P1) - isFFmpegAvailableWithoutRemotetools 与 utils.GetFFmpegPath 语义对齐: 配置了 ffmpeg_path 时以该路径为准不回退 PATH;补 exec.ErrDot → ./ffmpeg 兜底(Copilot / Codex P2) - WaitForToolsInit 在 Init() 重试进行中不再立即返回旧错误,等待本轮 结束后读取最新结果;Init 的 defer 先发布结果再更新状态机(Gemini / Copilot) - 新增 tools.FFmpegStatusChanged() 状态变化通知 channel 前端: - ffmpeg-banner / update-banner 从 fixed 定位改为普通文档流,自然向下 堆叠且把内容推开,不再互相重叠或遮挡页面顶部(Gemini high / Codex P3) - SSEEventType 补充遗漏的 memory_warning 并注册监听 测试基础设施: - mock server 新增 -speed 启动参数,限速在 bgo 启动前即生效(Codex P2) - mock server 下载循环每个 chunk 前重新读取限速,运行时调速立即生效 (Copilot / Codex P2) - 修复 mock zip 结构:模拟真实发布包的单一顶层目录,避免 remotetools 解压剥层后 pathToEntry 对不上导致 install 后找不到工具 - 新增 dev 专用 POST /api/debug/ffmpeg/reinit;下载失败用例先清工具缓存 再重新触发初始化,解决用例间状态污染(Codex P2) - e2e 等待逻辑去掉会被 SSE 长连接卡死的 networkidle(Codex P2) - playwright.ffmpeg.config.ts 的清理副作用限定主进程执行,避免 worker 重新加载配置时删掉下载中的工具目录 - CI 接入 ffmpeg 下载 e2e 并上传报告;package.json 加 test:e2e:ffmpeg (Codex P3) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
测试工具目录
本目录包含用于本地开发和测试的工具。
开发环境设置
首次 clone 项目后,运行以下命令安装开发工具(包括 delve 调试器、gopls 语言服务器等):
# 一键安装所有开发工具
go generate ./tools/devtools.go
# 或者分别安装
go install github.com/go-delve/delve/cmd/dlv@latest
go install golang.org/x/tools/gopls@latest
go install honnef.co/go/tools/cmd/staticcheck@latest
工具版本已锁定在 go.mod 中,确保团队成员使用相同版本。
自动更新测试
测试场景
bililive-go 的自动更新流程涉及以下组件:
- 主程序 - 检测新版本、下载更新包、通知 Launcher
- Launcher - 接收更新请求、验证 SHA256、解压替换、重启主程序
方法 1:一键启动(推荐)
使用 VS Code 的复合调试配置,同时启动 Mock Server 和主程序:
- 打开 Run and Debug 面板 (
Ctrl+Shift+D) - 选择 🔄 主程序更新测试 (Mock API + Main Program)
- 按
F5启动
这会:
- 先启动 Mock 版本 API 服务器
- 再启动主程序(配置使用本地 Mock API)
启动后,在主程序的 Web UI 中:
- 访问
http://localhost:8080(端口取决于你的 config.yml) - 点击 关于 或 设置 中的更新检测功能
- 应该能看到检测到"新版本 99.0.0"
- 点击下载,观察下载进度
- 下载完成后可以应用更新
方法 2:分步调试
如果需要单步调试具体代码:
步骤 1:启动 Mock 服务器
# 先构建开发版本作为"新版本"的源文件
make dev-incremental
# 启动 Mock 服务器
go run ./test/update-mock-server -port 8888 -version 99.0.0
Mock 服务器启动后会显示:
═══════════════════════════════════════════════════════════════
🚀 Mock 版本 API 服务器已启动
═══════════════════════════════════════════════════════════════
监听地址: http://localhost:8888
模拟版本: 99.0.0
更新包大小: 35.24 MB
SHA256: abc123...
═══════════════════════════════════════════════════════════════
步骤 2:调试主程序更新检测
在 VS Code 中:
- 选择 Debug Main Program (Local Update Test)
- 在
src/pkg/update/checker.go或src/servers/update_handler.go设置断点 - 按
F5启动调试 - 在 Web UI 中触发更新检测
步骤 3:调试 Launcher 更新应用
如果需要测试 Launcher 的更新解压和替换逻辑:
- 选择 Debug Launcher (Local Update)
- 在
src/cmd/launcher/main.go的performUpdate函数设置断点
update-mock-server
用于测试自动升级功能的 Mock 版本 API 服务器。
功能
- 版本检测 API - 模拟
bililive-go.com/api/versions接口 - 更新包下载 - 自动将本地二进制打包成 zip 并提供下载
- SHA256 校验 - 返回正确的校验和供客户端验证
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
-port |
8888 | 监听端口 |
-version |
99.0.0 | 模拟的最新版本号 |
-source |
bin/bililive-dev.exe | 用于创建更新包的源文件 |
-changelog |
(环境变量) | 更新日志,也可通过 MOCK_CHANGELOG 环境变量设置 |
手动运行
# 使用默认源文件
go run ./test/update-mock-server -port 8888 -version 99.0.0
# 指定其他源文件
go run ./test/update-mock-server -source ./bin/bililive-windows-amd64.exe
launcher-config-local.json
本地测试用的 Launcher 配置文件。
使用方法
-
复制示例文件:
cp test/launcher-config-local.example.json test/launcher-config-local.json -
根据需要修改配置
-
使用 VSCode 调试配置 Debug Launcher (Local Update)
注意事项
launcher-config-local.json不会被提交到 Git(已在 .gitignore 中)- 请使用
launcher-config-local.example.json作为模板