Skip to content

fix(ci): 修复 ootb 工作流连续失败的 4 处根因#5

Closed
cursor[bot] wants to merge 5 commits into
mainfrom
cursor/bc-e36885d6-9398-4c18-97f6-5e1f8d077bd5-c530
Closed

fix(ci): 修复 ootb 工作流连续失败的 4 处根因#5
cursor[bot] wants to merge 5 commits into
mainfrom
cursor/bc-e36885d6-9398-4c18-97f6-5e1f8d077bd5-c530

Conversation

@cursor

@cursor cursor Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

触发原因

ootb 工作流在最近多次 push(包括 5e6fe15)上持续失败,check-ootb 步骤报 通过 2 / 失败 4。逐项定位后发现 4 个独立的真实 bug(均非环境问题),本 PR 逐一修复:

1. tools/check-catalog.js 用 ESM import 但仓库是 CommonJS

仓库根 package.json 没有 "type": "module",但该脚本用 import ... from。直接 node tools/check-catalog.js(CI 和文档里都是这么调用的)会抛出:

SyntaxError: Cannot use import statement outside a module

改为与 tools/ 目录下其余脚本一致的 CommonJS 写法(require + __dirname),行为不变。

2. check-ootb.js / sim-new-user.js 启动了不存在的 db-server/index.js

真实入口是构建产物 db-server/dist/index.jsdb-server/index.js 从未存在。这导致 spawn 静默失败、健康检查超时,连带拖垃 "db-server 启动 + 模块接口" 和 "sim-new-user 全流程通过" 两项检查。改为指向 dist/index.js,并在未构建时报出清晰的错误提示(提示运行 npm run build),而不是超时。

3. configs-default/db_config.jsonmodulesDir 相对路径写反了

db-server/src/env.tsresolve(PROJECT_ROOT, modulesDir) 解析该字段,PROJECT_ROOT 就是仓库根。旧值 "../modules" 会解析到仓库外的上级目录,导致模块 catalog 接口返回空列表。改为 "modules",正确落在 <root>/modules

4. CI 从未把 configs-default/ 的默认配置复制到 configs/

configs/.gitignore 忽略,actions/checkout 之后该目录根本不存在,check-ootb.js 的第 1 项检查(必备仓库文件齐全)因此必然报缺失 configs/db_config.json 等文件。在 .github/workflows/ootb.yml 里新增一步,在 build 之后、check-ootb 之前,把 configs-default/*.json 复制到 configs/(仅当目标文件不存在时才复制)。

5. (顺手修)package.jsoncheck-catalog 脚本路径多了个前导斜杠

"node /tools/check-catalog.js" 是从文件系统根解析的绝对路径,该文件从未存在于 /tools/。改为仓库相对路径 tools/check-catalog.js

验证

在本地按 CI 相同步骤复现并验证:

npm install
npm run build --workspaces --if-present
# 应用本 PR 中 configs 填充逻辑后
SFMC_ROOT=$PWD node tools/check-ootb.js
# => [ootb] 通过 6 / 失败 0(修复前是 通过 2 / 失败 4)

SFMC_ROOT=$PWD node db-server/dist/index.js &
node tools/smoke-modules.js
# => [smoke] 全部通过

未改动任何运行时业务逻辑(模块系统、SAPI、QQ 桥等),仅修复工具脚本、默认配置和 CI 工作流中的路径/语法错误。

Open in Web View Automation 

cursoragent and others added 5 commits July 21, 2026 17:09
仓库根 package.json 未设置 "type": "module",check-catalog.js 却使用
ESM import 语法,直接 node tools/check-catalog.js 运行会抛出
SyntaxError: Cannot use import statement outside a module。
改为与 tools/ 下其余脚本一致的 CommonJS 写法,并用 __dirname 替代
import.meta.url + fileURLToPath。

Co-authored-by: Shiroha <Tanya7z@users.noreply.github.com>
真实入口是 db-server/dist/index.js(由 tsc 构建产出),db-server/index.js
从未存在过。这导致 CI 中 'db-server 启动 + 模块接口' 与 'sim-new-user
全流程通过' 两项检查必然失败(进程启动失败 → 健康检查超时)。
改为指向 dist/index.js,并在未构建时给出明确报错提示运行 npm run build。

Co-authored-by: Shiroha <Tanya7z@users.noreply.github.com>
modulesDir 由 db-server/src/env.ts 通过 resolve(PROJECT_ROOT, modulesDir)
解析,PROJECT_ROOT 即仓库根(SFMC_ROOT)。旧值 "../modules" 会解析到仓库
外的父目录,导致模块 catalog 接口返回空列表(check-ootb 报 'modules 为
空')。改为 "modules",正确解析到 <root>/modules。

Co-authored-by: Shiroha <Tanya7z@users.noreply.github.com>
"node /tools/check-catalog.js" 是从文件系统根解析的绝对路径,该文件从
未存在于 /tools/,脚本会直接报错。改为仓库相对路径 tools/check-catalog.js。

Co-authored-by: Shiroha <Tanya7z@users.noreply.github.com>
configs/ 已被 .gitignore 忽略,CI checkout 后该目录不存在,
check-ootb.js 第 1 项 '必备仓库文件齐全' 检查
configs/{db_config,bds_updater,qq_config}.json 因此必然失败。
新增一步在构建之后、检查之前,把 configs-default/*.json 复制到
configs/(仅在目标文件不存在时才复制,不覆盖用户自定义配置)。

Co-authored-by: Shiroha <Tanya7z@users.noreply.github.com>
@Tanya7z

Tanya7z commented Jul 22, 2026

Copy link
Copy Markdown
Member

Superseded by main tools rewrite (e6525bb) and PR #17 CI/registry fixes. Closing as duplicate/outdated.

@Tanya7z Tanya7z closed this Jul 22, 2026
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.

2 participants