Skip to content

docs: Add CHANGELOG.md with auto-update workflow#2690

Merged
koxudaxi merged 5 commits intomainfrom
feat/changelog-automation
Dec 19, 2025
Merged

docs: Add CHANGELOG.md with auto-update workflow#2690
koxudaxi merged 5 commits intomainfrom
feat/changelog-automation

Conversation

@koxudaxi
Copy link
Copy Markdown
Owner

@koxudaxi koxudaxi commented Dec 19, 2025

Summary by CodeRabbit

  • Documentation

    • Changelog now accessible in project documentation.
  • Chores

    • Implemented automated changelog generation and deployment on release publication.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Dec 19, 2025

Warning

Rate limit exceeded

@koxudaxi has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 9 minutes and 15 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 63a3d90 and 55a0c88.

📒 Files selected for processing (3)
  • .github/workflows/changelog.yaml (1 hunks)
  • .github/workflows/docs.yaml (1 hunks)
  • pyproject.toml (1 hunks)

Walkthrough

Adds automated changelog generation and integration. A new Bash script generates CHANGELOG.md from GitHub Releases, a GitHub Actions workflow automatically updates CHANGELOG.md on release publication, and the changelog is integrated into documentation via workflow step and mkdocs navigation.

Changes

Cohort / File(s) Change Summary
Changelog Generation & Automation
scripts/generate_changelog.sh, .github/workflows/changelog.yaml
New Bash script to generate CHANGELOG.md from GitHub Releases API queries; new workflow to automatically trigger changelog updates on release.publish events, fetch release metadata, reconstruct CHANGELOG.md with header + new entry + archived entries, and commit changes.
Documentation Integration
.github/workflows/docs.yaml, mkdocs.yaml
Docs workflow now copies CHANGELOG.md to docs/changelog.md before site build; mkdocs navigation adds "Changelog" link to changelog.md.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Areas of focus:
    • Verify GitHub CLI (gh) command syntax and API call patterns in generate_changelog.sh for correctness and error handling
    • Confirm workflow trigger conditions and file parsing logic (awk separator split) in changelog.yaml
    • Validate that CHANGELOG.md copy step in docs.yaml occurs at the right execution point

Poem

🐰 Release notes now flow with automated grace,
From GitHub's API to changelog's place,
Docs parade them proudly in nav's embrace,
No more stale changelogs—just timely trace! 🎉

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main changes: adding CHANGELOG.md documentation and implementing an auto-update workflow via GitHub Actions.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link
Copy Markdown

codecov Bot commented Dec 19, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.53%. Comparing base (67ea24b) to head (55a0c88).
⚠️ Report is 3 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2690   +/-   ##
=======================================
  Coverage   99.53%   99.53%           
=======================================
  Files          81       81           
  Lines       11358    11369   +11     
  Branches     1357     1357           
=======================================
+ Hits        11305    11316   +11     
  Misses         32       32           
  Partials       21       21           
Flag Coverage Δ
unittests 99.53% <ø> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
scripts/generate_changelog.sh (1)

19-30: Optimize API usage to avoid N+1 queries.

The current implementation makes 3 API calls per release (1 for the list, then 2 more for each release's date and body). For 500 releases, this results in 1,001 API calls, which is slow and could hit rate limits.

🔎 Proposed fix to fetch all data in one call
 # Get all releases and process them
-gh release list --repo "$REPO" --limit 500 --json tagName --jq '.[].tagName' | while read -r tag; do
-    # Get release details (use // "" to handle null body)
-    DATE=$(gh release view "$tag" --repo "$REPO" --json publishedAt --jq '.publishedAt | split("T")[0]')
-    BODY=$(gh release view "$tag" --repo "$REPO" --json body --jq '.body // ""')
-
-    echo "## [$tag](https://github.com/$REPO/releases/tag/$tag) - $DATE"
+gh release list --repo "$REPO" --limit 500 --json tagName,publishedAt,body --jq '.[]' | while IFS= read -r release; do
+    tag=$(echo "$release" | jq -r '.tagName')
+    DATE=$(echo "$release" | jq -r '.publishedAt | split("T")[0]')
+    BODY=$(echo "$release" | jq -r '.body // ""')
+
+    echo "## [$tag](https://github.com/$REPO/releases/tag/$tag) - $DATE"
     echo ""
     printf '%s\n' "$BODY"
     echo ""
     echo "---"
     echo ""
 done

This reduces the API calls from 1,001 to just 1, significantly improving performance and avoiding rate limit issues.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 114feaa and 63a3d90.

📒 Files selected for processing (4)
  • .github/workflows/changelog.yaml (1 hunks)
  • .github/workflows/docs.yaml (1 hunks)
  • mkdocs.yaml (1 hunks)
  • scripts/generate_changelog.sh (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (13)
  • GitHub Check: benchmarks
  • GitHub Check: 3.10 on Ubuntu
  • GitHub Check: py312-black23 on Ubuntu
  • GitHub Check: 3.9 on macOS
  • GitHub Check: 3.10 on Windows
  • GitHub Check: py312-isort7 on Ubuntu
  • GitHub Check: 3.9 on Windows
  • GitHub Check: py312-pydantic1 on Ubuntu
  • GitHub Check: 3.12 on Windows
  • GitHub Check: 3.11 on Windows
  • GitHub Check: 3.9 on Ubuntu
  • GitHub Check: 3.14 on Windows
  • GitHub Check: 3.13 on Windows
🔇 Additional comments (5)
mkdocs.yaml (1)

101-101: LGTM!

The changelog navigation entry is properly formatted and consistent with the existing navigation structure.

.github/workflows/changelog.yaml (2)

47-53: LGTM!

The commit and push logic correctly uses the github-actions bot identity and includes proper checks to avoid empty commits. The conventional commit message format is appropriate.


13-16: Ensure PAT token has appropriate permissions for pushing to main branch.

The workflow uses secrets.PAT for checkout, which is necessary to allow commits to trigger other workflows (the default GITHUB_TOKEN does not trigger workflows for security reasons). Ensure this PAT has the repo scope (or public_repo for public repositories) to allow pushing code that can trigger downstream workflows.

scripts/generate_changelog.sh (2)

1-8: LGTM!

The script setup follows best practices with proper error handling (set -euo pipefail) and clear usage documentation.


10-16: LGTM!

The header format matches the structure expected by the changelog update workflow (header followed by "---" separator).

Comment thread .github/workflows/changelog.yaml
Comment thread .github/workflows/docs.yaml Outdated
@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented Dec 19, 2025

CodSpeed Performance Report

Merging #2690 will not alter performance

Comparing feat/changelog-automation (55a0c88) with main (114feaa)

Summary

✅ 52 untouched
⏩ 10 skipped1

Footnotes

  1. 10 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@koxudaxi koxudaxi merged commit 38b953f into main Dec 19, 2025
39 checks passed
@koxudaxi koxudaxi deleted the feat/changelog-automation branch December 19, 2025 04:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant