Skip to content

ci: notify dingtalk on octobus release - #484

Open
chengyang7 wants to merge 3 commits into
mainfrom
codex/octobus-notify-dingtalk-release
Open

ci: notify dingtalk on octobus release#484
chengyang7 wants to merge 3 commits into
mainfrom
codex/octobus-notify-dingtalk-release

Conversation

@chengyang7

Copy link
Copy Markdown
Contributor

Summary

  • Add a release notification workflow for OctoBus v* tag releases.
  • Generate a Chinese changelog from GitHub Release notes when available, falling back to git commit history.
  • Send Markdown notifications to DingTalk targets configured by repository secrets.

Test

  • YAML syntax checked locally.
  • Bash syntax checked locally.

@monkeyscan

monkeyscan Bot commented Jul 15, 2026

Copy link
Copy Markdown

PR Title: ci: notify dingtalk on octobus release

Commit: a1541c9

本次变更新增了一个 GitHub Actions 工作流文件 .github/workflows/notify-dingtalk-release.yml,用于在 CI 工作流成功完成后或手动触发时,将 OctoBus 的 Release Notes 通过 LLM 翻译成简体中文,并发送到钉钉群机器人。

主要设计点:

  • 触发方式:workflow_run(监听 ci 工作流成功完成后的 push 事件且分支/标签以 v 开头)和 workflow_dispatch(手动输入标签)。
  • 权限最小化:仅声明 contents: read
  • 输入校验:对 release_tag 进行 semver 正则校验,验证 git 标签存在性,校验 DINGTALK_TARGETS_JSON 结构。
  • 安全实践:使用 set -euo pipefail;通过 jq --arg 安全构造 JSON;对 webhook、secret、签名后的 URL 显式执行 ::add-mask::;敏感配置(LLM API 密钥、钉钉配置)均来自 secrets。
  • 错误处理:LLM 请求和钉钉请求均设定了超时与重试,失败时累加 failed_count 并在最后统一判断。

整体评估:该工作流编写较为规范,输入校验、secret 脱敏、错误处理等关键安全与正确性措施均已覆盖,未发现引入或暴露的高置信度严重缺陷。

@monkeyscan

monkeyscan Bot commented Jul 20, 2026

Copy link
Copy Markdown

PR Title: ci: notify dingtalk on octobus release

Commit: f6e64bb

本次修改对发布通知工作流进行了三项主要增强:1) 引入 release provenance 校验,通过比对 workflow_run 的 head SHA 与当前 release tag 指向的 SHA,防止 tag 在 CI 完成后被篡改(TOCTOU 防护);2) 新增对 docker.yml 工作流运行状态的轮询等待(最多 30 分钟),确保 Docker 镜像构建成功后再发送通知;3) 重构了 changelog 生成逻辑,新增 format_commit_changelog 函数,从 merge commit 的 body 中提取 PR 标题,使变更日志更友好。此外,当 GitHub Release 页面不存在时,通知中的链接会优雅降级到 compare/tree 链接。整体改动提升了发布流程的安全性和可靠性,实现思路合理。

Comment thread .github/workflows/notify-dingtalk-release.yml
@monkeyscan

monkeyscan Bot commented Jul 20, 2026

Copy link
Copy Markdown

PR Title: ci: notify dingtalk on octobus release

Commit: fcb0c4b

本次修改仅涉及一个文件 .github/workflows/notify-dingtalk-release.yml,在 Docker 工作流轮询的 while 循环中为 gh api 查询和 jq 解析两个步骤增加了显式的错误处理。

具体改动:

  1. gh api 命令替换包裹在 if ! ...; then ... exit 1; fi 中,当 API 请求失败时立即输出 ::error:: 并退出,不再继续空轮询。
  2. jq 解析命令同样包裹在 if ! ...; then ... exit 1; fi 中,当返回的 JSON 无法解析或结构异常时立即报错退出。

这与之前的历史发现(gh api 错误未被处理导致脚本空转 30 分钟)完全一致,属于对该问题的直接修复。set -euo pipefail 不会捕获命令替换内的失败,因此显式的 if ! 检查是必要的且正确的。错误信息使用了 GitHub Actions 的 ::error:: 命令格式,符合工作流规范。

整体评估:改动正确、必要,无引入新的行为回退或可靠性风险。

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.

1 participant