Skip to content

ci(aarch64): 去掉三处工作区 pin —— 它选中的不是旧构建器,而是不存在的那个 - #389

Merged
speak-agent merged 1 commit into
mainfrom
fix/aarch64-selfhost-workspace-pin
Aug 8, 2026
Merged

ci(aarch64): 去掉三处工作区 pin —— 它选中的不是旧构建器,而是不存在的那个#389
speak-agent merged 1 commit into
mainfrom
fix/aarch64-selfhost-workspace-pin

Conversation

@speak-agent

Copy link
Copy Markdown
Member

2026.8.8.4 发版后跑生态验证时抓到的:ci-aarch64-fresh-install 的自举步骤自 2026-08-06 起每次都挂。

self-hosting … @ 55a39d9
[error] xlings: version '2026.8.6.2' not found for 'mcpp'
[error]   available: 2026.8.8.2

根因

checkout 里的 .xlings.json 声明 workspace.mcpp —— bootstrap pin,按设计不随发布走。它作用于当前目录、压过任何已安装版本;而这个 job 只跑 xlings install mcpp(裸名=latest),bootstrap 版本在这台 runner 上从来不存在。所以「遵守 pin」不是选了个旧构建器,而是选了个没有的。

「最新发布 ≠ bootstrap pin」是常态,所以两者一分叉它就必挂 —— 它又是周更,没有任何东西指向它。install_released_mcpp.sh 的第 1 条正是为此写的,只是只搬到了 x86_64 那几条腿。

同一缺陷推导了三处

# 位置 修法
1 自举步骤在 /tmp/mcpp-src 的两次 shim 调用 移除该克隆的 pin
2 mcpp self envcd /tmp/xlings-src 之后求值 —— xlings 仓库自己也带 pin(2026.8.6.1) 改到 cd 之前求值
3 PR 回归门 checkout 之后的 mcpp build 同 1

第 2 处值得单独说:只修第 1 处会把失败推到下一行,而且死在 could not determine MCPP_HOME 这个与真因无关的守卫上 —— 断言只说「失败了」而不说原因,等于没有断言。改为在 cd 之前求值,不需要去动 xlings 仓库的文件。

范围

只改 workflow,不动产物。本 PR 触碰该文件即触发 pull_request(paths 过滤命中),所以修复自带验证 —— 而且这次 PR 门(步骤 9–11)会真的跑起来,那是第 3 处修好才可能的。

发布件本身在 aarch64 上是过的:同一次运行里步骤 3–7 全绿,含原生构建并运行 import std 程序。

`ci-aarch64-fresh-install` 的自举步骤自 2026-08-06 起每次都挂:

    self-hosting … @ 55a39d9
    [error] xlings: version '2026.8.6.2' not found for 'mcpp'
    [error]   available: 2026.8.8.2

checkout 里的 `.xlings.json` 声明 `workspace.mcpp` —— **bootstrap pin,按设计
不随发布走**。它作用于当前目录、压过任何已安装版本,而这个 job 只跑
`xlings install mcpp`(裸名=latest),bootstrap 版本在这台 runner 上从来不存在。
所以「遵守 pin」并不是选了个旧构建器,而是选了个没有的。

「最新发布 ≠ bootstrap pin」是**常态**,所以两者一分叉它就必挂;它又是周更,
没有任何东西指向它。`install_released_mcpp.sh` 的第 1 条正是为此写的,只搬到了
x86_64 那几条腿。

同一缺陷在这个文件里**推导了三处**:

1. 自举步骤在 `/tmp/mcpp-src` 里的两次 shim 调用 → 移除该克隆的 pin
2. `mcpp self env` 原本在 `cd /tmp/xlings-src` **之后**才求值 —— 而 xlings 仓库
   自己也带 pin(`workspace.mcpp = 2026.8.6.1`)。只修第 1 处会把失败推到下一行,
   而且死在「could not determine MCPP_HOME」这个与真因无关的守卫上。改为在 cd
   之前求值(那时 cwd 的 pin 已移除),不去动别人仓库的文件。
3. PR 回归门 checkout 之后的 `mcpp build` —— 同一形状,今天任何 PR 都会挂

改动只在 workflow;本 PR 触碰该文件即触发 `pull_request`,自带验证。
@speak-agent

Copy link
Copy Markdown
Member Author

先否掉一个诱人的假修法:抬 bootstrap pin

看到 version '2026.8.6.2' not found / available: 2026.8.8.2,最省事的反应是把 .xlings.jsonworkspace.mcpp 抬到最新。那是错的,理由两条:

  1. bootstrap pin 是自举起点,按设计不随发布走 —— 它只需指向「已发布 + 已进索引 + 能构建当前树」的某个版本,落后是正常态。当前 pin 构建当前树没坏(feat: 机器可读输出协议 —— 信封 + 效应 + --format 归一 (2026.8.8.4) #385 十八个 job 全绿用的就是它)。判据是上界,不是义务。
  2. 抬 pin 只能靠巧合修好这个 job:它之所以「一度是绿的」,正是因为 8-06 那天 pin 恰好等于当时的 latest。下一次发版两者再分叉,它又会挂 —— 而这次连「上次为什么绿」都会更难查。

真因是这个 job 从不安装 pin 指向的版本(只跑 xlings install mcpp 裸名=latest),所以「遵守 pin」选中的是一个不存在的构建器。修法只能是让这三处不看 pin。

@speak-agent
speak-agent merged commit 8625c45 into main Aug 8, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant