|
|
6d7de92bbd
|
ci: 建立 GitHub Actions 流水线(六个 job,全部命令已本地实测)
## 为什么现在做
这次排查「QQ 收不到回复」花了大半程才定位到根因,途中我犯了两类错:
先断言「提示词没写 output_send 规则」(实际 buildSystemPrompt:48-52 写了),
又断言「适配器丢了内容」(实际两版等价、直连上游正常)。
两次都是**在无自动化判据的情况下凭局部证据外推**。
仓库已有 60 个 Go 包、`go build ./...` 仅 2.2 秒,成本极低却无人强制跑。
AtomGit 停用流水线后更无兜底,故迁到 GitHub 补齐。
## 设计原则:CI 里每条命令都是本地已实测通过的
不写「可能有用先试试」的步骤 —— 未验证的 CI 步骤会把假红灯变成常态,
最后所有人都学会忽略它。本文六个 job 的每条命令都本地跑过:
go build ./... ✓
go vet ./... ✓
go test ./... -count=1 ✓(干净克隆亦通过)
make check-client-versions ✓
go test -race core + waiter ✓
waiter/initconfig/mock-server 交叉 ✓(5 平台)
npm test(cmd/gui) ✓
make check-csrc ✓(告警/ABI/ASan+UBSan/跨架构)
## 六个 job
| job | 覆盖 |
|-------|----------------------------------------------------------|
| go | build + vet + test + **跨平台客户端版本一致性** |
| race | 并发核心的竞态检测 |
| cross | linux/darwin/windows × amd64/arm64(仅可纯交叉的 3 个 cmd)|
| gui | Electron 仓的 Node 测试 |
| csrc | C 基础设施门禁 |
| docs | 站点配置可解析 |
## 关键事实(都由实测确立,不是推断)
1. **只有 waiter/initconfig/mock-server 能纯交叉编译**。homed、memgc、
homed-kb-migrate 依赖 cgo(gojieba / onnx),必须原生构建 ⇒ 不进 cross matrix。
2. **CGO 必须为 1**:gojieba 需要 cgo,`CGO_ENABLED=0` 下 internal/memory
直接编译失败(实测)。
3. **`go test ./...` 不会碰到 cmd/gui**。该目录是纯 Electron(0 个 .go、
无 go.mod),`./...` 只匹配含 Go 文件的包;只有显式 `go test ./cmd/gui`
才报 "no Go files"。这不是缺陷,是 Go 的包匹配语义 —— 之前把它当
[setup failed] 是误读。
4. **cmd/gui 的 npm test 零依赖**:三个 .mjs 只 import node: 内置模块
(fs/url/path/vm)⇒ 不需要 npm ci、不需要 electron,秒级完成。
5. **测试自足,CI 上不会因缺本地服务而红**:webui 测试用 httptest 与
`127.0.0.1:0`,真实 LLM 测试带 t.Skip 守卫。
6. **action 版本已核实存在**:checkout/setup-go/setup-node/setup-python 均用
v7(经 GitHub API 逐个确认 tag 存在,避免「版本不存在 ⇒ 立刻红」)。
## 明确不进 CI(依赖真机/密钥/内网,否则只会变 flaky 噪音)
deploy-*.sh、waiter 真机(192.168.2.x)、`npm run test-live`(需真 Electron
+ Xvfb + 真后端)、scripts/kernel-stress/*、需 DEEPSEEK_API_KEY 的真实 LLM 测试。
|
2026-09-29 10:23:21 +08:00 |
|