Skip to main content

Poetry plugin to get package version from git

Project description

Poetry Git Version Plugin

Poetry plugin to set package version based on git tag.

PyPI PyPI - Python Version GitLab last commit

Test coverage Downloads GitLab stars

Functionality

  • Git tag parsing
  • Alpha version making
  • Setting found or generated version as package poetry.version
  • Maintenance of PEP 440
  • Command to output a new version

Quick start

poetry self add poetry-git-version-plugin
poetry git-version # Write package version based on git tag
poetry build # Build package with version based on git tag

Dependencies

Installed Git and:

[tool.poetry.dependencies]
python = ">=3.8"
poetry = ">=1.2.2"

Configs

make_alpha_version

If the tag is not found on the HEAD, then the version is built based on the last found tag and the HEAD.

  • type: bool
  • Default = true
  • Example: 1.3.2a5
[tool.poetry-git-version-plugin]
make_alpha_version = true

alpha_version_format

Format for alpha version

  • Type: str
  • Default = '{version}a{distance}'
  • Example:
    • alpha_version_format = '{version}a{distance}' -> 1.3.2a5
    • alpha_version_format = '{version}a{distance}+{commit_hash}' -> 1.3.2a5+5babef6
  • Available variables:
    • version: Last found tag
    • distance: Distance from last found tag to HEAD
    • commit_hash: Commit hash
[tool.poetry-git-version-plugin]
alpha_version_format = '{version}a{distance}'

Ignore errors

Three variables to ignore errors

  • Type: bool
  • Default = true
[tool.poetry-git-version-plugin]
# Ignore mismatch error PEP 440 version format
ignore_pep440 = true

# Ignore mismatch error PEP 440 public version format
ignore_public_pep440 = true

# Ignore all errors
# including version not found errors
ignore_errors = true

Use cases

Publishing python package to pypi via poetry with version equal to git tag

.gitlab-ci.yml:

pypi:
  stage: publishing
  image: python:3.10
  tags:
    - docker
  script:
    - 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 --build
  rules:
    - if: $CI_COMMIT_TAG
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
  • When 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

Change the alpha version template:

[tool.poetry-git-version-plugin]
alpha_version_format = '{version}a{distance}+{commit_hash}'

.gitlab-ci.yml:

pypi:
  stage: publishing
  image: python:3.10
  tags:
    - docker
  script:
    - 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 --build
  rules:
    - if: $CI_COMMIT_TAG
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
  • When creating a git tag: new package with version == {TAG}
  • When pushing to CI_DEFAULT_BRANCH: new package with version == {TAG}a{N}+{COMMIT_HASH}

Contribute

Issue Tracker: https://gitlab.com/rocshers/python/poetry-git-version-plugin/-/issues
Source Code: https://gitlab.com/rocshers/python/poetry-git-version-plugin

Before adding changes:

make install-dev

After changes:

make format test

Download files

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

Source Distribution

poetry_git_version_plugin-0.1.6a1.tar.gz (6.4 kB view hashes)

Uploaded Source

Built Distribution

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