Add changelog generation tool for GitHub milestones#13063
Add changelog generation tool for GitHub milestones#13063cmcfarlen wants to merge 3 commits intoapache:masterfrom
Conversation
Replaces tools/git/changelog.pl with a Python implementation that generates changelogs from merged PRs in a milestone using the GitHub API or gh CLI. Default output matches the existing CHANGELOG-* file format. The --doc mode includes merge SHAs, labels, and full PR descriptions to guide AI-assisted release documentation updates. Supports text and YAML output formats. Co-Authored-By: Claude <noreply@anthropic.com>
|
hmm, the uv.lock file is making the RAT check mad. Should I remove uv.lock? |
Replace reference to tools/git/changelog.pl with the new tools/changelog/changelog.py invocation using uv run. Co-Authored-By: Claude <noreply@anthropic.com>
I think it's recommended to add uv.lock to ensure the exact packages are added. Let's add it back. The problem wasn't your patch adding the lock, the problem is the RAT check incorrectly failing on the lock file. I'll update CI to allow it. Update |
2b949cf to
44f4931
Compare
There was a problem hiding this comment.
Pull request overview
This PR introduces a new Python-based changelog generator under tools/changelog/ to produce CHANGELOG-*-style output from GitHub milestones (via direct REST API calls or the gh CLI), and updates the release-process documentation to use it.
Changes:
- Add
tools/changelog/changelog.pywith text/YAML output and an extended--docmode for richer metadata. - Add
tools/changelog/pyproject.tomlandtools/changelog/uv.lockfor dependency management/execution viauv. - Update release-process docs to use the new tool (with
--use-gh).
Reviewed changes
Copilot reviewed 3 out of 4 changed files in this pull request and generated 7 comments.
| File | Description |
|---|---|
| tools/changelog/changelog.py | Implements milestone PR collection via REST API or gh, plus output formatting. |
| tools/changelog/pyproject.toml | Defines the Python project and console script entry point. |
| tools/changelog/uv.lock | Pins Python dependencies for uv-managed execution. |
| doc/developer-guide/release-process/index.en.rst | Updates the documented release workflow to generate changelogs via the new tool. |
| uv run --project tools/changelog python tools/changelog/changelog.py \ | ||
| -o apache -r trafficserver -m X.Y.Z --use-gh > CHANGELOG-X.Y.Z |
| uv run --project tools/changelog python tools/changelog/changelog.py \ | ||
| -o apache -r trafficserver -m X.Y.Z --use-gh > CHANGELOG-X.Y.Z |
| resp = client.get(f"/repos/{owner}/{repo}/milestones") | ||
| _check_rate_limit(resp) | ||
| resp.raise_for_status() | ||
| for ms in resp.json(): | ||
| if ms["title"] == title: | ||
| return ms["number"] | ||
| return None | ||
|
|
||
|
|
| """Use the gh CLI to fetch milestone PRs (avoids API rate limits).""" | ||
| milestone_id = None | ||
| result = subprocess.run( | ||
| ["gh", "api", f"/repos/{owner}/{repo}/milestones", "--paginate"], |
| parser.add_argument( | ||
| "--doc", | ||
| action="store_true", | ||
| help="Include extra metadata (merge SHA, full commit message, labels) for documentation", | ||
| ) |
|
|
||
| try: | ||
| import yaml | ||
| except ImportError: | ||
| yaml = None | ||
|
|
| sys.exit(2) | ||
|
|
||
|
|
||
| def main(): |
Replaces tools/git/changelog.pl with a Python implementation that generates changelogs from merged PRs in a milestone using the GitHub API or gh CLI. Default output matches the existing CHANGELOG-* file format. The --doc mode includes merge SHAs, labels, and full PR descriptions to guide AI-assisted release documentation updates. Supports text and YAML output formats.