Skip to content

发布 PR(changeset-release/main)常红两处 CI:Check Changeset 结构性必失败 + Scaffold E2E 在 RC 窗口协议大版本错配 #4894

Description

@os-zhuang

复现于 #4422(chore: version packages (rc),run 30818473499 / 30818474538)。两处失败都不是该 PR 的内容问题,而是两条 CI 闸门自身的缺陷,并且每一个发布 PR 都会重现

1. Check Changeset 对发布 PR 结构性必失败

.github/workflows/pr-automation.ymlchangeset-checkgit diff --diff-filter=A "$BASE_SHA" HEAD -- '.changeset/*.md' 数「本 PR 新增了几个 changeset」。这个口径对普通 PR 是对的(#3373 修的就是全局 find | wc -l 在 RC 预发布模式下永远非空的问题),但 changesets 的发布 PR 是消费 changeset 的那一侧,按定义新增数为 0:

##[error]This PR adds no changeset. Run 'pnpm changeset' ...

即闸门对 changeset-release/main 只能红,不能绿。发布 PR 由 changesets/action 以 github-actions[bot] 身份推送,没人会去给它打 skip-changeset 标签,于是 mergeable_state: blocked 一直挂着。

修法:job 级 if 增加发布 PR 豁免,同时钉住分支名 作者,避免手工建同名分支拿它当逃生口。

2. Scaffold E2E / Scaffold with repo dist 在 RC 窗口协议大版本错配

日志链条:

npm error notarget No matching version found for @objectstack/cli@^17.0.0-rc.2.
##[warning]repo version not published yet — falling back to latest
...
✗ package 'e2e-app' targets protocol ^17 (engines.protocol) but this runtime is protocol 16.0.0.
##[error]server never became healthy

scaffold-e2e.yml 的 install 步骤有一个既定的兜底:仓库版本尚未发布时,把生成工程里所有 @objectstack/* 依赖改写成 latest 再装一次。但兜底只改依赖,没改 manifest——脚手架模板的 objectstack.config.tsscripts/sync-template-versions.mjs 在版本发布时刻死 engines: { protocol: '^17' },而 latest dist-tag 在 17 的 RC 窗口里仍指向 16.x 稳定版(protocol 16)。于是 os start 的 ADR-0087 D1 握手正确地拒绝了启动。

注意同一个 workflow 的 Docker 步骤已经认识到这一类偏移(它读取实际解析到的 CLI 版本来 pin 运行时镜像,而不是硬编码 latest),只是 boot 步骤没做对应的对齐。

修法:兜底分支在第二次 npm install 之后,把生成工程 objectstack.config.tsengines.protocol 重新盖成实际装上的 @objectstack/spec 大版本(与 protocol-version.ts 声明的「protocol 与包自身 major 保持锁步」不变量一致,该不变量由 protocol-version.test.ts 守着)。只在兜底分支里改:正常路径下装的就是仓库版本,大版本天然一致,不需要也不应该放松这条断言。

同时保留 ::notice,让日志里能看出这一轮 e2e 跑的是降级后的协议版本,而不是静默改写。


两处都只动 CI workflow,不涉及运行时/发布产物。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions