Skip to content

Latest commit

 

History

History
78 lines (55 loc) · 3.56 KB

File metadata and controls

78 lines (55 loc) · 3.56 KB

19 - 受支持的版本与兼容性

本文陈述哪些发布受支持、支持多久、以及版本之间什么可以变化。它之所以存在,是因为 一个采用 mcpp 的工程会被它自己的评审流程问到这些问题,而只活在维护者脑子里的答案 无法被引用。

版本号

发布以 YYYY.M.D.N 命名 —— 发布日期,加上当天发布的序号。这套方案的数字不携带 任何兼容性承诺:2026.9.4.1 不是 2026.9.3.2 的「小版本」。什么可以变、什么 不可以,由下文陈述,而不是编码在数字里。

支持范围

受支持 最新的一个发布
安全修复 最新的发布,以及上一个自然月的最后一个发布
不受支持 更旧的一切

一个发布是被取代,而不是被撤回。更旧版本的已发布资产与索引条目原样保留,因为某个 工程可能钉住了它,移除会弄坏一个本来正常的构建。

版本之间什么可以变化

引擎自身的各个接口稳定性并不相同,这个差别值得精确陈述。

稳定性
mcpp.toml 的键 只增。既有键保持其含义;无法识别的键会被报告,绝不静默忽略
CLI 命令与旗标 只增。被取代的拼写保留为别名
机器输出(--message-format json) schemaVersion 版本化,见 11
build.mcpp 指令协议 版本化,见 kProtocolVersion。引擎遇到声明更高版本的程序会拒绝,而不是猜测
mcpp.lock 格式 schemaVersion 版本化;更旧的文件在读取时迁移
目标表的行 只增。一行的档位可以上升;只要还有已发布的包以它为目标,该行不会被移除
构建指纹、缓存布局、target/ 的内容 不是接口。 它们不经通知即变化,任何东西都不应解析它们

一个调用了其引擎自带 mcpp 模块中不存在的函数的 build.mcpp,失败发生在构建 程序的编译期,而不是通过协议错误。协议号管的是线上的指令;类型化 API 由装的是 哪个引擎决定。两者都写在这里,是因为包作者看到的失败取决于他越过了哪一条。

复现一次构建

mcpp.lock 记录一次构建解析出了什么。--locked 断言解析与它一致,不一致则失败并 点名移动了的那个包:

error: --locked was given and this resolution differs from mcpp.lock:
         mcpplibs.cmdline 0.0.1 -> 0.0.2

发布构建、审计或 CI 作业应当传 --locked。它会关掉构建快路径,因此断言总会跑到。

尚未约束解析 —— 它记录并校验解析。把锁作为解析的输入来钉住它,是对解析器 的另一项改动。

物料清单

mcpp emit sbom 写出一份描述已记录解析的 CycloneDX 1.5 文档:

mcpp emit sbom -o sbom.json

它读 mcpp.lock 而不是重新解析,因为一份描述了与所构建者不同的图的文档,比没有 文档更糟。mcpp 不知道其许可证的组件被写成 NOASSERTION 而不是省略:缺席的字段 读起来像「未检查」。

离线与内网使用

--offline(或 MCPP_OFFLINE=1)阻止一切网络访问:索引刷新、包下载与工具链安装。 需要其中之一的构建会点名它所需要的东西然后失败,而不是伸手出去。

报告问题

缺陷与安全报告提交到拥有该组件的仓库的 issue tracker —— 引擎、包索引,或者那个包 自身。一份点明了版本、宿主、目标与命令的报告是可执行的;没有这四样的报告通常换来 一次索要它们的回复。