Changelog Workflow
Shared source of truth for generating or updating CHANGELOG.md from git
history before a release.
Update CHANGELOG.md with a new entry based on git history since the last
documented release. Use Keep a Changelog format.
Arguments
Optional version string (e.g.
0.7.0)If omitted, read the current version from
pyproject.tomland use that
1. Gather context
Run these commands to understand what changed:
# Find the last version documented in CHANGELOG.md
# (first line matching "## [<version>]" or "## <version>")
head -100 CHANGELOG.md
# Get current version from pyproject.toml
grep '^version' pyproject.toml
# Find the most recent git tag
git tag --sort=-v:refname | head -5
# Get all commits since the last tag (or since the last documented version)
git log <last_tag>..HEAD --oneline --no-merges
# For richer context, also read the full commit messages
git log <last_tag>..HEAD --no-merges --format="%h %s%n%b"
2. Categorize changes
Read the commits and diffs to understand what actually changed. Group changes into these categories and omit empty categories:
Added -> new features, new functions, new API methods
Changed -> behavior changes, API changes, renamed things
Fixed -> bug fixes
Removed -> removed features or deprecated code
3. Write the entry
Write human-readable changelog entries. Rules:
Write for users, not developers. “Added
pGaussprofile function for Gaussian depth profiles” not “added pGauss to profile.py”.Group related commits into single entries. Five commits that refine one feature = one changelog bullet.
Skip internal-only changes like CI tweaks, test refactors, code style fixes, or pre-commit config changes unless they affect the user (e.g. “Tests now run on Python 3.14”).
Mention breaking changes prominently. If an API was renamed or removed, say what the old name was and what to use instead.
Use backticks for code identifiers (function names, parameter names, etc).
Each bullet should be one concise sentence, two at most.
4. Update CHANGELOG.md
Read
CHANGELOG.mdto match the existing style and header. The file uses Keep a Changelog format and Semantic Versioning.Insert the new version entry after the header and before any existing entries. If there’s an
[Unreleased]section, replace it.Format:
## [<version>] - <YYYY-MM-DD>
### Added
- ...
### Changed
- ...
Use today’s date for the release date.
5. Show the result
Print the new entry so the user can review it before committing.