Skip to content

ci(actions): 同步更新日志检查与署名工作流 - #636

Merged
HarcoChen merged 3 commits into
AUTO-MAS-Project:mainfrom
HarcoChen:codex/migrate-main-ci
Sep 9, 2026
Merged

ci(actions): 同步更新日志检查与署名工作流#636
HarcoChen merged 3 commits into
AUTO-MAS-Project:mainfrom
HarcoChen:codex/migrate-main-ci

Conversation

@HarcoChen

@HarcoChen HarcoChen commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Sourcery 摘要

统一更新日志、版本信息校验与贡献者署名流程,确保 PR 变更能够自动登记并保持相关生成物一致。

新功能:

  • 建立以 CHANGELOG.md 为唯一来源的更新日志与版本信息同步工具,支持同步、校验和查询当前版本。
  • 新增 PR 更新日志检查工作流,校验日志格式、版本生成物一致性并要求每个 PR 修改 CHANGELOG.md。

错误修复:

  • 修正贡献者署名工作流,使其能够为 PR 作者及共同提交者补充更新日志署名。

改进:

  • 将版本信息生成与更新日志校验统一到 CHANGELOG.md,并移除旧的 version.json 检查工作流。
  • 更新应用构建使用的 Runtime 版本。

持续集成:

  • 同步更新版本信息与贡献者署名工作流,并在署名后重新生成所有版本相关文件。

文档:

  • 引入并整理项目更新日志,明确更新日志格式及版本信息维护规则。
Original summary in English

Sourcery 摘要

统一更新日志、版本信息校验和贡献者署名流程,确保 PR 变更及其生成物保持一致。

新功能:

  • 建立以 CHANGELOG.md 为唯一手写来源的更新日志与版本信息同步工具,支持同步、校验和查询当前版本。
  • 新增 PR 更新日志检查工作流,要求每个 PR 修改 CHANGELOG.md 并验证日志及版本生成物一致性。

错误修复:

  • 修正贡献者署名流程,为 PR 作者和共同提交者补充更新日志署名并过滤自动化账号。

增强功能:

  • 统一由 CHANGELOG.md 管理版本信息,移除旧的 version.json 检查流程。
  • 更新应用构建所使用的 Runtime 版本。

持续集成(CI):

  • 同步更新日志检查、版本信息生成和贡献者署名工作流,确保署名后重新生成并提交相关版本文件。

文档:

  • 新增并整理遵循 Keep a Changelog 格式的项目更新日志及维护说明。
Original summary in English

Sourcery 摘要

围绕 CHANGELOG.md 统一发布说明和版本管理,同时通过 CI 强制执行一致性并标注贡献者。

新功能:

  • 添加基于 CHANGELOG.md 的工具,用于同步、验证和查询项目版本信息。
  • 添加 CI 检查,强制执行变更日志格式、生成版本一致性,以及每个拉取请求必须包含且仅包含一条变更日志条目。

错误修复:

  • 更新贡献者署名自动化流程,以包含拉取请求作者和共同作者,同时过滤自动化账号。

增强功能:

  • CHANGELOG.md 设为发布说明和版本信息的唯一手动维护来源,替代旧版 version.json 验证工作流。
  • 将应用构建运行时更新至 v0.1.4。

CI:

  • 同步变更日志验证、版本生成和贡献者署名工作流,包括在署名后重新生成版本构件。

文档:

  • 添加并整理采用 Keep a Changelog 格式的项目变更日志,并提供维护指南。

测试:

  • 为变更日志解析、验证、渲染、版本生成和拉取请求条目规则添加回归测试覆盖。

杂项:

  • 更新贡献者指南和代理技能规则,要求每个拉取请求包含一条 CHANGELOG.md 条目,并确保生成的版本文件保持同步。
Original summary in English

Summary by Sourcery

Standardize release-note and version management around CHANGELOG.md while enforcing consistency and contributor attribution through CI.

New Features:

  • Add a CHANGELOG.md-based tool for synchronizing, validating, and querying project version information.
  • Add CI checks that enforce changelog formatting, generated version consistency, and exactly one changelog entry per pull request.

Bug Fixes:

  • Update contributor attribution automation to include pull request authors and co-authors while filtering automated accounts.

Enhancements:

  • Make CHANGELOG.md the sole handwritten source for release notes and versions, replacing the legacy version.json validation workflow.
  • Update the application build runtime to v0.1.4.

CI:

  • Synchronize changelog validation, version generation, and contributor attribution workflows, including regeneration of version artifacts after attribution.

Documentation:

  • Add and organize a Keep a Changelog-formatted project changelog with maintenance guidance.

Tests:

  • Add regression coverage for changelog parsing, validation, rendering, version generation, and pull request entry rules.

Chores:

  • Update contributor guidance and agent skill rules to require one CHANGELOG.md entry per pull request and synchronized generated version files.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @HarcoChen, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 3 days by commenting @sourcery-ai review. Upgrade to get a review now.

@sourcery-ai

sourcery-ai Bot commented Sep 9, 2026

Copy link
Copy Markdown

审查者指南

本 PR 将 CHANGELOG.md 单源化,新增统一的解析、版本同步与一致性检查机制,并以新的 CI 工作流强制每个 PR 更新日志;合并后工作流会根据 PR 及共同作者自动补充条目署名,同时更新构建使用的 Runtime 版本。

PR 更新日志验证与贡献者署名时序图

sequenceDiagram
    participant PR as Pull Request
    participant Check as check-changelog
    participant Script as changelog.py
    participant Files as PR 文件列表
    participant Merge as append-version-contributor
    participant GitHub as GitHub API
    participant Dev as dev 分支

    PR->>Check: opened / synchronize / reopened
    Check->>Script: check
    Script-->>Check: 格式与生成物一致性结果
    Check->>Files: listFiles
    Files-->>Check: PR 文件列表
    Check-->>PR: CHANGELOG.md 检查通过或失败

    Merge->>GitHub: gh pr view --json author,commits
    GitHub-->>Merge: PR 作者与共同作者
    Merge->>Script: parse_changelog(base 与 head)
    Script-->>Merge: PR 新增条目
    Merge->>Merge: 为新增条目补充去重署名
    Merge->>Script: render_changelog
    Script-->>Merge: 更新 CHANGELOG.md
    Merge->>Script: sync
    Script-->>Merge: 更新版本生成物
    Merge->>Dev: 提交并推送署名与生成物
Loading

文件级变更

变更 详情 文件
将 CHANGELOG.md 设为更新日志和版本号的唯一手写来源,并新增解析、规范化及生成版本信息的统一脚本。
  • 解析版本段、分类和条目,校验格式、版本号及重复内容。
  • 同步或检查 CHANGELOG.md、res/version.json 及四处项目版本号,并生成版本对比链接。
  • 支持从预发布语义版本转换为 PEP 440 版本格式。
CHANGELOG.md
scripts/changelog.py
res/version.json
新增 PR 更新日志检查工作流,统一校验日志格式、生成物一致性和 PR 变更要求。
  • 在 Python 3.12 环境执行 changelog check。
  • 通过 GitHub API 检查每个 PR 是否修改 CHANGELOG.md。
  • 删除原有 version.json 专用检查工作流。
.github/workflows/check-changelog.yml
.github/workflows/check-version-json.yml
改造合并后的贡献者署名工作流,使其基于 CHANGELOG.md 差异为 PR 及共同作者补充署名。
  • 读取 base/head 的 CHANGELOG.md 并比较新增条目。
  • 通过 gh CLI 获取 PR 作者和提交共同作者,去重后追加 GitHub 署名。
  • 署名变更后重新同步版本生成物,并提交所有可能被同步的文件。
.github/workflows/append-version-contributor.yml
更新构建流程所使用的 Runtime 版本。
  • 将构建工作流的 Runtime 版本从 v0.1.3 更新至 v0.1.4。
.github/workflows/build-app.yml

可能关联的 issue


提示与命令

与 Sourcery 交互

  • 触发新的审查: 在拉取请求中评论 @sourcery-ai review
  • 继续讨论: 直接回复 Sourcery 的审查评论。
  • 根据审查评论生成 GitHub issue: 回复审查评论,请 Sourcery 根据该评论创建 issue。你也可以使用 @sourcery-ai issue 回复审查评论,以根据该评论创建 issue。
  • 生成拉取请求标题: 在拉取请求标题中的任意位置写入 @sourcery-ai,即可随时生成标题。你也可以在拉取请求中评论 @sourcery-ai title,以随时生成或重新生成标题。
  • 生成拉取请求摘要: 在拉取请求正文中的任意位置写入 @sourcery-ai summary,即可在指定位置随时生成 PR 摘要。你也可以在拉取请求中评论 @sourcery-ai summary,以随时生成或重新生成摘要。
  • 生成审查者指南: 在拉取请求中评论 @sourcery-ai guide,即可随时生成或重新生成审查者指南。
  • 解决所有 Sourcery 评论: 在拉取请求中评论 @sourcery-ai resolve,即可解决所有 Sourcery 评论。如果你已经处理完所有评论且不想再看到它们,此功能会很有用。
  • 忽略所有 Sourcery 审查: 在拉取请求中评论 @sourcery-ai dismiss,即可忽略所有现有的 Sourcery 审查。如果你想从新的审查开始,这尤其有用——别忘了评论 @sourcery-ai review 以触发新的审查!

自定义你的体验

访问你的控制面板,以便:

  • 启用或禁用审查功能,例如 Sourcery 生成的拉取请求摘要、审查者指南等。
  • 更改审查语言。
  • 添加、删除或编辑自定义审查说明。
  • 调整其他审查设置。

获取帮助

Original review guide in English

Reviewer's Guide

本 PR 将 CHANGELOG.md 单源化,新增统一的解析、版本同步与一致性检查机制,并以新的 CI 工作流强制每个 PR 更新日志;合并后工作流会根据 PR 及共同作者自动补充条目署名,同时更新构建使用的 Runtime 版本。

Sequence diagram for PR changelog validation and contributor signing

sequenceDiagram
    participant PR as Pull Request
    participant Check as check-changelog
    participant Script as changelog.py
    participant Files as PR 文件列表
    participant Merge as append-version-contributor
    participant GitHub as GitHub API
    participant Dev as dev 分支

    PR->>Check: opened / synchronize / reopened
    Check->>Script: check
    Script-->>Check: 格式与生成物一致性结果
    Check->>Files: listFiles
    Files-->>Check: PR 文件列表
    Check-->>PR: CHANGELOG.md 检查通过或失败

    Merge->>GitHub: gh pr view --json author,commits
    GitHub-->>Merge: PR 作者与共同作者
    Merge->>Script: parse_changelog(base 与 head)
    Script-->>Merge: PR 新增条目
    Merge->>Merge: 为新增条目补充去重署名
    Merge->>Script: render_changelog
    Script-->>Merge: 更新 CHANGELOG.md
    Merge->>Script: sync
    Script-->>Merge: 更新版本生成物
    Merge->>Dev: 提交并推送署名与生成物
Loading

File-Level Changes

Change Details Files
将 CHANGELOG.md 设为更新日志和版本号的唯一手写来源,并新增解析、规范化及生成版本信息的统一脚本。
  • 解析版本段、分类和条目,校验格式、版本号及重复内容。
  • 同步或检查 CHANGELOG.md、res/version.json 及四处项目版本号,并生成版本对比链接。
  • 支持从预发布语义版本转换为 PEP 440 版本格式。
CHANGELOG.md
scripts/changelog.py
res/version.json
新增 PR 更新日志检查工作流,统一校验日志格式、生成物一致性和 PR 变更要求。
  • 在 Python 3.12 环境执行 changelog check。
  • 通过 GitHub API 检查每个 PR 是否修改 CHANGELOG.md。
  • 删除原有 version.json 专用检查工作流。
.github/workflows/check-changelog.yml
.github/workflows/check-version-json.yml
改造合并后的贡献者署名工作流,使其基于 CHANGELOG.md 差异为 PR 及共同作者补充署名。
  • 读取 base/head 的 CHANGELOG.md 并比较新增条目。
  • 通过 gh CLI 获取 PR 作者和提交共同作者,去重后追加 GitHub 署名。
  • 署名变更后重新同步版本生成物,并提交所有可能被同步的文件。
.github/workflows/append-version-contributor.yml
更新构建流程所使用的 Runtime 版本。
  • 将构建工作流的 Runtime 版本从 v0.1.3 更新至 v0.1.4。
.github/workflows/build-app.yml

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@qiyinxi

qiyinxi commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

共同署名这里建议改回只签 PR 作者。gh pr view --json commitsauthors 会把 Co-authored-by trailer 算进去,而 noreply@anthropic.com 解析出的是真实账号 claude

$ gh pr view 635 --json commits -q '.commits[].authors[].login'
qiyinxi
claude

最近 5 个已合并 PR 里有 3 个会中招(#635#615#610),合并后条目会挂上 by [@claude](https://github.com/claude),而这行字是直接显示在应用内更新提示里的。#615 还会额外签上分支里夹带提交的 @AthenaHibou

只签 PR 作者的话正好和 dev 上现在那份一致,也省得 main 与 dev 的机器人又不一样。

另外 CHANGELOG.md / res/version.json 看起来是从 main 自己的旧 version.json 重新迁的:beta.3 段 94 条,dev 现在是 122 条,还少了 破坏性变更本次亮点 两个分类。main 的五处版本号已经是 v5.5.0-beta.3,直接换成 dev 上那两份 changelog.py check 一样能过,可以省掉下次 dev→main 合并时的冲突。

@HarcoChen

HarcoChen commented Sep 9, 2026 via email

Copy link
Copy Markdown
Contributor Author

@HarcoChen

Copy link
Copy Markdown
Contributor Author

@qiyinxi review

@qiyinxi

qiyinxi commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

第四轮(3653b7b0)。上一版 8e...→本版重写了整个署名流程,重新审了一遍。

必修

  • .github/workflows/append-version-contributor.yml:59-65 导入的是 devscripts/changelog.py:51 检出 origin/dev:59 sys.path.insert(0, "scripts")),但 validate_pr_changelogread_changelog_ref 在 dev 上不存在——git grep -n "def validate_pr_changelog\|def read_changelog_ref" upstream/dev -- scripts/changelog.py 零命中,本 PR 的新脚本只进 main,也没有别的开放 PR 往 dev 送它。合并后每个 dev PR 关闭时都是 AttributeErrorset -euo pipefail 下三轮重试全败、exit 1,一条署名都写不进去。要么同一份 scripts/changelog.py 先进 dev,要么这一步改成从 main 取脚本。
  • append-version-contributor.yml:80-82 commits[].authors 含 merge commit 的作者,会把「往 PR 分支合 dev 解冲突的人」当成共同作者。gh pr view 615 --json commits 返回三条,其中两条是 AthenaHibou 的 Merge remote-tracking branch 'upstream/dev' into pr-615-...parents=2),按现逻辑 fix(ws): BetterGI 与 ZZZ-OD 迁移到 Publisher 出口 #615 的条目会署成 by @qiyinxi by @AthenaHiboufeat(maa): 计划表模式下不再强制关闭库存保持 #585f09d4c0 Merge branch 'dev' into ... 同理会带上 @HarcoChen。建议按 parents.totalCount > 1 跳过(工作流没 fetch PR 分支,本地没有这些 object,得走 GraphQL 拿 parents)。
  • append-version-contributor.yml:62-65validate_pr_changelog 没有 try/except,PR 只要不满足「恰好新增 1 条、不改旧条目」,整个 job 就 exit 1。实测:把 feat(maa): 计划表模式下不再强制关闭库存保持 #585base.shamerge_commit_sha 两份 CHANGELOG.md 喂给本 PR 的 validate_pr_changelog,报 PR 不能删除或修改已有的更新日志条目——因为 feat(maa): 计划表模式下不再强制关闭库存保持 #585 里把一条旧条目的署名从 @qiyinxi 改成了 @Lance0174。这类订正是实际会做的操作,旧版对解析失败是跳过不阻断,现在会连带把本次署名也丢掉。

建议修

  • main 上这份 check-changelog.yml:56 没有 branches 过滤,会在 base=main 的 PR 上跑,而 base=main 实际只有 dev→main 定期同步 PR(如 chore: 定期同步代码 #595)。changelog.py:562-574 的迁移回退只在 base 没有 CHANGELOG.md 时生效,本 PR 合并后 main 就有了,之后走 validate_pr_changelog。实测 validate_pr_changelog(本 PR 的 CHANGELOG.md, dev 当前 CHANGELOG.md)PR 不能删除或修改已有的更新日志条目。不是 required check、不阻塞合并,但以后每次同步都会挂个红叉。

提一句

  • scripts/changelog.py:264-268 要求文件顶部第一个版本必须标 未发布。发版时把 未发布 换成日期的那一提交里必须同时补上下一版的空 未发布 段,否则之后 sync / check / check-pr 全报错。

核过没问题的

静态审 + 用本 PR 的 changelog.py 在本地对 #585/#626 的真实 base/merge 复算了一遍,工作流本身没实跑。

@HarcoChen
HarcoChen merged commit 5476e75 into AUTO-MAS-Project:main Sep 9, 2026
3 checks passed
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