-
Notifications
You must be signed in to change notification settings - Fork 264
Description
Question
I'm running into issues with python-semantic-release and poetry with my dev builds. I probably have some config set wrong, but python-semantic-release has generated version = "0.8.0-dev.2" in my pyproject.toml and when I run poetry build I end up with
Building my-project (0.8.0-dev.2)
- Building sdist
- Built my-project-0.8.0.dev2.tar.gz
- Building wheel
- Built my-project-0.8.0.dev2-py3-none-any.whl
Note there's a . (period) between the dev token and the number 2 in the python-semantic-release generated version string but not in the filename. This is causing me grief because in my build script I'm using poetry version to find the file that was created, and I cannot because they don't match.
It looks to me like python-semantic-release is generating a version that matches the longer regex from https://peps.python.org/pep-0440/#appendix-b-parsing-version-strings-with-regular-expressions but it doesn't match the "canonical" version (r'^([1-9][0-9]*!)?(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))*((a|b|rc)(0|[1-9][0-9]*))?(\.post(0|[1-9][0-9]*))?(\.dev(0|[1-9][0-9]*))?$')
https://packaging.python.org/en/latest/specifications/version-specifiers/#version-specifiers also states
The canonical public version identifiers MUST comply with the following scheme:
[N!]N(.N)*[{a|b|rc}N][.postN][.devN]
Which isn't true for 0.8.0-dev.2 (should be 0.8.0.dev2 if I'm reading this correctly).
I'm assuming that poetry build "canonicalizes" the version when creating the sdist/wheel files?
Is it possible to ensure that python-semantic-release only generates "canonical" version strings in the first place? Or am I missing something?
Configuration
[tool.semantic_release]
upload_to_pypi = false
upload_to_vcs_release = false
build_command = "./scripts/build.sh && ./scripts/publish.sh"
tag_format = "v{version}"
version_toml = [
"pyproject.toml:tool.poetry.version"
]
[tool.semantic_release.branches.main]
match = "(main|master)"
prerelease_token = "rc"
prerelease = false
[tool.semantic_release.branches.other]
match = "^(feat|fix|perf)/.+"
prerelease_token = "dev"
prerelease = true