Skip to content

fix(ci): pre-push 的 pnpm CLI 候选增加 JS 形态校验,修复 mise 独立版 pnpm 下 Windows 推送必挂 - #57

Open
yachen4ever wants to merge 1 commit into
ZCodium-project:mainfrom
yachen4ever:fix/pre-push-pnpm-execpath
Open

yachen4ever wants to merge 1 commit into
ZCodium-project:mainfrom
yachen4ever:fix/pre-push-pnpm-execpath

Conversation

@yachen4ever

Copy link
Copy Markdown
Collaborator

Closes #54

改动(3 文件,+55/−27)

  • 新增 scripts/pnpm-cli-resolver.mjs:从 run-affected-unit-tests.mjs 抽出 resolvePnpmCliPath(原脚本顶层即执行 main(),无法被测试导入),并新增 isJsEntryPath 形态校验——候选扩展名必须是 .cjs/.mjs/.js 才交给 process.execPath 当 JS 入口,否则回落到既有的 PATH 搜索与 shell: true 兜底。
  • run-affected-unit-tests.mjs 改为从新模块导入,删除本地实现与不再使用的 delimiter 导入,其余行为不变。
  • 新增 scripts/pnpm-cli-resolver.test.mjs(node --test,与 scripts 下其他测试同惯例)。

根因

resolvePnpmCliPath 原先只检查 npm_execpath 路径含 \pnpm\ 就当作 JS CLI:mise 独立版 pnpm 恰好把 npm_execpath 指向 <mise>/installs/pnpm/10.33.2/pnpm.exe(原生二进制),node 加载即 SyntaxError——凡 push 涉及测试文件变更(含「已删除测试文件触发全量回退」路径),Windows 上的 pre-push 钩子必挂。对 corepack/npm 形态(npm_execpath 本就是 .cjs)零行为变化。

验证

  • node --test scripts/pnpm-cli-resolver.test.mjs:4/4 通过(含 mise pnpm.exe 形态被拒、PATH 候选回退两条关键路径)。
  • ZCODE_AFFECTED_TEST_BASE=<HEAD> node scripts/run-affected-unit-tests.mjs 冒烟:模块接线正常、退出码 0。
  • pnpm lint:0 错误。

run-affected-unit-tests.mjs 的 resolvePnpmCliPath 此前只要 npm_execpath 路径含
\pnpm\ 就当作 JS CLI 直接交给 process.execPath 执行;mise 独立版 pnpm 的
npm_execpath 指向原生 pnpm.exe(MZ 头二进制),node 加载即 SyntaxError,所有
涉及测试文件变更的 Windows 推送都被 pre-push 钩子拦死。

抽出 scripts/pnpm-cli-resolver.mjs(原脚本顶层即执行 main(),无法直接导入测试),
候选需通过扩展名校验(.cjs/.mjs/.js)才走 node 执行,否则回落 PATH 搜索与
shell 兜底。行为对 corepack/npm 形态的 pnpm 无变化。
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.

ci(pre-push): run-affected-unit-tests 以 npm_execpath 拉 pnpm,mise 独立版(原生 exe)下 Windows 推送必挂

1 participant