Dynamic versioning based on VCS tags for uv/hatch project
Project description
uv-dynamic-versioning
poetry-dynamic-versioning influenced dynamic versioning tool for uv/hatch, powered by dunamai.
Installation
Update or add build-system
and tool.hatch.version
in your pyproject.toml
to use uv-dynamic-versioning
.
[build-system]
requires = ["hatchling", "uv-dynamic-versioning"]
build-backend = "hatchling.build"
[tool.hatch.version]
source = "uv-dynamic-versioning"
Also remove version
in project
and set dynamic
(dynamic = ["version"]
).
Before
[project]
name = "..."
version = "0.1.0"
After
[project]
name = "..."
dynamic = ["version"]
Configuration
[!NOTE]
- Configuration is almost same to poetry-dynamic-versioning. But
format-jinja
,format-jinja-imports
are not supported.- The following descriptions are excerpts from poetry-dynamic-versioning.
In your pyproject.toml
, you may configure the following options:
-
[tool.uv-dynamic-versioning]
: General options.-
vcs
(string, default:any
): This is the version control system to check for a version. One of:any
,git
,mercurial
,darcs
,bazaar
,subversion
,fossil
,pijul
. -
metadata
(boolean, default: unset): If true, include the commit hash in the version, and also include a dirty flag ifdirty
is true. If unset, metadata will only be included if you are on a commit without a version tag. This is ignored whenformat
orformat-jinja
is used. -
tagged-metadata
(boolean, default: false): If true, include any tagged metadata discovered as the first part of the metadata segment. Has no effect whenmetadata
is set to false. This is ignored whenformat
orformat-jinja
is used. -
dirty
(boolean, default: false): If true, include a dirty flag in the metadata, indicating whether there are any uncommitted changes. Has no effect whenmetadata
is set to false. This is ignored whenformat
orformat-jinja
is used. -
pattern
(string): This is a regular expression which will be used to find a tag representing a version. When this is unset, Dunamai's default pattern is used.There must be a capture group named
base
with the main part of the version. Optionally, it may contain another two groups namedstage
andrevision
for prereleases, and it may contain a group namedtagged_metadata
to be used with thetagged-metadata
option. There may also be a group namedepoch
for the PEP 440 concept.If the
base
group is not included, then this will be interpreted as a named preset from the DunamaiPattern
class. This includes:default
,default-unprefixed
(makes thev
prefix optional).You can check the default for your installed version of Dunamai by running this command:
poetry run python -c "import dunamai; print(dunamai.Pattern.Default.regex())"
Remember that backslashes must be escaped in the TOML file.
# Regular expression: pattern = '(?P<base>\d+\.\d+\.\d+)' # Named preset: pattern = "default-unprefixed"
-
pattern-prefix
(string): This will be inserted after the pattern's start anchor (^
). For example, to match tags likesome-package-v1.2.3
, you can keep the default pattern and set the prefix tosome-package-
. -
format
(string, default: unset): This defines a custom output format for the version. Available substitutions:{base}
{stage}
{revision}
{distance}
{commit}
{dirty}
{tagged_metadata}
{branch}
{branch_escaped}
which omits any non-letter/number characters{timestamp}
of the current commit, which expands to YYYYmmddHHMMSS as UTC
Example:
v{base}+{distance}.{commit}
-
style
(string, default: unset): One of:pep440
,semver
,pvp
. These are preconfigured output formats. If you set both astyle
and aformat
, then the format will be validated against the style's rules. Ifstyle
is unset, the default output format will follow PEP 440, but a customformat
will only be validated ifstyle
is set explicitly. -
latest-tag
(boolean, default: false): If true, then only check the latest tag for a version, rather than looking through all the tags until a suitable one is found to match thepattern
. -
bump
(boolean, default: false): If true, then increment the last part of the versionbase
by 1, unless thestage
is set, in which case increment therevision
by 1 or set it to a default of 2 if there was norevision
. Does nothing when on a commit with a version tag.Example, if there have been 3 commits since the
v1.3.1
tag:- PEP 440 with
bump = false
:1.3.1.post3.dev0+28c1684
- PEP 440 with
bump = true
:1.3.2.dev3+28c1684
- PEP 440 with
-
tag-branch
(string, default: unset): Branch on which to find tags, if different than the current branch. This is only used for Git currently. -
full-commit
(boolean, default: false): If true, get the full commit hash instead of the short form. This is only used for Git and Mercurial. -
strict
(boolean, default: false): If true, then fail instead of falling back to 0.0.0 when there are no tags. -
ignore-untracked
(boolean, default: false): If true, ignore untracked files when determining whether the repository is dirty.
-
Simple example:
[tool.uv-dynamic-versioning]
vcs = "git"
style = "semver"
Alternatives
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
File details
Details for the file uv_dynamic_versioning-0.1.0.tar.gz
.
File metadata
- Download URL: uv_dynamic_versioning-0.1.0.tar.gz
- Upload date:
- Size: 24.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 17cf43d34dd0d6c285c4ba8f47967189bfeed58f75ee5aaf26895345fff1b151 |
|
MD5 | 41d3ef5e9c176baff6d04e6d56557657 |
|
BLAKE2b-256 | b1e71e14d9ac985845b1547905de6f7d9433445fb70c135b6bd0ae677f09c2ec |
File details
Details for the file uv_dynamic_versioning-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: uv_dynamic_versioning-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ae7efd0239a63ebac560b3dfc5fccb304d0144e8ca322c36c733b25ee390ee43 |
|
MD5 | 95d9a45b05779362798d5208a9cab026 |
|
BLAKE2b-256 | 1b55b1c56c36ab3fac0ed819d23905327bc02eba960c6f779643afbef4cfcd59 |