当前仓库不再使用本地 npm run tuisong 发布。
正式发布方式改为:
- 修改
package.json中的版本号(内部构建版本,规则见下方「版本号规则」) - 提交代码并推送到
main - 推送一个与版本号完全一致的 Git tag,例如:
git tag v2026.721.0
git push origin v2026.721.0只有推送 v* 标签时,GitHub Actions 才会自动构建和发布。
发布相关脚本支持从本地私有环境文件读取密钥与模型配置,读取顺序为:
- 进程环境变量(例如手动
set/ CI 注入) - 仓库根目录
.release.local.env - 仓库根目录
.env.local
可用键(按需填写):
AI_API_KEYAI_API_URLAI_MODELGH_TOKEN
示例(文件不会被提交):
AI_API_KEY=sk-xxxx
AI_API_URL=https://api.openai.com/v1/chat/completions
AI_MODEL=gpt-5.4
GH_TOKEN=ghp_xxxx.github/workflows/release.yml 会在 v* 标签触发后执行:
当前工作流已拆成串并行 job:
prepare-metabuild-windowsgenerate-release-bodypublish-github-releasemirror-r2notify-telegram-successnotify-failure
其中:
prepare-meta生成force-update.json和release-context.jsonbuild-windows负责构建安装包和latest.ymlgenerate-release-body负责 AI / 模板版发布说明publish-github-release汇总产物并创建 GitHub Releasemirror-r2与notify-telegram-success在发布成功后并行执行
GitHub Release 上传内容:
- 安装包
latest.ymlforce-update.json
Cloudflare R2 同步内容:
- 安装包
latest.ymlforce-update.json
Telegram 通知:
- 成功时发送 AI 摘要通知
- 失败时发送失败通知
GitHub Release 资产包括:
- 安装包
latest.ymlforce-update.json
- 向 Telegram 频道/群发送发布通知(AI 摘要 + 强制更新提醒)
当前 Windows 自动更新统一使用全量安装包下载。
依赖产物为:
CipherTalk-x.y.z-Setup.exelatest.yml
工作流会在构建与发布阶段校验安装包和 latest.yml 的哈希是否一致,避免元数据与真实安装包不匹配。
说明:
- 当前仍是未签名发布
- 公开分发时稳定性仍可能受 SmartScreen / 杀软 / 系统策略影响
- 当前已禁用差分更新,客户端始终下载完整安装包
自 2026.7.21 起,内部构建版本与软件内展示版本分离:
格式:年.月日.当日构建序号,月日段不带前导零:
- 2026 年 7 月 21 日当天第一个版本:
2026.721.0 - 同一天再发一个版本:
2026.721.1 - 10 月 21 日的第一个版本:
2026.1021.0
序号从 0 开始,跨天归零。
⚠️ 月日段不能写成0721:semver 不允许数字段带前导零,2026.0721.0会让 electron-updater 启动时直接抛 "App version is not a valid semver version",自动更新整体失效。 数值排序上721与0721等价(月份先行,天然有序),无需前导零。
由 src/lib/appVersion.ts 的 formatDisplayVersion() 从内部版本解析生成:
- 内部
2026.721.0→ 展示v2026.7.21-构建版本号v0 - 旧格式(如
2026.7.20)原样展示为v2026.7.20
展示版本只在 UI 层使用;更新检查、latest.yml、force-update.json、 Git tag 一律使用内部构建版本。
标签名必须与 package.json.version 完全对应:
package.json.version = 2026.721.0- Git tag 必须是
v2026.721.0
如果不一致,工作流会直接失败。
工作流会调用:
npm run build:force-update-manifest默认情况下不会触发强制更新。只有在仓库 Variables / Secrets 中提供以下值时,生成的 force-update.json 才会带上对应策略:
FORCE_UPDATE_MIN_VERSIONFORCE_UPDATE_BLOCKED_VERSIONSFORCE_UPDATE_TITLEFORCE_UPDATE_MESSAGEFORCE_UPDATE_RELEASE_NOTES
需要在 GitHub 仓库配置以下 Secrets:
R2_ACCOUNT_IDR2_BUCKET_NAMER2_ACCESS_KEY_IDR2_SECRET_ACCESS_KEY
可以按需配置:
FORCE_UPDATE_MIN_VERSIONFORCE_UPDATE_BLOCKED_VERSIONSFORCE_UPDATE_TITLEFORCE_UPDATE_MESSAGEFORCE_UPDATE_RELEASE_NOTES
不配置时,force-update.json 仍会生成,但只包含当前版本信息,不会强制用户升级。
发布工作流会自动生成标准化 Release body。
需要在 GitHub Environment 软件发布 中配置:
AI_API_KEYAI_API_URL(可选)AI_MODEL(可选)
用途:
- 默认会调用当前配置的 AI 模型生成中文 Release 说明
- 自动生成中文 Release 说明
- 若 AI 不可用,会自动降级为模板正文,不影响发版
默认值:
AI_API_URL:https://api.openai.com/v1/chat/completionsAI_MODEL:gpt-5.4
如果需要自动发 Telegram 通知,请在 GitHub Environment 软件发布 中配置:
-
Secret:
TELEGRAM_BOT_TOKEN
-
Variable:
TELEGRAM_CHAT_IDSTELEGRAM_RELEASE_COVER_URL(可选)
说明:
TELEGRAM_CHAT_IDS支持多个目标,用英文逗号分隔- 可填写频道用户名或群/频道 chat_id
- 成功发布时会发送 AI 摘要版通知
- 发布失败时会发送失败通知
- Cloudflare R2:主更新源,负责客户端优先读取安装包、
latest.yml与force-update.json - GitHub Release:发布归档源 + 更新回退源
- force-update.json:R2 优先,GitHub 回退
