Skip to content

ci: add audited Memmy draft release workflow - #199

Merged
syzsunshine219 merged 12 commits into
MemTensor:mainfrom
MLittleprince:codex/release-draft-automation-v2
Aug 12, 2026
Merged

ci: add audited Memmy draft release workflow#199
syzsunshine219 merged 12 commits into
MemTensor:mainfrom
MLittleprince:codex/release-draft-automation-v2

Conversation

@MLittleprince

@MLittleprince MLittleprince commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

目标

MemTensor/memmy-agent 增加新的发版 Draft Release 自动化链路。

这条链路只负责在可信证据基础上创建 GitHub Draft Release,不直接 Publish、不直接发布 npm、不直接修改官网、不触发 production。

核心流程

release/vX.Y.Z 或 vX.Y.Z 分支合入 main
-> 自动触发 GitHub Action
-> full 预检:版本、tag、Release、安装包、checksum、差异 evidence
-> 读取人工 Release Notes 或调用 106 生成 Draft Release Notes
-> 创建 Draft Release
-> 上传安装包、RELEASE_EVIDENCE.json、RELEASE_NOTES.md、QUALITY_REPORT.json、checksums
-> 人工检查 Draft
-> 人工点击 Publish
-> release.published 再通知 106 Doc Agent 更新官网 changelog

Release Notes 生成规则

.github/release-notes/vX.Y.Z.md 不是硬性必填。

优先级是:

  1. 如果仓库中存在 .github/release-notes/vX.Y.Z.md,使用它作为人工草稿。
  2. 如果不存在,调用 106 Doc Agent draft endpoint,基于真实 evidence、历史 Release Notes、官网 changelog 风格生成候选文案。
  3. 106 必须返回 release_notes_mdquality_report,并证明三候选生成/打分;如果缺配置、接口失败、质量报告不合格或 needs_review=true,full 预检直接失败。

也就是说:真实 Memmy 发版不再静默 fallback 到 GitHub generated notes。发版人可以通过修复 106 配置/服务后重跑,或者在发版分支补充经过人工 review 的 .github/release-notes/vX.Y.Z.md 来恢复。

106 生成的是 Draft Release 的正文候选,不会自动提交回 main

安全边界

  • 删除旧的 github-release.yml 自动发布链路,避免误用旧入口。
  • 新工作流默认只做 smoke 级预检;只有 full 通过且 create_draft=true 时才会创建 Draft Release。
  • Action 只创建 Draft Release,不自动 Publish。
  • 如果 Draft Release 创建后安装包或 evidence 上传失败,会自动清理半成品 Draft 和 tag。
  • Publish 之后才会进入 106 官网同步链路。
  • 官网 production 发布仍然必须人工确认。

这次补强

  • smoke 模式现在会提前验证 DOC_AGENT_RELEASE_NOTES_DRAFT_URLDOC_AGENT_RELEASE_NOTES_DRAFT_TOKEN、endpoint 路径、鉴权和 106 服务可达性。
  • smoke 使用故意无效的 JSON payload,只期待 400/422 校验失败;不会调用 LLM,不会创建 Draft/tag/官网 MR。
  • full 模式在 106 draft endpoint 缺失、失败、返回格式错误、没有三候选质量证明或需要人工 review 时直接 fail closed。
  • Verify repository version metadata 只在 full 执行,避免发版分支尚未合 main 前无法提前跑 smoke。
  • 新增 workflow 内嵌 Node 脚本语法测试,避免 YAML heredoc 中隐藏的 JavaScript 语法错误进入主仓。
  • 显式授予 pull-requests: read,避免 full evidence 阶段读取 commit 关联 PR 时因为默认权限收紧失败。

本地验证

  • npm run test:release-workflow:通过,17/17
  • npm run version:check:通过
  • git diff --check:通过
  • 最新 head:63a968d0bd0887269749ab566b58c18d90d3521e

Fork Actions 验证

说明:full 预检需要真实发版版本文件和四个安装包资源就绪后再跑;目前不应在没有发版资产的情况下强行创建 Draft。

v1.0.6 当前注意事项

只读检查显示,主仓 v1.0.6 分支此前还不是可发版状态:

  • 五个版本文件仍为 1.0.5 时,如果 v1.0.6 分支合入 main,新 Action 会因版本门禁失败,不会创建 Draft。
  • OSS/CDN 上 1.0.6 四个安装包未就绪时,full 预检会在安装包校验阶段失败。
  • .github/release-notes/v1.0.6.md 缺失不是阻塞项;缺失时会走 106 生成 Draft Release Notes。

因此建议合并顺序是:先合并本 PR;等 v1.0.6 分支完成版本文件和安装包准备后,再合入 v1.0.6 -> main

需要 MT / 仓库管理员配置

MemTensor/memmy-agent 配置:

  • Actions Secret:DOC_AGENT_RELEASE_NOTES_DRAFT_TOKEN
  • Actions Variable 或 Secret:DOC_AGENT_RELEASE_NOTES_DRAFT_URL
  • Actions Secret:NPM_TOKEN,确认仍可用
  • Environment:release 可用于增加人工审批保护;如果仓库暂不配置 reviewer,本 PR 仍保持 Draft-only 边界

在 GitHub Webhook 配置:

  • Payload URL:http://106.15.248.155:18080/webhooks/github
  • Content type:application/json
  • Secret:与 106 上的 GitHub webhook secret 保持一致
  • Events:只选择 Releases
  • Active:可以先创建但暂不启用;若启用,106 侧 Memmy 三个开关仍为 false,不会自动改官网

106 当前配套状态

所以合并本 PR 后,不会立刻改官网;只有后续管理员配置、dry-run 验证、人工打开开关后,才会进入完整自动化。

@MLittleprince MLittleprince reopened this Aug 11, 2026
@MLittleprince MLittleprince reopened this Aug 12, 2026
@MLittleprince
MLittleprince marked this pull request as ready for review August 12, 2026 08:22
@syzsunshine219
syzsunshine219 merged commit c6cdbf9 into MemTensor:main Aug 12, 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