Generate clean, grouped release notes from your git history. Zero dependencies.
Project description
shipnote
Generate clean, grouped release notes straight from your git history — with zero dependencies.
shipnote reads the commits between two refs, understands
Conventional Commits, and renders tidy
markdown release notes grouped by Features, Bug Fixes, Performance, Breaking
Changes, and more. No config file, no extra packages, no network calls.
It is built for the boring-but-constant chore every maintainer knows: writing the changelog at release time.
Why
Most changelog tools pull in a tree of dependencies, want a config file, or lock
you into one commit convention. shipnote is a single small package that uses
nothing but the Python standard library and the git you already have. Drop it
into any project or CI job and get readable notes in one command.
Install
pip install shipnote
# or, for an isolated CLI:
pipx install shipnote
Requires Python 3.8+ and git on your PATH.
Usage
From inside a git repository:
# Notes from the latest tag up to HEAD
shipnote
# A titled section for a specific version, with commit/PR links
shipnote --title v1.2.0 --repo me/myproject
# An explicit range, written to a file
shipnote --from v1.1.0 --to v1.2.0 --output RELEASE_NOTES.md
If the repo has no tags yet, shipnote walks the whole history.
Options
| Flag | Description |
|---|---|
--from REF |
Start ref, exclusive. Defaults to the latest tag. |
--to REF |
End ref, inclusive. Defaults to HEAD. |
-t, --title TEXT |
Heading for the notes, e.g. the version. |
--repo OWNER/NAME |
Turn commit hashes and (#123) PR refs into links. |
--base-url URL |
Base URL for links (default https://github.com). |
-o, --output FILE |
Write to a file instead of stdout. |
-C DIR |
Run as if started in DIR. |
Example output
## v1.2.0
### Breaking Changes
- drop Python 3.7 support (`a1b2c3d`)
### Features
- **api:** add streaming endpoint ([#42](https://github.com/me/proj/pull/42), [`9f8e7d6`](https://github.com/me/proj/commit/9f8e7d6))
### Bug Fixes
- handle an empty commit range gracefully (`c4d5e6f`)
In CI
Use it in a release workflow to draft notes from the just-tagged range:
- name: Draft release notes
run: |
pip install shipnote
shipnote --title "${GITHUB_REF_NAME}" --repo "${GITHUB_REPOSITORY}" -o notes.md
How it groups commits
Conventional types map to sections: feat → Features, fix → Bug Fixes,
perf → Performance, docs → Documentation, refactor → Refactoring,
test → Tests, build → Build System, ci → CI, style → Styles,
chore → Chores, revert → Reverts. Anything that does not match falls under
Other, so no commit is ever silently dropped. Commits marked breaking (a !
after the type, or a BREAKING CHANGE footer) are surfaced under Breaking
Changes.
Development
pip install -e .
python -m pytest
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file shipnote-0.1.0.tar.gz.
File metadata
- Download URL: shipnote-0.1.0.tar.gz
- Upload date:
- Size: 7.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e3c5c0535a56caac42f1a65f0e7c2bdbacca71e074d3a28cd067e7e739b8c2d
|
|
| MD5 |
538cb35dfeee017d961d422c6a16c663
|
|
| BLAKE2b-256 |
daf5e1147c6a1c633ccecd592bbc8e4063c536e82f9818f2d6c9abbec6bcac13
|
File details
Details for the file shipnote-0.1.0-py3-none-any.whl.
File metadata
- Download URL: shipnote-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31a84b06849f7d31c7dab07f80f01b20d9edd1302f0f4145b72db4a882df6c7f
|
|
| MD5 |
ec79e19c9d14490ec664c7305631b5bc
|
|
| BLAKE2b-256 |
2a58978d614f57f5171057349b9ed46d65826c2d8bc1cc57bc6f11dae0725141
|