|
| 1 | +# CMP CI 冷缓存工具链修复设计 |
| 2 | + |
| 3 | +**日期:** 2026-08-30 |
| 4 | +**状态:** 本地实现并验证,远程 CI 待确认 |
| 5 | +**基线:** PR #10,提交 `1804044` |
| 6 | + |
| 7 | +## 问题 |
| 8 | + |
| 9 | +PR #10 的 macOS arm64 与 Windows x86_64 检查通过;Linux x86_64 在 `Build library` |
| 10 | +阶段、尚未编译 CMP 代码前失败: |
| 11 | + |
| 12 | +```text |
| 13 | +selected RuntimeBinding glibc@2.44 requires payload |
| 14 | +'.../xim-x-glibc/2.44', but it is not installed |
| 15 | +``` |
| 16 | + |
| 17 | +冷缓存中实际安装的是 `2.44.2`。项目固定的 mcpp `2026.8.11.2` 携带旧版 xlings, |
| 18 | +运行时绑定使用编译期常量 `2.44`,而当前索引把该请求解析为 `2.44.2`,两种版本身份 |
| 19 | +因此失配。本机已有缓存,所以此前本地验证无法复现。 |
| 20 | + |
| 21 | +## 选择 |
| 22 | + |
| 23 | +同时提升互相配套的两个精确版本: |
| 24 | + |
| 25 | +- `.xlings.json`:mcpp `2026.8.11.2` → `2026.8.28.1`; |
| 26 | +- 三个平台 workflow:引导 xlings `2026.8.11.2` → `2026.8.27.5`。 |
| 27 | + |
| 28 | +mcpp 官方提交 `473ee0520b00` 表明 `2026.8.28.1` 是首个随包固定 xlings |
| 29 | +`2026.8.27.5` 的 mcpp 版本;该 xlings 从索引读取运行时绑定,并保证声明版本优先于 |
| 30 | +索引的 `latest`。这直接修复冷缓存中“声明 2.44、安装 2.44.2”的根因。 |
| 31 | + |
| 32 | +不选其他方案: |
| 33 | + |
| 34 | +- 不固定旧 glibc 载荷,也不增加 CI 缓存;两者只会隐藏索引与绑定失配。 |
| 35 | +- 不使用 mcpp `2026.8.27.1`;它已能兼容唯一的版本精化,但尚未携带最终固定的 |
| 36 | + xlings 版本。 |
| 37 | +- 不升级到当前最新的 mcpp `2026.8.29.1`;它包含与本问题无关的构建规则改动。 |
| 38 | +- 不只提升 mcpp。失败日志显示 mcpp 首次初始化会把 workflow 提供的系统 xlings 复制进 |
| 39 | + 私有沙箱;保留旧引导版本会继续制造错误绑定,只能依赖新版 mcpp 的兼容回退。 |
| 40 | + |
| 41 | +## 修改边界 |
| 42 | + |
| 43 | +- 修改 `.xlings.json` 与三个 workflow 中的四个精确版本值及必要的下限注释;workflow |
| 44 | + 步骤不变。 |
| 45 | +- 保持 LLVM `22.1.8`、Asio `1.38.1`、gtest `1.15.2`、CMP API 与源码不变。 |
| 46 | +- 记录本次诊断、验证和远程 CI 结果;只有取得结果后才更新“三平台待确认”的文档状态。 |
| 47 | +- 不合并 PR #10。 |
| 48 | + |
| 49 | +## 验收 |
| 50 | + |
| 51 | +1. `xlings install -y` 成功,`mcpp --version` 报告 `2026.8.28.1`。 |
| 52 | +2. Dev 与 Release 严格、关闭缓存的构建和 140 项测试全部通过。 |
| 53 | +3. `examples/basic` 构建运行成功并输出既有示例结果。 |
| 54 | +4. 推送后 PR #10 的 Linux、macOS、Windows 三项检查全部通过。 |
| 55 | + |
| 56 | +## 风险 |
| 57 | + |
| 58 | +mcpp 尚未到 1.0,工具版本提升可能改变模块扫描或清单校验。完整本地双配置门禁与远程 |
| 59 | +三平台门禁共同约束该风险;若任一门失败,只修复有证据的兼容问题,不扩大 CMP API。 |
| 60 | + |
| 61 | +## 自审结论 |
| 62 | + |
| 63 | +最初方案只提升项目 mcpp。复查 Linux 日志与 mcpp `acquire_xlings_binary()` 后确认,冷启动 |
| 64 | +时沙箱 xlings 来自 workflow 的系统版本;因此只提升 mcpp 虽可依赖版本精化回退,但没有 |
| 65 | +消除错误绑定的来源。最终方案同时固定官方配套的 mcpp `2026.8.28.1` 与 xlings |
| 66 | +`2026.8.27.5`,其余边界不变。 |
0 commit comments