软件团队往往希望快速了解一天内代码库里发生了什么,而不是翻遍冗长的 git log 或大型 PR。
这个项目提供了一个 GitHub Actions 工作流 和 TypeScript 脚本,实现以下功能:
- 每天北京时间 18:00(UTC+8)自动运行。
- 收集当天在所有远程分支上的提交。
- 借助 LLM(例如 OpenAI GPT-4.1-mini):
- 将大型 diff 拆分为可管理的片段。
- 为每个提交单独生成摘要(包含变更内容、影响、风险、测试建议)。
- 最后合并成一份每日总结报告。
- 通过 Webhook 将总结发送到飞书群聊。
这样,团队每天都能收到一份简明、人类可读的变更日志,提高透明度,减少代码审查的时间成本。
- 跨分支覆盖:支持分析所有 origin/* 分支上的提交。
- 大 diff 切分:安全处理大规模提交,避免超出 LLM 上下文限制。
- 多层次总结:单个 diff 片段 → 单次提交 → 每日汇总。
- 飞书通知:每日简报自动推送至群聊。
- 高度可配置:可调整模型、分支过滤、diff 拆分大小等参数。
1. 克隆或 Fork 仓库
git clone https://github.com/nanbingxyz/daily-commit-summarizer.git
cd daily-commit-summarizer
2. 添加 GitHub Actions 工作流
在 .github/workflows/daily-summary.yml 中加入:
name: Daily LLM Commit Summary
on:
schedule:
- cron: "0 10 * * *" # 10:00 UTC = 18:00 北京时间
workflow_dispatch: {} # 手动触发
jobs:
run:
runs-on: ubuntu-latest
env:
TZ: Asia/Shanghai
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
run: |
npm install
- name: Run summarizer
env:
OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
LARK_WEBHOOK_URL: ${{ secrets.LARK_WEBHOOK_URL }}
REPO: ${{ secrets.REPO }}
run: |
npx tsx scripts/daily-summary.ts
3. 添加仓库密钥
进入 Repo → Settings → Secrets and variables → Actions → New repository secret:
- OPENAI_API_KEY → OpenAI 或兼容 LLM 服务的 API Key
- OPENAI_BASE_URL → LLM 服务的基础 URL
- LARK_WEBHOOK_URL → 飞书群自定义机器人 Webhook 地址
- REPO → 你的 GitHub 仓库名
4. 安装依赖
npm install
scripts/daily-summary.ts 是核心逻辑:
- 获取所有远程分支 (git fetch --all)。
- 收集当天的提交 (git log --since "midnight" --until "now" --all)。
- 生成 diff 并进行切分。
- 调用 LLM API,生成结构化的提交摘要。
- 合并为当日报告。
- 通过 Webhook 推送至飞书。
# 2025-08-22 每日提交报告 (your-repo)
1. 总览
- 修复登录流程中的 bug
- 新增发票相关 API
- 调整开发流水线配置
2. 按分支的主要改动
- origin/feature/auth: 新增 JWT 校验中间件
- origin/hotfix/payment: 修复货币转换的舍入错误
3. 风险与回滚
- 鉴权中间件可能影响旧客户端 → 建议在预发环境验证
- 支付修复涉及公共工具 → 需要回归测试
4. 测试建议
- 增加 JWT 过期的单元测试
- 新增发票创建 API 的集成测试
5. 其他说明
- 忽略了 lockfile 更新
变量名 | 默认 | 说明 |
---|---|---|
MODEL_NAME | gpt-4.1-mini | 使用的 LLM 模型 |
PER_BRANCH_LIMIT | 200 | 每个分支每日最多分析的提交数 |
DIFF_CHUNK_MAX_CHARS | 80000 | 每次请求最大 diff 字符数 |
TZ | Asia/Shanghai | 定义 “今天” 的时区 |
- 飞书纯文本消息不支持 Markdown。
- 如果需要富文本格式(标题、链接、列表等),请考虑在 postToLark() 中使用 msg_type: post。
- 私有仓库需注意:不要将代码上传至第三方 LLM 服务,除非符合公司合规要求。可替换为内部 LLM 网关。
- 由于本人使用的是 Azure OpenAI, 请求路径与 OpenAI API 的不同,若使用其他服务请自行调整。
欢迎贡献!一些扩展方向:
- 增加 Slack / Discord / MS Teams 的适配器。
- 除了每日摘要,还支持在 PR 中直接生成评论。
- 输出扩展:比如展示修改文件数、代码行数统计等。
MIT License,自行承担使用风险。
issue2task —— 一个 Python 工具,可以把冗长的 GitHub Issue(含全部评论)通过 AI 总结为简洁、可执行的任务,
并可自动添加到 GitHub Project v2 看板中。
非常适合将复杂的讨论转化为清晰的下一步行动。