构建与部署
原生应用
go tool mygo doctor
go tool mygo build
go tool mygo build -skip-dmg
go tool mygo build -platform darwin/universal,windows/amd64,linux/amd64产物写入 build/。本地 macOS 构建使用临时签名;对外分发需要 Developer ID、签名配置和公证。Windows 安装程序也需要签名策略。Linux 桌面运行需要 GTK 3。
CI 在 macOS 上运行竞态测试、Go vet 和 MyGo vet,交叉编译 Windows/Linux 并打包 macOS。编译成功的二进制不代表桌面集成已验证。
现有手动 Release 工作流接受稳定版本号,使用 tools/version 更新 internal/buildinfo/version.go 和 mygo.json,构建并验证安装包,创建发布提交及标签,再发布 GitHub release 产物。它需要仓库写权限和兼容的分支保护。在满足路线图验收条件前,不要将其作为正式发布运行。生产签名及可信更新源/密钥尚未配置。提供这些构建输入后,应用支持与 MyGo 清单兼容的签名更新暂存;否则检查 GitHub releases 并提供手动下载回退。
文档
文档站构建与部署工作流已移除,仓库不再提供用于构建、类型检查或发布文档站的 GitHub Actions 任务。本地 VitePress 开发、类型检查和构建命令仍然保留,具体命令见开发指南。构建产物位于 docs/.vitepress/dist。
现有站点配置仍使用 oss-browser.ntnyq.dev 生成站点地图 URL,并将 docs/public/CNAME 复制到构建产物。这些配置不会部署站点;如需发布,须另行配置托管与部署流程,以及域名、DNS 和 HTTPS。
升级检查
更改 MyGo 后,运行 Go 测试、竞态检查、两种 vet、快照和原生验收测试。更改文档依赖后,重新生成锁文件并运行类型检查和构建。
验收交接(2026-10-14)
所有者稍后提供 OSS 账号、Windows/Linux 环境和签名配置。不得根据模拟 SDK 测试或交叉编译将这些检查标记为通过。
| 环境 | 所需证据 | 状态 |
|---|---|---|
| 可丢弃 OSS 测试 Bucket | AK/STS 与授权码范围/到期、Endpoint 模式、分页、公开/私有 ACL、元数据、链接、复制/移动/删除 | 等待账号 |
| 可丢弃 OSS 测试 Bucket | 大文件上传/下载中断、重启/重连恢复、源变更、CRC 失败、启用/禁用版本控制时的冲突 | 等待账号 |
| macOS | 真实对话框、Keychain 主动保存/读取/删除、Unicode 路径、睡眠/网络中断、签名安装 | arm64 原生启动/捕获冒烟测试已通过;其余集成和生产签名待验收 |
| Windows | Credential Manager、文件替换、保留名称、安装/卸载、缩放、对话框 | 等待环境 |
| Linux | GTK 对话框、Secret Service 不可用/锁定/解锁、符号链接、安装/卸载 | 等待环境 |
| 分发 | Developer ID 与公证、Windows 签名、来源证明/校验和、发布产物与 HTTPS 文档 | 等待签名及发布配置 |
CI 现在除了 macOS 测试套件,还包含在 Windows 和 Linux 平台运行的测试。这些任务已在本地配置;此项工作不能证明远程 CI 已通过。真实桌面验收仍需单独执行。
签名 macOS 构建支持 MyGo 的 macos.signingIdentity(或 -sign)及 macos.notarize.keychainProfile。Windows 签名使用 windows.certificate 或配置的签名命令。证书、钥匙串配置和密码应放在仓库外。运行 Release 工作流前必须提供并测试配置。本地临时签名仅代表开发构建。
当前候选版本的范围和行为限制见快速开始。RAM/STS、SMTP、二维码、软链接、归档及其他 Design v2 场景族已实现。具体代码和验收证据见场景清单。真实服务验收仍不可省略。
签名更新配置
编译前在 mygo.json 中设置 updates.publicKey 和 updates.github(这些公开值会嵌入应用),并遵照固定版本 MyGo 更新器文档,仅通过受保护的发布密钥提供 MYGO_UPDATER_PRIVATE_KEY。公钥必须对应发布者控制的签名密钥。将生成的各平台清单、更新归档与发布安装包一起发布。在可丢弃安装环境中验证签名检查、中断下载、回滚/失败及重启恢复之前,不得发布更新源。当前 Release 工作流在配置这些输入和产物前仍采用手动安装包流程。
自动更新将完整归档下载到仅所有者可访问的临时文件,并验证其签名 SHA-256 摘要。就绪通知要求显式安装;安装会重新验证文件,不再次下载。取消或验证失败不会将包标记为就绪。不使用增量归档。macOS 替换匹配的应用包,失败时回滚;Windows/Linux 通过备份替换归档条目。旧可执行文件运行时,Windows 可能保留备份。请在每个目标操作系统的可丢弃签名安装中验证这些路径及重启。
唯一桌面发布入口
手动 GitHub Release 工作流是唯一发布入口。pnpm release 通过 GitHub CLI 打开输入提示;显式调用如下:
gh workflow run release.yml -f version=0.2.0根 package.json 是私有工具包。其 0.0.0 版本与桌面发布无关;更新 npm 版本不会发布应用。
在本地检查版本而不更改文件:
go run ./tools/version同步计划中的稳定版本,但不创建标签、提交或发布:
go run ./tools/version -set 0.2.0工作流还会在打包前强制检查标签唯一性、版本递增,以及默认分支头未变化。CI 和发布验证都会拒绝 Go 版本与 MyGo 打包元数据不一致的情况。