fix: --encrypt/--license 构建链修复(网关收集项、[license] 注入点、契约测试)

- config.toml:--encrypt 会先 PyArmor 混淆 main.py / server.py,PyInstaller 静态
  分析跟不到里面的 `from chongming.app import app`,网关包整个漏收(打包"成功"、
  产物启动即报 No module named 'chongming')—— 收集清单显式列出 chongming /
  chongming.app 等入口包,注释也从"静态分析可跟到"改准;
- public/config.toml:补 [license] 段(public_key 留空),--license 的注入点,
  缺了会在 prepare 阶段报"未找到 [license] 段的 public_key";
- README:补 --license 的公钥前置条件(keygen → license_public.key 或环境变量);
- test_build_flags.py:4 条契约守卫 —— 真实模板/骨架可注入 [license]、收集清单含
  网关入口包、加密包密钥写进包内且按运行端口径(get_key())可导入。此前用例都
  自造 config.toml,这两类模板漂移测不出来。

实测(device-hub):修复前 --encrypt --license 产物启动报错;修复后网关启动、
授权校验通过、插件从加密 mbank 正常加载、HTTP 正常返回。
This commit is contained in:
2026-10-14 15:29:29 +08:00
parent 774f44f830
commit ac8b563c7d
4 changed files with 77 additions and 3 deletions
+6
View File
@@ -331,6 +331,12 @@ exe 内的依赖来自三处,新增第三方包时对号入座:
`--encrypt` / `--license` 默认**都关**(不加参数即内部调试产物:明文模块、不校验授权);
对外分发必须同时加这两个开关。
`--license` 需要厂商授权公钥(未提供直接构建失败,避免打出名不副实的"授权版")。首次:
`uv run chongming-license keygen -o license_private.pem` 生成密钥对(一次性;私钥离线保管,
绝不进仓库/产物),把输出的公钥写入根目录 `license_public.key`,或用
`CHONGMING_LICENSE_PUBKEY=<base64 公钥>` / `CHONGMING_LICENSE_PUBKEY_FILE=<文件路径>` 指定。
构建会把公钥注入产物的 `[license] public_key` 并烘焙进代码(现场改配置/环境变量关不掉强制校验)。
### 进程插件打包与容器部署
```bash