環境
- Python 3.11.2
- poetry-dynamic-versioning v0.21.4
- poetry 1.4.2
はじめに
Pythonでツールを開発しています。
poetry-dynamic-versioningを使って、GitHubのバージョンタグから、バージョン情報を生成するようにしました。その際にやったことなどをメモとして残しておきます。
poetry-dynamic-versioningの導入前の状態
[tool.poetry]
name = "awesome"
authors = ["yuji38kwmt"]
version = "0.69.1"
description = ""
packages = [
{ include = "awesome" }
]
[tool.poetry.dependencies]
python = "^3.11"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
version = "0.69.1"
poetry-dynamic-versioningの導入後の状態
[tool.poetry]
# ...
version = "0.0.0" # poetry-dynamic-versioningによって書き換わる
# ...
[tool.poetry-dynamic-versioning]
enable = true
format = "{base}"
[build-system]
requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning"]
build-backend = "poetry_dynamic_versioning.backend"
version = "0.0.0" # poetry-dynamic-versioningによって書き換わる
解説
__version__.py
のバージョンの置き換え
デフォルトでは["*.py", "*/__init__.py", "*/__version__.py", "*/_version.py"]
のバージョン情報が置き換わります。
補足
最新のバージョンタグが付与されたコミットと一致していない場合
poetry build
したときのコミットが、最新のバージョンタグが付与されたコミットと一致しない場合、0.68.0.post10.dev0+a78179f
のようなバージョンになり、バージョンタグに存在しない情報も付与されます。
最初の0.68.0
はバージョンタグから取得した情報(style
設定ではbase
という名前で参照可能)です。.post10
の10
は最新のバージョンタグから、離れているコミットの個数(style
設定ではdistance
という名前で参照可能)です。+
以降のa78179f
はコミットのハッシュ値です。
poetry build
したときのコミットが、最新のバージョンタグが付与されたコミットと一致する場合は、0.68.0
というバージョンになります。
style
の設定
format
,style
を指定しない場合は PEP 440に従ったバージョンになります。
style (string, default: unset): One of: pep440, semver, pvp. These are preconfigured output formats. If you set both a style and a format, then the format will be validated against the style's rules. If style is unset, the default output format will follow PEP 440, but a custom format will only be validated if style is set explicitly.1
style
には、以下の値を指定できます。styleの値によって、どのようなバージョンになるかを確認しました。
-
pep440
(PEP 440) :0.68.0.post14.dev0+424893f
-
semver
(Semantic Versioning) :0.68.0.post14+424893f
-
pvp
(Haskell Package Versioning Policy) :0.68.0-post-14-424893f
(PEP440に従っていないため、poetry build
は失敗します)
format
の設定
format
に指定できる変数の説明は、poetry-dynamic-versioningが依存しているdunamaiというライブラリのページに詳細が記載されています。
poetry build
したときのコミットが、最新のバージョンタグが付与されたコミットと一致しない場合でも、0.68.0
のようなバージョンにしたい場合は、format = "{base}"
を設定すればよいです。
バージョンを生成する処理
バーションを生成の具体的な処理は、以下のコードが参考になります。
参考にしたサイト