36 lines
2.8 KiB
Markdown
36 lines
2.8 KiB
Markdown
# v0.28 通用工程验收
|
||
|
||
本轮新增 `project new/generate/check`,默认生成普通 Go 程序,不包含 API、网络监听、外部服务初始化或业务任务。项目维护配置、svc 和 Run;模板维护入口、加载与生命周期装配。
|
||
|
||
## 发布前回归
|
||
|
||
2026-09-29,macOS arm64,Go 1.27.1 / Go 1.22.12:
|
||
|
||
- `GO_OMNI_SCAFFOLD_INTEGRATION=1 go test -race -count=1 ./...`:56 个测试包通过,含现有 API 生成消费者与新通用工程消费者。
|
||
- `GOTOOLCHAIN=go1.22.12 GO_OMNI_SCAFFOLD_INTEGRATION=1 go test -count=1 ./...`:56 个测试包通过。
|
||
- `go vet ./...`、`go build ./...`、`git diff --check`:通过。
|
||
- 最终补充真实进程异常退出断言后,新生成器再次通过 race 集成回归与 Go 1.22 集成回归。
|
||
- `examples/program` 在临时副本中使用显式本地替换,完成 tidy、race、配置检查、实际一次性运行、生成漂移检查;仓库示例不含本地 replace。
|
||
|
||
## 验证边界
|
||
|
||
生成保护覆盖:手写文件逐字节保留、修改生成文件报冲突、缺失生成文件补回、缺失手写文件显式报错、只读 check/预览、模板升级漂移、工程与模块身份、最低依赖版本、路径/符号链接和锁保护、写入冲突后的事务回滚。
|
||
|
||
实际生成的消费者保留全部入口/加载/装配代码,只修改项目所有文件,覆盖:
|
||
|
||
- 一次性正常完成,主流程 defer 结束后反序关闭资源。
|
||
- Init 返回错误或 panic,Run 返回错误、panic、Goexit,以及组件报告致命故障。
|
||
- 初始化到一半失败后停止并等待已经启动的工作。
|
||
- 停止接收后等待处理与确认完成,期间 WorkContext 仍可用。
|
||
- 排空超时后请求取消,宽限期内完成则可清理;仍未结束则保留共享资源和日志。
|
||
- 主运行入口、后台工作、失败初始化后的工作不响应取消,均不会提前关闭资源。
|
||
- 显式环境引用、固定值不被隐式覆盖、非法配置阻止初始化,check-config 不打开日志文件。
|
||
- 真实构建的进程:SIGINT/SIGTERM 正常退出码 0;Run 错误/panic、主流程不响应停止导致超时,退出码 1。
|
||
- 默认进程通过本机 lsof 检查,无 TCP/UDP 端口;生成目录和源码无 API/Handler/Swagger/数据库/队列启动。
|
||
|
||
文件替换只对单文件原子,普通失败会回滚,整个工程不具备崩溃事务性。未登记的 goroutine、不遵守完成契约的项目组件、SIGKILL 和进程崩溃无法由模板保证收尾。新模板不改变既有调度器或队列的重试/投递语义。
|
||
|
||
## 远程发布验收
|
||
|
||
发布后运行 `scripts/verifyProgramRelease.py` 与原有 `scripts/verifyManagedRelease.py`,使用空模块缓存安装固定远程 CLI,禁止本地 replace。结果在完成后补入本文件及 JSON 报告。
|