Skip to main content

Update version info file with latest changelog version entry

Project description

Changelog2version

Downloads Release Python License: MIT codecov

Update version info file with latest changelog version entry


General

Create version info files based on the latest changelog entry.

Installation

pip install changelog2version

Usage

This example shows you how to parse the repo's changelog and update the package version file with that version.

changelog2version \
    --changelog_file changelog.md \
    --version_file examples/version.py \
    --debug

Available default template files

By default a Python version file is generated. Check the table below and the example usage for further details and supported template files

Type Parameter Description
Python py See example package version
C/CPP c Header file with available version info

C header file

changelog2version \
    --changelog_file changelog.md \
    --version_file examples/version_info.h \
    --version_file_type c \
    --debug
//
//  version_info.h
//
//  Created automatically by script
//

#ifndef version_info_h
#define version_info_h

#define MAJOR_VERSION   0     //< major software version
#define MINOR_VERSION   4     //< minor software version
#define PATCH_VERSION   0     //< patch software version

#endif

Python package file

changelog2version \
    --changelog_file changelog.md \
    --version_file examples/version.py \
    --version_file_type py \
    --debug
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

__version_info__ = ("0", "4", "0")
__version__ = '.'.join(__version_info__)

JSON output

The additional, optional argument --pretty will output the JSON data with an indentation of 4 in order to provide the data in an easy to read format.

Console
changelog2version \
    --changelog_file changelog.md \
    --print \
    --debug
{"info": {"version": "0.6.0"}, "releases": {"0.6.0": [{"upload_time": "2022-10-26"}], "0.5.0": [{"upload_time": "2022-10-20"}], "0.4.0": [{"upload_time": "2022-08-07"}], "0.3.0": [{"upload_time": "2022-08-05"}], "0.2.0": [{"upload_time": "2022-08-03"}], "0.1.1": [{"upload_time": "2022-07-31"}], "0.1.0": [{"upload_time": "2022-07-31"}]}}
File
changelog2version \
    --changelog_file changelog.md \
    --output changelog.json \
    --pretty \
    --debug

See example JSON file

Advanced

Custom regular expressions

To extract a version line from a given changelog file with an alternative regex, the version_line_regex argument can be used as shown below. The expression is validated during the CLI argument parsing

changelog2version \
    --changelog_file changelog.md \
    --version_file src/changelog2version/version.py \
    --version_line_regex "^\#\# \[\d{1,}[.]\d{1,}[.]\d{1,}\]" \
    --debug

Same applies for a custom semver line regex in order to extract the semantic version part from a full version line, use the semver_line_regex argument to adjust the regular expression to your needs.

Custom template file

Beside the default supported template files users can also provide custom template files.

This is the list of currently available variables

Name Description
major_version Major version, incompatible API changes
minor_version Minor version, add functionality (backwards-compatible)
patch_version Patch version, bug fixes (backwards-compatible)
prerelease_data pre-release data, if available
build_data Build metadata, if available
file_name User specified name of rendered file
file_name_without_suffix User specified name of rendered file without suffix
template_name Name of rendered template file
template_name_without_suffix Name of rendered template file without suffix
Custom keyword Provided by the user via --additional_template_data
additional_data="{\"creation_datetime\": \"$(date +"%Y-%m-%dT%H:%M:%S")\", \"machine_name\": \"$(whoami)\"}"
changelog2version \
    --changelog_file changelog.md \
    --version_file examples/version_info.c \
    --template_file examples/version_info.c.template \
    --additional_template_data "${additional_data}" \
    --debug

# or less fancy
changelog2version \
    --changelog_file changelog.md \
    --version_file examples/version_info.c \
    --template_file examples/version_info.c.template \
    --additional_template_data '{"creation_datetime": "2022-08-05T21:11:12", "machine_name": "Death Star"}' \
    --debug

Executing the created example file examples/version_info.c will print the following content (datetime and creator might be different)

Script version is (major.minor.patch): 0.4.0
Prerelease data: None
Prerelease data: None
Creation datetime: 2022-08-05T21:11:12
Created by Death Star

Additional version info content

To create custom release candidate packages the python version file variable __version__ can be exended with a custom string.

Choose the additional version info content carefully as not everything is supported by PyPi, see the Python Core metadata specifications and PEP440

changelog2version \
    --changelog_file changelog.md \
    --version_file examples/version.py \
    --version_file_type py \
    --additional_version_info="rc1234" \
    --debug
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

__version_info__ = ("0", "5", "0")
__version__ = '.'.join(__version_info__) + '-rc1234'

Contributing

Unittests

Run the unittests locally with the following command after installing this package in a virtual environment or by using tox to create one on each run.

# install the package with all its development dependencies
pip install .[dev]

# run all tests
nose2 --config tests/unittest.cfg

# run only one specific tests
nose2 tests.test_extract_version.TestExtractVersion.test_version_line_regex

Generate the coverage files with

python create_report_dirs.py
coverage html

The coverage report is placed at reports/coverage/html/index.html

Credits

Based on the PyPa sample project. Also a big thank you to the creators and maintainers of SemVer.org for their documentation and regex example

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

changelog2version-0.6.0.tar.gz (16.8 kB view details)

Uploaded Source

Built Distribution

changelog2version-0.6.0-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file changelog2version-0.6.0.tar.gz.

File metadata

  • Download URL: changelog2version-0.6.0.tar.gz
  • Upload date:
  • Size: 16.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.15

File hashes

Hashes for changelog2version-0.6.0.tar.gz
Algorithm Hash digest
SHA256 d29de4740ffb889fddf89c0b1a2dc71fc57d7f12257fddffc7f95d8a967c922e
MD5 24e1d5cde3815397510667d7e7d632ec
BLAKE2b-256 f88d291bfa894e32b65afea0621aae51184e2e99978265ad2d90e8b53e0623a9

See more details on using hashes here.

File details

Details for the file changelog2version-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for changelog2version-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 65bff2a56c4681f11e62137a541f08d3dea0f14926115ce969daa68fb660075f
MD5 cf1fcebcdac168a9a3bd3c6f03f0c5dd
BLAKE2b-256 2b73539dd873385a17160e4f413bd7b232be72aef8e33df9ee27731b7e8a7611

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page