Skip to content

A GitHub Action that summarizes daily commits with AI and sends the report to your team via configurable webhooks.

License

Notifications You must be signed in to change notification settings

nanbingxyz/daily-commit-summarizer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Daily Commit Summarizer

cover

English

📌 使用场景

软件团队往往希望快速了解一天内代码库里发生了什么,而不是翻遍冗长的 git log 或大型 PR。

这个项目提供了一个 GitHub Actions 工作流 和 TypeScript 脚本,实现以下功能:

  1. 每天北京时间 18:00(UTC+8)自动运行。
  2. 收集当天在所有远程分支上的提交。
  3. 借助 LLM(例如 OpenAI GPT-4.1-mini):
    • 将大型 diff 拆分为可管理的片段。
    • 为每个提交单独生成摘要(包含变更内容、影响、风险、测试建议)。
    • 最后合并成一份每日总结报告。
  4. 通过 Webhook 将总结发送到飞书群聊。

这样,团队每天都能收到一份简明、人类可读的变更日志,提高透明度,减少代码审查的时间成本。


🚀 功能特点

  1. 跨分支覆盖:支持分析所有 origin/* 分支上的提交。
  2. 大 diff 切分:安全处理大规模提交,避免超出 LLM 上下文限制。
  3. 多层次总结:单个 diff 片段 → 单次提交 → 每日汇总。
  4. 飞书通知:每日简报自动推送至群聊。
  5. 高度可配置:可调整模型、分支过滤、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:

  1. OPENAI_API_KEY → OpenAI 或兼容 LLM 服务的 API Key
  2. OPENAI_BASE_URL → LLM 服务的基础 URL
  3. LARK_WEBHOOK_URL → 飞书群自定义机器人 Webhook 地址
  4. REPO → 你的 GitHub 仓库名

4. 安装依赖

npm install


📄 脚本说明

scripts/daily-summary.ts 是核心逻辑:

  1. 获取所有远程分支 (git fetch --all)。
  2. 收集当天的提交 (git log --since "midnight" --until "now" --all)。
  3. 生成 diff 并进行切分。
  4. 调用 LLM API,生成结构化的提交摘要。
  5. 合并为当日报告。
  6. 通过 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

issue2task —— 一个 Python 工具,可以把冗长的 GitHub Issue(含全部评论)通过 AI 总结为简洁、可执行的任务,
并可自动添加到 GitHub Project v2 看板中。
非常适合将复杂的讨论转化为清晰的下一步行动。

About

A GitHub Action that summarizes daily commits with AI and sends the report to your team via configurable webhooks.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published