setuptools_scm
setuptools_scm copied to clipboard
Incorrect PEP440 pre-release version handling
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
The bump for tag+1 intend
The mission prerelease in the tuple is a bug
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.
A tag with .dev at the end tells it the start of a new line
reopened due to yank