# 发版规则 ## 唯一产物目录 所有正式分发文件必须统一归集到仓库根目录下的: ```text release/v/ ``` `release/`、`output/`、`apps/desktop/out/`、`apps/desktop/.runtime/`、 `tmp/` 以及门禁报告均是本地中间产物或发布产物,必须保持 Git 忽略。 大型二进制不得直接提交到普通 Git 历史。 正式目录只能由 `npm run release:stage` 生成。脚本先写入同一文件系统中的 `.stage-*` 临时目录,完成镜像封包、清单和校验和后再原子改名;目标版本 目录已经存在时必须拒绝覆盖。 ## 标准目录内容 每个版本至少包含: ```text release/v/ ├── MorphDoc--x86_64-Setup.exe ├── MorphDoc--x86_64.zip ├── MorphDoc-FontPack---x86_64-Setup.exe ├── MorphDoc-FontPack--.zip ├── MorphDoc-Web--image.tar.gz ├── MorphDoc-Web--deploy.zip ├── manifest.json ├── SHA256SUMS.txt └── RELEASE-NOTES.md ``` Docker 镜像必须通过 `docker save` 导出并使用 gzip 压缩。Web 部署 ZIP 必须 包含 Compose、Nginx、环境变量示例和离线加载说明。`manifest.json` 记录 版本、Git 提交、镜像 ID、文件大小和 SHA-256;`SHA256SUMS.txt` 用于分发后 独立校验。 ## 正式字体资产 正式字体固定存放于: ```text font-packs/assets/// ``` TTF、OTF、WOFF 和 WOFF2 必须由 Git LFS 跟踪。新增或升级字体前必须完成 许可证、来源、内部字族名、文档嵌入权限、字节数和 SHA-256 审查;任何内容 变化都必须提升字体包 SemVer。克隆后需要先执行 `git lfs pull`,构建器不会 下载或使用系统字体代替缺失资产。 ## 发版步骤 1. 完成全量测试、类型检查、生产构建和视觉门禁。 2. 构建 Desktop 安装包、便携 ZIP 和字体附件。 3. 构建并验证版本化 Docker 镜像。 4. 准备 `docs/releases/v.md`。 5. 执行: ```powershell npm run release:stage -- --version --image md-to-pdf:v ``` 6. 逐项核验 `SHA256SUMS.txt`,并从离线归档重新加载 Docker 镜像。 7. 创建内容完整的 `release:` 提交。 8. 创建 annotated `v` 标签,标签说明与发布提交正文一致。 安装器公开分发前应完成 Authenticode 签名;未签名产物只能按内部发布风险 规则分发。