It walks git tags, finds merged PRs between releases, buckets them into categories, and renders MDX (Docusaurus in our case) organized by year -> month -> category -> version. There is an optional LLM mode that produces structured JSON via a Pydantic schema for PR entry and monthly summaries.
Example:
python .scripts/changelog/generate.py --year 2025 --github --ai --ai-model gpt-5.2 (or --help)
Gotcha: if you use --github, set GITHUB_TOKEN or you will most likely hit GitHub rate limits.
Repo script: https://github.com/confident-ai/deepeval/blob/main/.scripts/...
Disclosure: I maintain DeepEval. Happy to answer questions and take feedback.