Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect PEP440 pre-release version handling #1119

Open
pycaw opened this issue Mar 18, 2025 · 4 comments · Fixed by #1121
Open

Incorrect PEP440 pre-release version handling #1119

pycaw opened this issue Mar 18, 2025 · 4 comments · Fixed by #1121
Labels

Comments

@pycaw
Copy link

pycaw commented Mar 18, 2025

Issue 1

No pre-release in version tuple. Contents of the version file generated from tag v1.0.0a1 (HEAD is at tag):

8228a06 (HEAD, tag: v1.0.0a1) added setuptools-scm
624de26 initial commit
__version__ = version = '1.0.0a1'
__version_tuple__ = version_tuple = (1, 0, 0)

Issue 2

Arbitrary pre-release version bump with HEAD at tag + 1. Should remain a1 not bumped to a2. Issue 1 persists as well. "modif" commit is just a string update to a print function call.

85a5021 (HEAD -> master) modif
8228a06 (tag: v1.0.0a1) added setuptools-scm
624de26 initial commit
__version__ = version = '1.0.0a2.dev1+g85a5021'
__version_tuple__ = version_tuple = (1, 0, 0, 'dev1', 'g85a5021')

I experienced these using hatch-vcs, I was able reproduce using setuptools-scm directly.

Reproducing

uv init -p 3.10 --package setuptools-scm-test --build-backend setuptools

Then edit the pyproject so setuptools-scm is set up.

[project]
name = "setuptools-scm-test"
dynamic = ["version"]
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10"
dependencies = []

[project.scripts]
setuptools-scm-test = "setuptools_scm_test:main"

[build-system]
requires = ["setuptools>=64", "setuptools-scm>=8"]
build-backend = "setuptools.build_meta"

[tool.setuptools_scm]
version_file = "src/setuptools_scm_test/_version.py"

Then commit and tag as shown above. I used uv, so building is uv build.

Issue 1 build output - at tag
$ uv build
Building source distribution...
running egg_info
writing src/setuptools_scm_test.egg-info/PKG-INFO
writing dependency_links to src/setuptools_scm_test.egg-info/dependency_links.txt
writing entry points to src/setuptools_scm_test.egg-info/entry_points.txt
writing top-level names to src/setuptools_scm_test.egg-info/top_level.txt
writing manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
running sdist
running egg_info
writing src/setuptools_scm_test.egg-info/PKG-INFO
writing dependency_links to src/setuptools_scm_test.egg-info/dependency_links.txt
writing entry points to src/setuptools_scm_test.egg-info/entry_points.txt
writing top-level names to src/setuptools_scm_test.egg-info/top_level.txt
writing manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
running check
creating setuptools_scm_test-1.0.0a1
creating setuptools_scm_test-1.0.0a1/src/setuptools_scm_test
creating setuptools_scm_test-1.0.0a1/src/setuptools_scm_test.egg-info
copying files to setuptools_scm_test-1.0.0a1...
copying .gitignore -> setuptools_scm_test-1.0.0a1
copying .python-version -> setuptools_scm_test-1.0.0a1
copying README.md -> setuptools_scm_test-1.0.0a1
copying pyproject.toml -> setuptools_scm_test-1.0.0a1
copying src/setuptools_scm_test/__init__.py -> setuptools_scm_test-1.0.0a1/src/setuptools_scm_test
copying src/setuptools_scm_test/_version.py -> setuptools_scm_test-1.0.0a1/src/setuptools_scm_test
copying src/setuptools_scm_test.egg-info/PKG-INFO -> setuptools_scm_test-1.0.0a1/src/setuptools_scm_test.egg-info
copying src/setuptools_scm_test.egg-info/SOURCES.txt -> setuptools_scm_test-1.0.0a1/src/setuptools_scm_test.egg-info
copying src/setuptools_scm_test.egg-info/dependency_links.txt -> setuptools_scm_test-1.0.0a1/src/setuptools_scm_test.egg-info
copying src/setuptools_scm_test.egg-info/entry_points.txt -> setuptools_scm_test-1.0.0a1/src/setuptools_scm_test.egg-info
copying src/setuptools_scm_test.egg-info/top_level.txt -> setuptools_scm_test-1.0.0a1/src/setuptools_scm_test.egg-info
copying src/setuptools_scm_test.egg-info/SOURCES.txt -> setuptools_scm_test-1.0.0a1/src/setuptools_scm_test.egg-info
Writing setuptools_scm_test-1.0.0a1/setup.cfg
Creating tar archive
removing 'setuptools_scm_test-1.0.0a1' (and everything under it)
Building wheel from source distribution...
running egg_info
writing src/setuptools_scm_test.egg-info/PKG-INFO
writing dependency_links to src/setuptools_scm_test.egg-info/dependency_links.txt
writing entry points to src/setuptools_scm_test.egg-info/entry_points.txt
writing top-level names to src/setuptools_scm_test.egg-info/top_level.txt
ERROR setuptools_scm._file_finders.git listing git files failed - pretending there aren't any
reading manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
writing manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
running bdist_wheel
running build
running build_py
creating build/lib/setuptools_scm_test
copying src/setuptools_scm_test/__init__.py -> build/lib/setuptools_scm_test
copying src/setuptools_scm_test/_version.py -> build/lib/setuptools_scm_test
running egg_info
writing src/setuptools_scm_test.egg-info/PKG-INFO
writing dependency_links to src/setuptools_scm_test.egg-info/dependency_links.txt
writing entry points to src/setuptools_scm_test.egg-info/entry_points.txt
writing top-level names to src/setuptools_scm_test.egg-info/top_level.txt
ERROR setuptools_scm._file_finders.git listing git files failed - pretending there aren't any
reading manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
writing manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64/wheel
creating build/bdist.linux-x86_64/wheel/setuptools_scm_test
copying build/lib/setuptools_scm_test/__init__.py -> build/bdist.linux-x86_64/wheel/./setuptools_scm_test
copying build/lib/setuptools_scm_test/_version.py -> build/bdist.linux-x86_64/wheel/./setuptools_scm_test
running install_egg_info
Copying src/setuptools_scm_test.egg-info to build/bdist.linux-x86_64/wheel/./setuptools_scm_test-1.0.0a1-py3.10.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/setuptools_scm_test-1.0.0a1.dist-info/WHEEL
creating '/home/user/lib/temp/setuptools-scm-test/dist/.tmp-rumozrye/setuptools_scm_test-1.0.0a1-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'setuptools_scm_test/__init__.py'
adding 'setuptools_scm_test/_version.py'
adding 'setuptools_scm_test-1.0.0a1.dist-info/METADATA'
adding 'setuptools_scm_test-1.0.0a1.dist-info/WHEEL'
adding 'setuptools_scm_test-1.0.0a1.dist-info/entry_points.txt'
adding 'setuptools_scm_test-1.0.0a1.dist-info/top_level.txt'
adding 'setuptools_scm_test-1.0.0a1.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
Successfully built dist/setuptools_scm_test-1.0.0a1.tar.gz
Successfully built dist/setuptools_scm_test-1.0.0a1-py3-none-any.whl
Issue 2 build output - at tag +1
$ uv build
Building source distribution...
running egg_info
writing src/setuptools_scm_test.egg-info/PKG-INFO
writing dependency_links to src/setuptools_scm_test.egg-info/dependency_links.txt
writing entry points to src/setuptools_scm_test.egg-info/entry_points.txt
writing top-level names to src/setuptools_scm_test.egg-info/top_level.txt
writing manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
running sdist
running egg_info
writing src/setuptools_scm_test.egg-info/PKG-INFO
writing dependency_links to src/setuptools_scm_test.egg-info/dependency_links.txt
writing entry points to src/setuptools_scm_test.egg-info/entry_points.txt
writing top-level names to src/setuptools_scm_test.egg-info/top_level.txt
writing manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
running check
creating setuptools_scm_test-1.0.0a2.dev1+g85a5021
creating setuptools_scm_test-1.0.0a2.dev1+g85a5021/src/setuptools_scm_test
creating setuptools_scm_test-1.0.0a2.dev1+g85a5021/src/setuptools_scm_test.egg-info
copying files to setuptools_scm_test-1.0.0a2.dev1+g85a5021...
copying .gitignore -> setuptools_scm_test-1.0.0a2.dev1+g85a5021
copying .python-version -> setuptools_scm_test-1.0.0a2.dev1+g85a5021
copying README.md -> setuptools_scm_test-1.0.0a2.dev1+g85a5021
copying pyproject.toml -> setuptools_scm_test-1.0.0a2.dev1+g85a5021
copying src/setuptools_scm_test/__init__.py -> setuptools_scm_test-1.0.0a2.dev1+g85a5021/src/setuptools_scm_test
copying src/setuptools_scm_test/_version.py -> setuptools_scm_test-1.0.0a2.dev1+g85a5021/src/setuptools_scm_test
copying src/setuptools_scm_test.egg-info/PKG-INFO -> setuptools_scm_test-1.0.0a2.dev1+g85a5021/src/setuptools_scm_test.egg-info
copying src/setuptools_scm_test.egg-info/SOURCES.txt -> setuptools_scm_test-1.0.0a2.dev1+g85a5021/src/setuptools_scm_test.egg-info
copying src/setuptools_scm_test.egg-info/dependency_links.txt -> setuptools_scm_test-1.0.0a2.dev1+g85a5021/src/setuptools_scm_test.egg-info
copying src/setuptools_scm_test.egg-info/entry_points.txt -> setuptools_scm_test-1.0.0a2.dev1+g85a5021/src/setuptools_scm_test.egg-info
copying src/setuptools_scm_test.egg-info/top_level.txt -> setuptools_scm_test-1.0.0a2.dev1+g85a5021/src/setuptools_scm_test.egg-info
copying src/setuptools_scm_test.egg-info/SOURCES.txt -> setuptools_scm_test-1.0.0a2.dev1+g85a5021/src/setuptools_scm_test.egg-info
Writing setuptools_scm_test-1.0.0a2.dev1+g85a5021/setup.cfg
Creating tar archive
removing 'setuptools_scm_test-1.0.0a2.dev1+g85a5021' (and everything under it)
Building wheel from source distribution...
running egg_info
writing src/setuptools_scm_test.egg-info/PKG-INFO
writing dependency_links to src/setuptools_scm_test.egg-info/dependency_links.txt
writing entry points to src/setuptools_scm_test.egg-info/entry_points.txt
writing top-level names to src/setuptools_scm_test.egg-info/top_level.txt
ERROR setuptools_scm._file_finders.git listing git files failed - pretending there aren't any
reading manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
writing manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
running bdist_wheel
running build
running build_py
creating build/lib/setuptools_scm_test
copying src/setuptools_scm_test/__init__.py -> build/lib/setuptools_scm_test
copying src/setuptools_scm_test/_version.py -> build/lib/setuptools_scm_test
running egg_info
writing src/setuptools_scm_test.egg-info/PKG-INFO
writing dependency_links to src/setuptools_scm_test.egg-info/dependency_links.txt
writing entry points to src/setuptools_scm_test.egg-info/entry_points.txt
writing top-level names to src/setuptools_scm_test.egg-info/top_level.txt
ERROR setuptools_scm._file_finders.git listing git files failed - pretending there aren't any
reading manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
writing manifest file 'src/setuptools_scm_test.egg-info/SOURCES.txt'
installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64/wheel
creating build/bdist.linux-x86_64/wheel/setuptools_scm_test
copying build/lib/setuptools_scm_test/__init__.py -> build/bdist.linux-x86_64/wheel/./setuptools_scm_test
copying build/lib/setuptools_scm_test/_version.py -> build/bdist.linux-x86_64/wheel/./setuptools_scm_test
running install_egg_info
Copying src/setuptools_scm_test.egg-info to build/bdist.linux-x86_64/wheel/./setuptools_scm_test-1.0.0a2.dev1+g85a5021-py3.10.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/setuptools_scm_test-1.0.0a2.dev1+g85a5021.dist-info/WHEEL
creating '/home/user/lib/temp/setuptools-scm-test/dist/.tmp-xiwamebx/setuptools_scm_test-1.0.0a2.dev1+g85a5021-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'setuptools_scm_test/__init__.py'
adding 'setuptools_scm_test/_version.py'
adding 'setuptools_scm_test-1.0.0a2.dev1+g85a5021.dist-info/METADATA'
adding 'setuptools_scm_test-1.0.0a2.dev1+g85a5021.dist-info/WHEEL'
adding 'setuptools_scm_test-1.0.0a2.dev1+g85a5021.dist-info/entry_points.txt'
adding 'setuptools_scm_test-1.0.0a2.dev1+g85a5021.dist-info/top_level.txt'
adding 'setuptools_scm_test-1.0.0a2.dev1+g85a5021.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
Successfully built dist/setuptools_scm_test-1.0.0a2.dev1+g85a5021.tar.gz
Successfully built dist/setuptools_scm_test-1.0.0a2.dev1+g85a5021-py3-none-any.whl
@RonnyPfannschmidt
Copy link
Contributor

The bump for tag+1 intend

The mission prerelease in the tuple is a bug

@pycaw
Copy link
Author

pycaw commented Mar 18, 2025

The bump for tag+1 intend

The mission prerelease in the tuple is a bug

Ah, that is intended, I see. I misunderstood. I can adjust my workflow to that. But, if I wanted to, can I turn that off? So that only dev* part is incremented? Weird default though. What if I want my next version to be a different kind of pre-release, like beta? And I never intend to create a tag with the version setuptools-scm thought will come to be.

Solution: Use version_scheme no_guess_dev or only-version.

@RonnyPfannschmidt
Copy link
Contributor

A tag with .dev at the end tells it the start of a new line

RonnyPfannschmidt added a commit that referenced this issue Mar 18, 2025

Unverified

This commit is not signed, but one or more authors requires that any commit attributed to them is signed.
…er-full-version

fixes #1119: consider all version parts for version tuple
@RonnyPfannschmidt
Copy link
Contributor

reopened due to yank

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants