Package: poetry-git-version-plugin
Poetry Git Version PluginPoetry plugin to set package version based on git tag.FunctionalityGit tagparsingAlpha versionmakingSetting found or generated version as packagepoetry.versionMaintenance ofPEP 440Commandto output a new versionCommandto update the pyproject versionQuick startpoetryselfaddpoetry-git-version-plugin
poetrygit-version# Write package version based on git tagpoetrybuild# Build package with version based on git tagDependenciesInstalledGitand:[tool.poetry.dependencies]python=">=3.8"poetry=">=1.2.2"ConfigsMAKE ALPHA VERSIONIf the tag is not found on the HEAD, then the version is built based on the last found tag and the HEAD.type: boolDefault = trueResult: 1.3.2a5# EnvironmentexportPACKAGE_VERSION_MAKE_ALPHA_VERSION=true# pyproject.toml[tool.poetry-git-version-plugin]make_alpha_version=trueMAIN VERSION FORMATFormat for version.Main version is used if there is git tag on HEAD.Type: strDefault ='{raw_version}'Example:version_format = '{version}+{commit_hash}' ->1.3.2+5babef6version_format = '{major}-{minor}-{patch}' ->1-3-2Available variables# EnvironmentexportPACKAGE_VERSION_VERSION_FORMAT='{version}+{commit_hash}'# pyproject.toml[tool.poetry-git-version-plugin]version_format='{version}+{commit_hash}'Notes:distance - is always 0ALPHA VERSION FORMATFormat for alpha version.Alpha version is used if there is no git tag on HEAD.Type: strDefault ='{version}a{distance}'Example:alpha_version_format = '{version}a{distance}' ->1.3.2a5alpha_version_format = '{version}a{distance}+{commit_hash}' ->1.3.2a5+5babef6Available variables# EnvironmentexportPACKAGE_VERSION_ALPHA_VERSION_FORMAT='{version}a{distance}'# pyproject.toml[tool.poetry-git-version-plugin]alpha_version_format='{version}a{distance}'Ignore errorsThree variables toignore errorsType: boolDefault = true# Ignore mismatch error PEP 440 version format## EnvironmentexportPACKAGE_VERSION_IGNORE_PEP440=true## pyproject.toml[tool.poetry-git-version-plugin]ignore_pep440=true# Ignore mismatch error PEP 440 public version format## EnvironmentexportPACKAGE_VERSION_IGNORE_PUBLIC_PEP440=true## pyproject.toml[tool.poetry-git-version-plugin]ignore_public_pep440=true# Ignore all errors# including version not found errors## EnvironmentexportPACKAGE_VERSION_IGNORE_ERRORS=true## pyproject.toml[tool.poetry-git-version-plugin]ignore_errors=trueVersion's variablesWhen creating a version, you can use a custom template and use prepared variables.You can see the current list in thesourcesmajor: The major version.minor: The minor version.patch: The patch version.version: Combines major, minor, and patch versions as a formatted string.distance: Indicates the distance from the last version.commit_hash: Stores the commit hash associated with the version.raw_version: The original git tag.pre_release: Contains information about pre-release version identifiers.build_metadata: Holds metadata related to the build or version.Commandspoetry git-version$poetrygit-version# Write package version based on git tag1.3.2a5+5babef6poetry set-git-version$poetrygit-version# Set new version in pyprojectThenewversionhasbeeninstalled:1.3.2a5+5babef6

$catpyproject.toml|grepversionversion="1.3.2a5+5babef6"Use casesPublishing python package to pypi via poetry with version equal to git tag.gitlab-ci.yml:pypi:stage:publishingimage:python:3.10tags:-dockerscript:-poetry self add poetry-git-version-plugin-poetry config repositories.pypi https://upload.pypi.org/legacy/-poetry config pypi-token.pypi ${PYPI_TOKEN}-poetry publish -r pypi --buildrules:-if:$CI_COMMIT_TAG-if:$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCHWhen creating a git tag: new package with version == {TAG}When pushing to CI_DEFAULT_BRANCH: new package with version == {TAG}a{N}Publishing python package to private pypi via poetry with version equal to git tag and commit hash.gitlab-ci.yml:pypi:stage:publishingimage:python:3.10tags:-dockerscript:-export PACKAGE_VERSION_ALPHA_VERSION_FORMAT='{version}a{distance}+{commit_hash}'-poetry self add poetry-git-version-plugin-poetry config repositories.gitlab "https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/packages/pypi"-poetry config http-basic.gitlab gitlab-ci-token "$CI_JOB_TOKEN"-poetry publish -r gitlab --buildrules:-if:$CI_COMMIT_TAG-if:$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCHWhen creating a git tag: new package with version == {TAG}When pushing to CI_DEFAULT_BRANCH: new package with version == {TAG}a{N}+{COMMIT_HASH}ContributeIssue Tracker:https://gitlab.com/rocshers/python/poetry-git-version-plugin/-/issuesSource Code:https://gitlab.com/rocshers/python/poetry-git-version-pluginBefore adding changes:makeinstall-devAfter changes:makeformattest