Skip to content

Repository files navigation

commit-chronicle — turn any git repository's commit history into a weekly changelog post (pure stdlib)

License Python Tests commit-chronicle 把任意 git 仓库过去一段时间的提交史,折叠成一篇结构化的周记 Markdown:按 conventional 前缀(feat/fix/docs/chore/refactor/其他)分组,给出本周亮点、修复清单、其他变更和数字摘要(提交数 / 增删行),并自动用 ISO 周号命名 posts/YYYY-Www.md。纯 Python 标准库,零依赖,确定性输出(同样的输入永远产生同样的字节)。

真实示例:本仓库的 examples/sample-week.md 就是用本工具对真实 git 仓库(gitgrave 的提交史)生成的 dogfood 产物,不是编造。

解决什么问题

  • 想着手写周报/周更博客,但懒得从 git log 里人肉整理。
  • 想给团队或订阅者一份结构稳定、可自动发布的周变更摘要。
  • 想在 CI 里每周自动更新博客的 posts 目录(附带了 GitHub Action)。

安装

无需安装依赖(标准库 + 系统 git)。两种运行方式:

# 直接以模块运行(推荐)
python -m commit_chronicle.cli --help

# 或 pip 安装为命令行工具
pip install .
commit-chronicle --help

要求:Python ≥ 3.10,PATH 上有 git

30 秒快速开始

# 1) 生成当前仓库最近 7 天的周记,写入 posts/2026-W35.md
python -m commit_chronicle.cli .

# 2) 指定日期窗口,输出到 stdout(hash 变成链接)
python -m commit_chronicle.cli . --since 2026-08-19 --until 2026-08-25 \
  --repo-url https://github.com/me/project --stdout

# 3) 指定输出文件(供示例/CI 使用)
python -m commit_chronicle.cli /path/to/repo --since 2026-08-19 \
  --out-dir examples --output sample-week.md

示例输出

# GitGrave 周记 2026-W35(2026-08-25 ~ 2026-08-25)

过去一周(2026-08-25 ~ 2026-08-25)项目共 **2** 个提交(+223 行 / -16 行),亮点与修复如下。

## 本周亮点

- `59c8a1e` feat: v0.1.0 — GitGrave 死代码讣告墓园(stdlib only)

## 修复清单

- `6df7ebd` fix(review): Windows只读夹具清理、CLI UTF-8输出、pyproject>=3.10、帮助文本测试静音

## 数字摘要

本周共 **2** 个提交,新增 **+223** 行,删除 **-16** 行。

> 生成时间:2026-08-25 20:00:00(本地时区)· 由 commit-chronicle v0.1.0 生成

(以上为模拟排版;完整真实输出见 examples/sample-week.md。)

命令行参数

参数 说明
repo git 仓库路径(默认 .
--days N 最近 N 个自然日(含今天,默认 7;与 --since 互斥)
--since YYYY-MM-DD 起始日期(含当天 00:00 起)
--until YYYY-MM-DD 截止日期(含当天 23:59:59,默认今天)
--repo-url URL 仓库主页 URL;给定时提交 hash 渲染为 [abc1234](URL/commit/abc1234)
--repo-name NAME 周记标题里的仓库名(默认取 origin remote 或目录名)
--out-dir DIR 输出目录(默认 posts
--output FILE 输出文件名(默认 YYYY-Www.md,Www 为窗口截止日的 ISO 周号)
--stdout 不写文件,直接打印 Markdown
--ai-endpoint URL OpenAI 兼容 chat/completions 端点,用于润色开头导语
--ai-key KEY Bearer token(缺省读取环境变量 COMMIT_CHRONICLE_AI_KEY
--ai-model MODEL AI 模型名(默认 gpt-4o-mini
--ai-timeout SEC AI 请求超时(默认 30 秒)
--version 打印版本

分组规则:提交标题匹配严格小写 type(scope): subject 形式;feat→本周亮点、fix→修复清单、docs/chore/refactor→其他变更子节;不匹配或未知前缀(如 perf/test/ci)归入「其他变更」。

AI 导语(可选,默认零网络)

不传 --ai-endpoint 时工具完全不发起网络请求,导语由内置模板生成。传了端点则调用一次 OpenAI 兼容接口生成 2~3 句中文导语;任何失败(无网络、超时、非 200、解析失败)都自动降级为模板导语,不影响产出。

export COMMIT_CHRONICLE_AI_KEY="sk-..."
python -m commit_chronicle.cli . --days 7 \
  --ai-endpoint https://api.openai.com/v1/chat/completions

GitHub Action

仓库自带 action.yml(composite action):在 checkout 之后的仓库上运行本工具,并把生成的 posts/ 提交回去。用法见 docs/action-setup.md

- uses: only-aa/commit-chronicle@v1
  with:
    days: 7
    repo-url: https://github.com/only-aa/commit-chronicle

Roadmap

  • v0.1.0:核心周记生成(收集/分组/模板/数字摘要/ISO 周号),CLI + 确定性输出
  • 多周合并报告(--weeks 3 生成月报)
  • 按 author 的作者维度统计与排行榜
  • 推送渠道插件:GitHub Discussion、邮件、Telegram
  • sitemap / RSS 聚合脚本

License

MIT — 见 LICENSE。贡献者:2025 commit-chronicle contributors

Usage

$ commit_chronicle --help

Contributing

Issues and PRs welcome - run pytest locally before submitting.

About

Turn any git repo's commit history into a structured weekly changelog post - pure Python stdlib, zero dependencies.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages