From 3680218010ab4a9d59d1c7c366fa62c2a9dd48ee Mon Sep 17 00:00:00 2001 From: jkooe <62494645+jkooe@users.noreply.github.com> Date: Sat, 17 Oct 2026 23:24:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci):=20typecheck=20=E5=89=8D=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=85=A8=E9=87=8F=E6=9E=84=E5=BB=BA=20=E2=80=94?= =?UTF-8?q?=E2=80=94=20=E5=8F=AA=E5=BB=BA=20protocol=20=E4=B8=8D=E5=A4=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 上一版没修透 先只加 `pnpm --filter @nodeagent/protocol build`,CI 换了个错法: `apps/cli` 报 `Cannot find module '@nodeagent/client'`。 依赖链是 **`protocol → client → cli / mcp / agent`**,逐层都要 dist/*.d.ts。 逐个补依赖是打地鼠,下次加包还会漏 —> 直接用 `pnpm -r build` 把整条链建出来。 ## 顺带修掉一个顺序矛盾 原工作流是 `typecheck` 在前、`pnpm -r build` 在后,而后者注释写着 「单测 import 的是 dist/,必须先构建」。既然后面无论如何都要 build, 不如提前一次到位 —— 现在 build 在 typecheck 之前,只保留一份。 **注入验证(模拟 CI 全新检出)**:把 `packages/*/dist`、`apps/*/dist` 全部移走 → `pnpm -r build` → `pnpm typecheck` **零错误**;`pnpm test:unit` **357 项全绿**。 --- .github/workflows/quality-gate.yml | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/.github/workflows/quality-gate.yml b/.github/workflows/quality-gate.yml index 24e61b9..9e55faf 100644 --- a/.github/workflows/quality-gate.yml +++ b/.github/workflows/quality-gate.yml @@ -76,20 +76,22 @@ jobs: - run: pnpm install --frozen-lockfile - # ⚠️ 必须先构建 `@nodeagent/protocol` 再查类型(2026-10-17) - # 各包 import 的是 `@nodeagent/protocol` 的**类型产物**(dist/*.d.ts)。 - # CI 里全新检出、没有 dist,直接 typecheck 会集体报 - # `TS2307: Cannot find module '@nodeagent/protocol'` —— 而本地因为 dist 还在, - # 看不出问题(典型的「本地绿 / CI 红」)。 - # 只构建 protocol 而不跑全量 build:够用且快,全量 build 留给下一步。 - - name: 构建 protocol 类型产物 - run: pnpm --filter @nodeagent/protocol build + # ⚠️ 必须先全量构建,再查类型(2026-10-17) + # + # 各包 import 的是**同仓其它包的编译产物**(dist/*.d.ts),依赖链是 + # `protocol → client → cli / mcp / agent`。CI 全新检出没有 dist, + # 直接 typecheck 会逐层报 `TS2307: Cannot find module '@nodeagent/xxx'`; + # 而本地因为 dist 还在,完全看不出来 —— 典型「本地绿 / CI 红」。 + # + # 一开始只想「只构建 protocol 就够」,实测不够:cli 又报找不到 `@nodeagent/client`。 + # 与其逐个补依赖(下次加包还会漏),不如直接用 `-r build` 把整条链建出来。 + # 顺带:单测 import 的也是 dist/,这一步同时保证了覆盖率不为空(原步骤在 typecheck 之后, + # 顺序本就矛盾 —— 既然后面也要 build,不如提前一次到位)。 + - name: 构建 workspace(typecheck 与单测都依赖 dist) + run: pnpm -r build - run: pnpm typecheck - # 单测 import 的是 dist/(编译产物),必须先构建,否则覆盖率全空 - - run: pnpm -r build - - name: 采集覆盖率 run: | mkdir -p coverage