feat(version): 版本号唯一来源 = CHANGELOG.md(含改了什么/怎么验收的结构约束) #3
Reference in New Issue
Block a user
Delete Branch "feat/versioning-and-changelog"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
范围
分支
feat/versioning-and-changelog(1 个提交,10 个文件)。只加版本化与变更记录机制,不改业务逻辑。解决了什么
本仓此前没有任何版本/构建元信息 —— 没有
-ldflags注入、没有产物可读的版本号,"线上跑的是哪个提交"答不出来;"这次改了什么、怎么验收"也没有载体。
设计:CHANGELOG.md 就是版本的唯一来源
正本 §6.1 要求"版本号只有一个来源"。所以不放
VERSION文件、也不靠 git tag(CI 是
git fetch --depth 50,取不到 tag ⇒git describe会静默退化,见docs/agents/traps.mdtrap-5)。没有 CHANGELOG 条目 ⇒ 解析失败 ⇒ 构建红 —— 所以"忘了记变更"过不去。
你要求的两件事,是怎么被强制的
每个已发布版本必须有两节:
### 改了什么与### 怎么验收。scripts/check_changelog.py逐条检查(两节齐、带日期、版本号不重复且严格递减、小节不为空),CI 会跑它 —— 缺任一节即红。首次记录
0.1.0已按这个格式写好,验收步骤是实测出来的(web
8088->8080;/health/livez/readyz/全 200;nginx 反代/health与/api/;api 容器
health=healthy),不是设计意图。反向自检(都真跑过)
make version-contract注入正确号 → PASS9.9.9(CHANGELOG 里没有)→ FAILCHANGELOG.md的「怎么验收」小节 → 报红(对真实文件做,不只是夹具)make changelog-check --self-test→ 造正/反夹具,断言该红会红、该绿会绿安全与数据边界
compose.yamlDockerfile加了ARG VERSION/COMMIT_SHA/BUILD_TIME+ ldflags,未透传时落dev——故意的:一个显眼的
dev好过一个看起来正常的假版本号尚未验证
make verify全量(含go test ./...与前端)—— CI 是本次测试证据GET /version端点与cmd/api -version开关未做:它们要改internal/httpapi/server.go与cmd/api/main.go,与在审 PR #2 冲突 ⇒ 待 PR #2 合并后在 main 上补compose.yaml的 build args 透传未做(当前 compose 构建的镜像会报dev)明确声明
未合并、未部署。 合并由人决定;合并与部署是分开的动作。
Pull request closed