Gemini 高危: - FFmpegAsyncInit 增加 ffmpegInitRunning CAS 守卫,并发调用(如 e2e 多次 reinit)时只有第一个生效,避免并发 tool.Install() - setFFmpegStatus 用 ffmpegStatusMu 串行化存储、变化通知与回调执行, 保证订阅者看到的状态顺序与实际更新顺序一致 - ./ffmpeg 兜底改为 LookPath 任何失败都尝试:Unix 下当前目录不在 PATH, 返回 ErrNotFound 而非 ErrDot,原来只处理 ErrDot 在 Unix 上不生效; 该逻辑收敛到 utils.LookupSystemFFmpeg 供状态检测与实际查找共用 Gemini 中危: - tool.Install() 前检查 ctx.Err(),程序退出中不再发起耗时下载 Codex P2: - 配置了无效 ffmpeg_path 时不再走 remotetools 下载(下载了实际录制也 不会用),直接置 not_found 并提示修正配置,状态与实际查找语义一致; e2e 相应改为 ffmpeg_path 留空 + BILILIVE_IGNORE_SYSTEM_FFMPEG=1 环境变量屏蔽系统 FFmpeg(CI 预装 ffmpeg,无法用真实 PATH 模拟) - 等待逻辑上移为 tools.WaitFFmpegAsyncInitDone 供多处复用:ffmpeg parser、pipeline 后处理阶段(convert_mp4 / burn_subtitles / custom_command)及 recorder 的 legacy custom commandline 在获取 FFmpeg 路径前等待后台初始化结束,短直播后处理不再因下载未完成而失败 Copilot: - WaitForToolsInit 轮询改用 time.NewTicker 复用计时器 - FFmpegBanner 初始状态查询失败时打印 console.warn,不再静默吞掉 - mock server 检查 w.Write 错误,客户端断开后立即停止发送 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作为模板