{"id":30571616,"url":"https://github.com/nanbingxyz/daily-commit-summarizer","last_synced_at":"2025-08-30T05:34:06.437Z","repository":{"id":311113523,"uuid":"1042501892","full_name":"nanbingxyz/daily-commit-summarizer","owner":"nanbingxyz","description":"A GitHub Action that summarizes daily commits with AI and sends the report to your team via configurable webhooks.","archived":false,"fork":false,"pushed_at":"2025-08-22T07:48:20.000Z","size":452,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-22T08:33:58.421Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nanbingxyz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-22T05:51:01.000Z","updated_at":"2025-08-22T08:30:37.000Z","dependencies_parsed_at":"2025-08-22T08:34:20.314Z","dependency_job_id":"ff20e30f-7d63-4ff8-bec6-8ed74b35e233","html_url":"https://github.com/nanbingxyz/daily-commit-summarizer","commit_stats":null,"previous_names":["nanbingxyz/daily-commit-summarizer"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/nanbingxyz/daily-commit-summarizer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanbingxyz%2Fdaily-commit-summarizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanbingxyz%2Fdaily-commit-summarizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanbingxyz%2Fdaily-commit-summarizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanbingxyz%2Fdaily-commit-summarizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nanbingxyz","download_url":"https://codeload.github.com/nanbingxyz/daily-commit-summarizer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanbingxyz%2Fdaily-commit-summarizer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272556982,"owners_count":24955148,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-28T02:00:10.768Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-28T21:02:59.675Z","updated_at":"2025-08-30T05:34:06.419Z","avatar_url":"https://github.com/nanbingxyz.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# Daily Commit Summarizer\n\n![cover](./cover.png)\n\n[English](./README_en.md)\n\n## 📌 使用场景\n\n软件团队往往希望快速了解一天内代码库里发生了什么，而不是翻遍冗长的 git log 或大型 PR。\n\n这个项目提供了一个 GitHub Actions 工作流 和 TypeScript 脚本，实现以下功能：\n1. 每天北京时间 18:00（UTC+8）自动运行。\n2. 收集当天在所有远程分支上的提交。\n3. 借助 LLM（例如 OpenAI GPT-4.1-mini）：\n\t* 将大型 diff 拆分为可管理的片段。\n\t* 为每个提交单独生成摘要（包含变更内容、影响、风险、测试建议）。\n\t* 最后合并成一份每日总结报告。\n4. 通过 Webhook 将总结发送到飞书群聊。\n\n这样，团队每天都能收到一份简明、人类可读的变更日志，提高透明度，减少代码审查的时间成本。\n\n\u003cbr/\u003e\n\n## 🚀 功能特点\n1. 跨分支覆盖：支持分析所有 origin/* 分支上的提交。\n2. 大 diff 切分：安全处理大规模提交，避免超出 LLM 上下文限制。\n3. 多层次总结：单个 diff 片段 → 单次提交 → 每日汇总。\n4. 飞书通知：每日简报自动推送至群聊。\n5. 高度可配置：可调整模型、分支过滤、diff 拆分大小等参数。\n\n\u003cbr/\u003e\n\n## ⚙️ 使用方法\n\n**1. 克隆或 Fork 仓库**\n\n```bash\ngit clone https://github.com/nanbingxyz/daily-commit-summarizer.git\ncd daily-commit-summarizer\n```\n\n**2. 添加 GitHub Actions 工作流**\n\n在 .github/workflows/daily-summary.yml 中加入：\n```yaml\nname: Daily LLM Commit Summary\n\non:\n  schedule:\n    - cron: \"0 10 * * *\"   # 10:00 UTC = 18:00 北京时间\n  workflow_dispatch: {}     # 手动触发\n\njobs:\n  run:\n    runs-on: ubuntu-latest\n    env:\n      TZ: Asia/Shanghai\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: \"20\"\n\n      - name: Install dependencies\n        run: |\n          npm install\n\n      - name: Run summarizer\n        env:\n          OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}\n          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}\n          LARK_WEBHOOK_URL: ${{ secrets.LARK_WEBHOOK_URL }}\n          REPO: ${{ secrets.REPO }}\n        run: |\n          npx tsx scripts/daily-summary.ts\n```\n\n**3. 添加仓库密钥**\n\n进入 Repo → Settings → Secrets and variables → Actions → New repository secret：\n1. OPENAI_API_KEY → OpenAI 或兼容 LLM 服务的 API Key\n2. OPENAI_BASE_URL → LLM 服务的基础 URL\n3. LARK_WEBHOOK_URL → 飞书群自定义机器人 Webhook 地址\n4. REPO → 你的 GitHub 仓库名\n\n**4. 安装依赖**\n\n`npm install`\n\n\u003cbr/\u003e\n\n## 📄 脚本说明\n\nscripts/daily-summary.ts 是核心逻辑：\n1. 获取所有远程分支 (git fetch --all)。\n2. 收集当天的提交 (git log --since \"midnight\" --until \"now\" --all)。\n3. 生成 diff 并进行切分。\n4. 调用 LLM API，生成结构化的提交摘要。\n5. 合并为当日报告。\n6. 通过 Webhook 推送至飞书。\n\n## 🖥 飞书示例输出\n```markdown\n# 2025-08-22 每日提交报告 (your-repo)\n\n1. 总览\n- 修复登录流程中的 bug\n- 新增发票相关 API\n- 调整开发流水线配置\n\n2. 按分支的主要改动\n- origin/feature/auth: 新增 JWT 校验中间件\n- origin/hotfix/payment: 修复货币转换的舍入错误\n\n3. 风险与回滚\n- 鉴权中间件可能影响旧客户端 → 建议在预发环境验证\n- 支付修复涉及公共工具 → 需要回归测试\n\n4. 测试建议\n- 增加 JWT 过期的单元测试\n- 新增发票创建 API 的集成测试\n\n5. 其他说明\n- 忽略了 lockfile 更新\n```\n\n\u003cbr/\u003e\n\n## 🔧 配置项\n\n|变量名|默认|说明|\n|---|---|---|\nMODEL_NAME|gpt-4.1-mini|使用的 LLM 模型\nPER_BRANCH_LIMIT|200|每个分支每日最多分析的提交数\nDIFF_CHUNK_MAX_CHARS|80000|每次请求最大 diff 字符数\nTZ|Asia/Shanghai|定义 “今天” 的时区\n\n\u003cbr/\u003e\n\n## 📌 注意事项\n* 飞书纯文本消息不支持 Markdown。\n* 如果需要富文本格式（标题、链接、列表等），请考虑在 postToLark() 中使用 msg_type: post。\n* 私有仓库需注意：不要将代码上传至第三方 LLM 服务，除非符合公司合规要求。可替换为内部 LLM 网关。\n* 由于本人使用的是 Azure OpenAI， 请求路径与 OpenAI API 的不同，若使用其他服务请自行调整。\n\n\u003cbr/\u003e\n\n## 🤝 贡献方式\n\n欢迎贡献！一些扩展方向：\n* 增加 Slack / Discord / MS Teams 的适配器。\n* 除了每日摘要，还支持在 PR 中直接生成评论。\n* 输出扩展：比如展示修改文件数、代码行数统计等。\n\n\u003cbr/\u003e\n\n## 📜 许可证\n\nMIT License，自行承担使用风险。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnanbingxyz%2Fdaily-commit-summarizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnanbingxyz%2Fdaily-commit-summarizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnanbingxyz%2Fdaily-commit-summarizer/lists"}