Commit Graph

2 Commits

Author SHA1 Message Date
547d28d9fa fix(deploy): 站点比对判据被坏 diff 静默架空(假绿灯)
deploy-sdk-site.sh 的 7 处本地比对用的是**裸 `diff`**,而本机 PATH 首位是
/opt/huawei/harmonyos/ohos-sdk/linux/toolchains/diff —— 它对**任何**输入都
返回 0 且无输出。后果不是「偶尔报错」,而是:

    --check 永远打印「✓ 线上与本机源逐字节一致」
    ⇒ 永远判定「无需部署」⇒ 站点改完再也不会被更新,且完全看不出来

实测凭据(本次):site/index.html 本地 f8898cfc…、线上 cc615cfa…,
两边**确实不同**,而 --check 报「逐字节一致」;用两个必然不同的小文件
(A / B)验证,坏 diff 退出码 0、/usr/bin/diff 退出码 1。

修法(两层):
  1. 钉绝对路径 DIFF=/usr/bin/diff,7 处本地比对全部改用它;
  2. **启动自检**:拿两个必然不同的输入验证一次,若它仍报「无差异」
     就直接退出,而不是继续拿一个坏判据去做部署决定。
     (同源的教训:「探针不红先怀疑探针」——判据本身坏了,
       它给出的「没问题」毫无意义。)

远端那一处保持 `diff` 并在旁边写明理由:远端是健康的 /usr/bin/diff,
不在本机这个坏 PATH 的影响范围内。

顺带补两个选项:
  --introduce         只部署 introduce 站。改 site/ 时用 —— 原 do_deploy 会先把
                      SDK 文档站重建一遍(apidoc + mkdocs,106 文件),而 site/
                      的改动跟它毫无关系,既慢又把没必要碰的线上站卷进变更面。
  --rollback-introduce 对称的回滚入口(原先只有 sdk 站能回滚)。

验证:--check 现在能正确报出差异(附带两份 md5 对照);--introduce 走完
「先比对→打包→备份→原子替换→回验」,线上 md5 与本地一致,http 200。
2026-09-29 17:23:17 +08:00
512effa1ad feat(deploy): 站点部署流水线(SDK 文档站 + introduce)
`deploy-sdk-site.sh` 覆盖两个静态站,与 homed / waiter 是独立部署单元:

- SDK 文档站:本地 `third_party/homeagent-sdk/site_build/` → 106 的
  `/vol1/docker/navi-data/sites/sdk`
- introduce:本地 `site/`(零构建,源即产物)→ `sites/introduce`

用法:`--check`(只核对差异)/ 默认(构建+部署+验证)/ `--rollback <备份名>`。
`--check` 逐字节比对,2026-09-27 核实两站线上与本地产物**完全一致**。

## 更新了一处会误导的注释

脚本原注释写「设备网关白名单只放行 ls/stat/find/cat,打不了包」。
那是 waiter 白名单**硬编码 18 条**时的状况;2026-09-27 部署 1911575 后
106 已扩到 **22 条**(含 find/grep/sed/sort/tr/wc/head/tail/stat/file)。

**结论(打不了包)不变,但理由已变** —— 22 条里**没有 `tar`**,
有 `sed` 也不能打包。照旧文字理解会以为白名单只有 4 条。

## docs/zh/deploy-runbook.md 补 §5 站点章节

- 链路:`.60` nginx stream 按 ssl_preread SNI → 106:3080 → navi 容器内 nginx
  (**不是** portal-nginx,那个已 Exited 两周)
- 坑①:构建**必须**走 `tools/apidoc/build.sh`。裸跑 `mkdocs build` 会丢掉
  整个 `api/*.md` 和 `llms.txt` —— 而 `llms.txt` 正是给 agent 直读的入口。
  正确产物 106 个文件,裸跑只有 78 个
- 坑②:打包不能走设备网关(无 `tar`),必须 SSH 直连
- ★ **新增文档后必须更新 `mkdocs.yml` 的 nav** —— 没登记会被 mkdocs 明确
  警告 `not included in the nav configuration`,等于写完了但站点里不可达
- 验证要打**线上**而不是只看本地产物
- 回滚点与失败版本保留策略

写文档时我一度把 introduce 的域名写成「另见 §5.2」,但 §5.2 只讲了 SDK 的
SNI 链路 —— 已改为只写"同台同目录",并补上脚本里有依据的"故意不带 README.md"。
2026-09-27 23:00:04 +08:00