Thinly scoped and opinionated tool that computes a version number from git tags and trailers
Project description
Opinionated version numbering CLIs, and library
This project aims at easing the burden of computing and managing a project's
version numbers by leveraging git tags and commit trailers.
simple-git-versioning provides two CLIs: semver2 and pep440, one for each
supported versioning sheme of the same name: SemVer2 and
PEP440.
Integration with setuptools is supported.
Snippets to expose your project's version number programatically are provided in
the Libraries section.
Installation
With pip:
pip install simple-git-versioning
Usage
By default, pep440 and semver2 will compute a version number of the form
X.Y.Z. Every project starts at 0.0.0 on their initial commit, and each
commit after that increments the number Z by one, unless they include a
Version-Bump trailer (case-insensitive) with a value of:
major:Xis incremented;minor:Yis incremented;patch:Zis incremented (same as the default).
Each tool then provides the ability to switch to a pre-release mode; or
post-release, and/or dev release, etc. in the case of pep440.
CLIs
All CLIs provide comprehensive help messages, available via the --help option.
Libraries
Libraries that wish to expose their version number programatically may do so by including the following snippet:
PEP440
from importlib.metadata import PackageNotFoundError, version
from pathlib import Path
from versioning.pep440 import NoVersion, Project
try:
__version__ = version("<your python package's name>")
except PackageNotFoundError:
# package is not installed
with Project(path=Path(__file__).parent) as project:
try:
__version__ = str(project.version())
except NoVersion:
__version__ = str(project.release(dev=0))
SemVer2
from importlib.metadata import PackageNotFoundError, version
from pathlib import Path
from versioning.semver2 import NoVersion, Project
try:
__version__ = version("<your python package's name>")
except PackageNotFoundError:
# package is not installed
with Project(path=Path(__file__).parent) as project:
try:
__version__ = str(project.version())
except NoVersion:
__version__ = str(project.release(pre=("dev", 0))
setuptools
If you use setuptools as a build backend for your project, you can configure
simple-git-versioning to derive a version automatically as follows:
In your pyproject.toml:
- declare
versionas a dynamic metadata field; - add
simple-git-versioningto your project'sbuild-system.requires; - enable the
setuptoolsintegration in yourpyproject.toml, and pick the versioning scheme you wish to apply.
[project]
name = ...
dynamic = ["version"]
[build-system]
requires = ["setuptools>=63", "simple-git-versioning[setuptools]"]
build-backend = "setuptools.build_meta"
[tool.simple-git-versioning.setuptools]
# scheme = "pep440" (default) or "semver2"
hatchling
If you use hatchling as a build backend for your project, you can configure
simple-git-versioning to derive a version automatically as follows:
In your pyproject.toml:
- declare
versionas a dynamic metadata field; - add
simple-git-versioningto your project'sbuild-system.requires; - enable the
hatchlingintegration in yourpyproject.toml, and pick the versioning scheme you wish to apply.
[project]
name = ...
dynamic = ["version"]
[build-system]
requires = ["hatchling", "simple-git-versioning[hatchling]"]
build-backend = "hatchling.build"
[tool.hatch.version]
source = "simple-git-versioning"
# scheme = "pep440" (default) or "semver2"
CI/CD
Maintainers may prefer to keep their CI/CD configuration agnostic to
simple-git-versioning. In this case, they should instruct
simple-git-versioning to switch to release mode by setting the
SIMPLE_GIT_VERSIONING_RELEASE environment variable (to any value other than
the empty string, 0, or false) and use their build frontend to extract the
current (release) version:
SIMPLE_GIT_VERSIONING_RELEASE=1 pdm show --version
Without
SIMPLE_GIT_VERSIONING_RELEASE, the version you would extract would have adevsuffix and a local segment identifying the current commit (e.g.0.3.6.dev0+04aa73b).
uv versioncurrently does not support computing dynamic versions, but it eventually should: https://github.com/astral-sh/uv/issues/14137.
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 simple_git_versioning-0.3.26.tar.gz.
File metadata
- Download URL: simple_git_versioning-0.3.26.tar.gz
- Upload date:
- Size: 115.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dfbfc6c0071bf6e9ccd8f974ede60cd0ba95f4821f9a6856de73eabb00eebece
|
|
| MD5 |
e0b9f3ebc8b40f6aaa6f48b64c0a1802
|
|
| BLAKE2b-256 |
bfe3a67185d7c70295e2920caa53bfd2a388e865205fc7b020e17f958ae46871
|
File details
Details for the file simple_git_versioning-0.3.26-py3-none-any.whl.
File metadata
- Download URL: simple_git_versioning-0.3.26-py3-none-any.whl
- Upload date:
- Size: 21.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf7618f2b81c5d31df703766b3f19d812c6ea7c43fdae439cabe32331a87a284
|
|
| MD5 |
ec4e205e5221ed947af28d1566b6e883
|
|
| BLAKE2b-256 |
994fc2bb509e23470077762717bc2882dc05c6b1e01af08da1238dcde9f0e9b3
|