Fetch all releases of a GitHub project within a specified version range and generate a change summary report.
Quick Start
Use the built-in script to fetch version changes:
python3 scripts/check_releases.py owner/repo <起始版本> <目标版本>
Common commands:
# 两个版本之间的变更
python3 scripts/check_releases.py facebook/react v18.0.0 v18.2.0
All releases after a certain version (up to the latest)
python3 scripts/check_releases.py kubernetes/kubernetes v1.28.0
Machine-readable JSON output (for pipelines/subsequent processing)python3 scripts/check_releases.py facebook/react v18.0.0 v18.2.0 --json
Include prerelease versionspython3 scripts/check_releases.py facebook/react v18.0.0 v18.3.0 --include-prereleases
Preview the API request to be sent (without actually calling it)python3 scripts/check_releases.py facebook/react v18.0.0 v18.2.0 --dry-run
## 工作流程
1. **解析输入** — 提取 owner/repo、起始和目标版本号
2. **获取版本列表** — 通过 GitHub API 分页拉取所有 release,按发布时间排序
3. **筛选** — 过滤 draft/prerelease(可通过 flag 覆盖),定位版本区间
4. **生成报告** — Markdown 格式(默认)或 JSON 格式(--json)
## 选项速查
| 选项 | 说明 |
|------|------|
| `--json` | 输出 JSON,用于管道和后续处理 |
| `--verbose` | 输出详细进度到 stderr(不污染 stdout) |
| `--dry-run` | 仅显示将要发送的请求,不实际调用 API |
| `--max-pages N` | 最大分页数,默认 10 |
| `--per-page N` | 每页数量(1-100),默认 100 |
| `--include-prereleases` | 包含预发布版本 |
| `--include-drafts` | 包含草稿 release |
| `--github-token TOKEN` | GitHub PAT(或设置 `GITHUB_TOKEN` 环境变量) |
## 输出格式
### Markdown(默认)
标准输出包含:版本区间、每个 release 的详细信息(发布日期、变更内容)、版本汇总表。
### JSON(--json)
```json
{
"repo": "owner/repo",
"range": {"start": "v1.0.0", "end": "v2.0.0"},
"count": 3,
"releases": [
{
"tag_name": "v1.1.0",
"name": "Release Title",
"published_at": "2024-01-15T10:00:00Z",
"prerelease": false,
"draft": false,
"html_url": "https://...",
"body": "...",
"summary": "前 200 字符摘要..."
}
]
}
Notes
- Unauthenticated requests are rate-limited to 60 per hour. It is recommended to set the
GITHUB_TOKENenvironment variable to increase it to 5000 per hour - Version numbers support both the v prefix (e.g.,
v1.2.3) and no prefix (1.2.3) formats - By default, draft and prerelease are filtered out; use
--include-prereleases/--include-draftsto override - A maximum of 100 per page; automatically paginates when spanning a large version range
- All requests are read-only GET and can be safely executed repeatedly