发布指南
本文档说明 CCX 的标准发布流程。
版本来源
项目使用根目录 VERSION 作为唯一版本源。
- 根版本文件:
VERSION - 构建注入位置:
backend-go/Makefile - 运行时版本变量:
backend-go/version.go
后端构建时会读取根目录 VERSION,并通过 -ldflags 注入版本、构建时间和 Git 提交信息。
版本规范
项目遵循语义化版本(Semantic Versioning):MAJOR.MINOR.PATCH。
MAJOR:不兼容的 API 变更MINOR:向下兼容的功能新增PATCH:向下兼容的问题修复
发布流程
推荐方式:优先使用项目内技能
本仓库发布时,优先使用 .claude/skills/ 下的两个技能:
version-bump(.claude/skills/version-bump/)- 用于升级根目录
VERSION - 自动更新或生成根目录
CHANGELOG.md - 可按约定创建 commit、tag,并推送到远程
- 用于升级根目录
github-release(.claude/skills/github-release/)- 用于根据
CHANGELOG.md生成发布公告 - 更新或发布 GitHub Release / Draft Release
- 用于根据
推荐顺序:
- 先使用
version-bump完成版本号、changelog、commit/tag/push - 再使用
github-release生成并发布 Release 公告
下面的手工步骤作为兜底流程:
步骤 1:准备工作
- 确保本地
main已同步最新代码。 - 确认计划内功能和修复已经合并。
- 发布前执行基础验证:
make build
cd "backend-go" && make test
cd "frontend" && bun run build步骤 2:更新 CHANGELOG.md
根目录 CHANGELOG.md 是唯一持续维护的发布历史。
- 在文件顶部新增版本标题,格式如下:
## [vX.Y.Z] - YYYY-MM-DD- 沿用当前 changelog 的分类:
### Added### Changed### Fixed### Removed### Other
- 如需整理变更,可查看上一个 tag 之后的提交:
git log vX.Y.(Z-1)...HEAD --oneline步骤 3:更新版本号
编辑根目录 VERSION 文件,将内容更新为新版本号:
vX.Y.Z不要更新 frontend/package.json 的 version 作为发布版本来源;前端包版本不是项目发布的权威版本号。
步骤 4:提交发布准备
将发布相关文件加入暂存并提交:
git add CHANGELOG.md VERSION
git commit -m "chore(release): prepare for vX.Y.Z"步骤 5:创建并推送标签
git tag -a vX.Y.Z -m "Release vX.Y.Z"
git push origin main
git push origin vX.Y.Z推送 tag 后,GitHub Actions 会自动触发多平台构建与 Docker 构建。
步骤 6:创建 GitHub Release
- 进入 GitHub 的 Releases 页面。
- 选择刚推送的 tag。
- 将
CHANGELOG.md中对应版本的内容整理到发布说明。 - 发布 Release。
发布检查清单
- [ ]
VERSION已更新 - [ ]
CHANGELOG.md已补齐 - [ ]
make build通过 - [ ]
cd "backend-go" && make test通过 - [ ]
cd "frontend" && bun run build通过 - [ ] 已创建并推送
vX.Y.Ztag
Release 签名
正式 Release 通过 Sigstore / cosign keyless signing 签名 checksums 清单。推送 tag 后 CI 会自动完成以下步骤:
- 三个平台(macOS / Windows / Linux)分别构建产物、生成平台级 checksums 并签名
finalizejob 合并三个平台的 checksums 为checksums.txt,再次签名- 所有签名文件随 Release 一起发布
发布后请确认 Release assets 中存在以下签名文件:
checksums.txt— 全平台合并 SHA256 清单checksums.txt.sigstore.json— 合并清单的 Sigstore bundlechecksums-macos.txt(.sigstore.json)— macOS 平台checksums-windows.txt(.sigstore.json)— Windows 平台checksums-linux.txt(.sigstore.json)— Linux 平台
现有 .sha256 sidecar 文件保留不变,desktop/backend updater 行为不受影响。
Windows Store / MSIX
Windows release job 同时生成 Store/MSIX 验证产物:
CCX-Desktop-{version}-windows-amd64-store.msixCCX-Desktop-{version}-windows-arm64-store.msix
MSIX 包使用 DISTRIBUTION=store 构建,桌面端不会初始化 GitHub Releases 自动更新器,更新由 Microsoft Store 负责。正式提交 Store 前,需要在 GitHub repository variables 中配置 Partner Center 的包身份:
| 变量 | 来源 |
|---|---|
MSIX_PACKAGE_NAME | Partner Center 的 Package/Identity Name |
MSIX_PUBLISHER | Partner Center 的 Publisher,例如 CN=... |
MSIX_PUBLISHER_DISPLAY_NAME | 发布者显示名 |
MSIX_DISPLAY_NAME | Store/App 显示名 |
MSIX_DESCRIPTION | 包描述 |
当前流程只生成 MSIX 包并上传到 Draft Release,不自动提交 Partner Center。Store 提交仍需在 Partner Center 手工上传、填写商店信息并等待认证。
用户验证方式见 验证发布产物。