05144309c3
解决"开发构建沿用已发布版本号,分不清开发版与正式版": - 新增 `scripts/version.py --identity`:release_version(无基线即空)/ build_kind / commit_sha(完整 40 位)/ display_version / built_at。显示规则:发布 `X.Y.Z`、 开发 `X.Y.Z-dev+g<短SHA>`、无基线 `dev+g<短SHA>`、什么都拿不到 `dev`。 - `build_kind=release` 只认**显式发布上下文**(`BUILD_KIND=release` / `--release`); 声明发布构建却没有已发布版本 ⇒ 拒绝(rc=2)。普通 main 构建永远是 development, **不许只显示上一正式版本号、不许自称正式版**。 - Go 侧 `internal/version` 加 ReleaseVersion/BuildKind/DisplayVersion()/IsRelease()/Info(), 原 Number/CommitSHA/BuildTime 语义不变(向后兼容);契约测试改成:发布构建必须等于 CHANGELOG 顶部、开发构建必须是 dev 形状;`make verify` 的 contracts 项新增 **负例**「自称正式版 ⇒ 必须红」(只有正例的契约会被静默掏空)。 - 构建接线:Makefile/Dockerfile/ci_checks `--internal-build` 统一走 identity; Makefile 的 `make version` 打印身份 JSON;Dockerfile 新增 RELEASE_VERSION/BUILD_KIND。 - `tests-go` 的"按设计跳过"声明补上 `TestDevBuildDoesNotClaimRelease`(它的强制点在 contracts)。 验证:go test 三态实测(未注入 SKIP、开发身份 PASS、自称正式版 FAIL); --internal-build 产出并打印 dev+g<sha>;--internal-identity 契约项 rc=0; make verify 15/15 success;反向夹具 80/0。
54 lines
2.8 KiB
JSON
54 lines
2.8 KiB
JSON
{
|
||
"_doc": [
|
||
"测试范围声明:**哪些跳过是允许的**。judge 在 scripts/ci_checks.py 里读这个文件。",
|
||
"极性是『默认必需』:没在这里声明的测试,一旦被 SKIP / PENDING ⇒ 门禁红(必需项不能报通过)。",
|
||
"只有『确实需要外部环境、本仓拿不到』的集成/外部依赖用例才写进来,每条必须写清理由。",
|
||
"package 级条目 = 该包里所有 skip 都算『可选未运行』(例如整个包都依赖 TEST_DATABASE_URL)。",
|
||
"test 级条目 = 只豁免那一个用例(包里其它用例仍是必需的)。",
|
||
"报告里会把这些『可选未运行』的条数与原因如实列出 —— 记录,不等于通过。",
|
||
"⚠️ 文件缺失或解析不了 ⇒ 门禁红:范围声明不出来时,不许默认放行。"
|
||
],
|
||
"optional": [
|
||
{
|
||
"package": "knowledge-governance/internal/platform/postgres",
|
||
"reason": "整个包的集成用例都要 TEST_DATABASE_URL 指向可销毁测试库;本仓不连生产库,CI 无库 ⇒ 跳过(补验路径:起一次性 PG 后设 TEST_DATABASE_URL)"
|
||
},
|
||
{
|
||
"package": "knowledge-governance/internal/releaseadapter/v071",
|
||
"reason": "v0.7.1 源/目标库与 MinIO 集成环境;无环境即跳过"
|
||
},
|
||
{
|
||
"package": "knowledge-governance/cmd/pp-ledger-import",
|
||
"reason": "导入器集成用例需要 TEST_DATABASE_URL"
|
||
},
|
||
{
|
||
"package": "knowledge-governance/cmd/release-worker",
|
||
"reason": "release runtime 集成用例需要受限文件与运行时环境变量"
|
||
},
|
||
{
|
||
"package": "knowledge-governance/internal/monitoring",
|
||
"reason": "真实服务健康矩阵 / 指标窗口用例需要外部服务可达"
|
||
},
|
||
{
|
||
"package": "knowledge-governance/internal/httpapi",
|
||
"test": "TestUISettingsWriteReadBackIntegration",
|
||
"reason": "系统设置写回读用例需要一个运行中的实例"
|
||
},
|
||
{
|
||
"package": "knowledge-governance/internal/httpapi",
|
||
"test": "TestUISettingsWriteReadBackWithLiveVerification",
|
||
"reason": "同上(带实时校验的那条)"
|
||
},
|
||
{
|
||
"package": "knowledge-governance/internal/version",
|
||
"test": "TestNumberMatchesChangelog",
|
||
"reason": "未注入版本号时按设计 SKIP(本地跑全量测试不该被迫先构建);**它的强制点在 contracts 项**:那里带 -ldflags 跑它并断言真的 PASS、且出现 SKIP 就判红"
|
||
},
|
||
{
|
||
"package": "knowledge-governance/internal/version",
|
||
"test": "TestDevBuildDoesNotClaimRelease",
|
||
"reason": "构建身份未注入时按设计 SKIP(本地跑全量测试不该被迫先构建);**它的强制点在 contracts 项**:那里带 -ldflags 跑它并断言真的 PASS、且出现 SKIP 就判红"
|
||
}
|
||
]
|
||
}
|