跳转到内容

openlogos impact

告诉 CI 一次 push 是否只改动了 OpenLogos 生命周期记账——例如 openlogos archive 产生的提交、verify 结果或 guard 文件——从而跳过制品的构建与部署。其余一切都报告为「不只是生命周期记账」,交由项目自己判断。

本命令只读(项目内外都不写任何东西),也不是人类确认点。

Terminal window
openlogos impact --base <rev> --head <rev> [--format json]
git diff --no-relative --name-status -z <base> <head> | openlogos impact --stdin [--prefix <dir/>] [--format json]
选项说明
--base <rev> --head <rev>git 区间模式,两者须同时给出。每个修订先被安全解析为 commit ID 再取 diff;空值或以 - 开头的值直接拒绝。
--stdin从 stdin 读取 git diff --no-relative --name-status -z 的字节流,不调用 git。与 --base / --head 互斥。
--prefix <dir/>仅 --stdin 模式:OpenLogos 项目在 monorepo 中的目录(相对 git 顶层)。区间模式下前缀自动探测。
--format json输出 JSON envelope(schema openlogos-change-impact.v1)。

路径按相对 OpenLogos 项目根、按路径段边界匹配:

类别路径含义
lifecyclelogos/.openlogos-guard、logos/changes/**(含 archive/)、logos/resources/verify/**、logos/.runtime/**纯记账,确定不会进入可部署制品
projectlogos/ 下其余一切(规格、logos.config.json 等)由项目自决,OpenLogos 不背书
externallogos/ 之外或项目前缀之外的一切业务代码,OpenLogos 不判断

只有当变更集非空、每条记录都能解析、且每个文件(重命名与复制的新旧两侧)都是 lifecycle 时,lifecycle_only 才为 true。空 diff、未知状态字母或字节流损坏一律得到 lifecycle_only: false 并列出原因——宁可多构建一次。

CI 只应依据 lifecycle_only 做决定。files[]、non_lifecycle_paths、operations、changes、reasons 仅供展示。

退出码含义
0判定完成——无论 lifecycle_only 为 true 还是 false。退出码不编码结论。
1操作错误:IMPACT_INPUT_INVALID(选项组合或取值非法)或 IMPACT_GIT_DIFF_FAILED(git 不可用、不是仓库、修订不存在)
Terminal window
result=$(openlogos impact --base "$BASE_SHA" --head "$HEAD_SHA" --format json)
if [ "$(echo "$result" | jq -r '.data.lifecycle_only')" = "true" ]; then
echo "仅生命周期记账变更——跳过构建与部署"
exit 0
fi

建议在 CI 中固定 CLI 版本,避免判定规则在升级时悄悄变化;契约的破坏性变更会以新的 schema 版本发布。

  • archive — 典型的纯生命周期记账提交来源
  • verify — 结果写在 logos/resources/verify/ 下