Generate a changelog from individual snippets
Project description
snippets2changelog
Generate a changelog from individual snippets
General
Create version info files based on the latest changelog entry.
Installation
[<PYTHON> -m] pip[3] install [--user] [--upgrade] snippets2changelog
Usage
Info
Print informations about snippets2changelog
changelog-generator info
Create
Snippet
Create a new snippet with the given name at the specified snippets folder
changelog-generator create example_snippets/123.md
Short description: My example snippet
Choose from: ['bugfix', 'feature', 'breaking']
Type of change: feature
Choose from: ['internal', 'external', 'all']
Scope of change: external
Affected users (default all): testers
## My example snippet
<!--
type: feature
scope: external
affected: testers, users
-->
TBD
Changelog
Create or update a changelog with all snippets.
The generated changelog will be named <OLD_CHANGELOG_NAME.new>
unless the
--in-place
flag is used. This flag is intended for CI usage with a clean
checkout before a run.
Be aware to restore the changelog before another run as it might generate version entries and version bumps multiple times otherwise.
changelog-generator changelog changelog.md --snippets=.snippets [--in-place]
To just get the latest changelog entry without updating or generating the
changelog, use --dry-run
to print the latest snippet content in JSON format.
{
"version": "1.5.0",
"timestamp": "2024-10-12T13:36:46+02:00",
"meta": {
"type": "feature",
"scope": [
"all"
],
"affected": [
"all"
]
},
"content": "\n\nUse `--dry-run` with the `changelog` subparser to print the latest changelog entry as JSON instead of updating the changelog file.\n",
"version_reference": "https://github.com/brainelectronics/snippets2changelog/tree/1.5.0"
}
Parse
Parse an existing snippet file and return the data as JSON without indentation
changelog-generator parse example_snippets/123.md \
--indent=4
{
"type": "feature",
"scope": [
"external"
],
"affected": [
"testers",
"users"
],
"title": "My example snippet",
"details": "\n\nTBD\n"
}
CI
To use this tool in a CI environment use the following commands, job configs or actions.
GitHub
Actions
See changelog-from-snippets action.
Custom workflow
---
name: Generate changelog
on:
push:
branches:
- main
jobs:
changelog:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# all history is needed to crawl it properly
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install
run: |
pip install snippets2changelog
- name: Update changelog with snippets
run: |
changelog-generator \
changelog changelog.md \
--snippets=.snippets \
--in-place
Other
pip install snippets2changelog
changelog-generator \
changelog changelog.md \
--snippets=.snippets \
--in-place
Contributing
Setup
For active development you need to have poetry
and pre-commit
installed
python3 -m pip install --upgrade --user poetry pre-commit
git clone https://github.com/brainelectronics/snippets2changelog.git
cd snippets2changelog
pre-commit install
poetry install
Testing
# run all tests
poetry run coverage run -m pytest -v
# run only one specific tests
poetry run coverage run -m pytest -v -k "test_read_save_json"
Generate the coverage files with
python create_report_dirs.py
coverage html
The coverage report is placed at reports/coverage/html/index.html
Changelog
The changelog format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Please add a changelog snippet, see above, for every PR you contribute. The changes are categorised into:
bugfixes
fix an issue which can be used out of the box without any further changes required by the user. Be aware that in some cases bugfixes can be breaking changes.features
is used to indicate a backwards compatible change providing improved or extended functionalitiy. This does, asbugfixes
, in any case not require any changes by the user to keep the system running after upgrading.breaking
creates a breaking, non backwards compatible change which requires the user to perform additional tasks, adopt his currently running code or in general can't be used as is anymore.
The changelog entry shall be short but meaningful and can of course contain links and references to other issues or PRs. New lines are only allowed for a new bulletpoint entry. Usage examples or other code snippets should be placed in the code documentation, README or the docs folder.
Credits
A big thank you to the creators and maintainers of SemVer.org for their documentation and regex example
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
Hashes for snippets2changelog-1.5.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1cd5c51e1b51a7f1e2055bb2364783f07403b8984c6870873c0188771c25edba |
|
MD5 | 3eac257cdf281a08848e88befa08340d |
|
BLAKE2b-256 | 0188d0391a01b51455406cfa68d8adcbdc58087a653d691cd3e5e2c504019c7b |