setuptools_scm icon indicating copy to clipboard operation
setuptools_scm copied to clipboard

How to make a release without version bumping?

Open wookayin opened this issue 2 years ago • 7 comments
trafficstars

I've spent more than hour to figure out how to make a release while using setuptools_scm, but it's documented nowhere properly. Some relevant issues are #143 and #767, as well as a SO thread, but they seem pretty outdated.

Here's how I am doing:

# pyproject.toml                                                   
                                                                   
[build-system]                                                     
requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2", "wheel"]
                                                                   
[tool.setuptools_scm]                                              
version_scheme = "release-branch-semver"
write_to = "mypackage/_version.py"                                   

setup.py:

setup(
   name='mypackage',
   # version='...',      # no version= ...
)

Running python setup.py sdist always shows the development version:

$ git checkout -b release-v1.1

# Note that the latest tagged version is v1.0
$ python setup.py --version 
1.1.0.dev35+g5478274

$ python setup.py sdist
(generates 1.1.0.dev35+g5478274 in the metadata)

I tried branch v1.1, creating a tag v1.1 but doesn't work -- it would simply bump up to version to 1.2.0dev0 instead.

I would want to have the version simply set as '1.1' to make a release, but there seems no way to prohibit setuptools_scm from changing the version. Any hints? I hope documentations about how to make a release can be improved.

wookayin avatar Mar 02 '23 16:03 wookayin

Surprisingly, when the following section exists in pyproject.toml,

[tool.setuptools_scm]
write_to = "pkg/_version.py"

setup(version=...) will be completely ignored and the version will be always set by setuptools_scm (no overriding allowed).

wookayin avatar Mar 05 '23 12:03 wookayin

It's not clear what you are doing, is the version file by chance checked into git instead of being ignored?

RonnyPfannschmidt avatar Mar 13 '23 09:03 RonnyPfannschmidt

No, _version.py is gitignored and not tracked (for sure). What else informaiton are you looking for? I think I provided enough information and code excerpts.

Basically, if setuptools_scm is installed, and pyproject.toml configures setuptools_scm in [build-system], python setup.py --version will ignore setup.py version and always show a devel version managed by setuptools_scm. I'd like to know what's a recommended way for release process.

wookayin avatar Mar 13 '23 23:03 wookayin

The output of the SETUPTOOLS_SCM_DEBUG=1 python setup.py - -version would help

RonnyPfannschmidt avatar Mar 14 '23 08:03 RonnyPfannschmidt

$ git clone https://github.com/wookayin/gpustat
$ cd gpustat
$ git checkout 5a18b1c16ab523d0b9709dd835cf354432b28c3b    # release/1.1
$ cat setup.py | grep __version__
__version__ = '1.1.0'
...
version=__version__,

pyproject.toml:

[build-system]
requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2", "wheel"]

[tool.setuptools_scm]
write_to = "gpustat/_version.py"

The debug output:

$ SETUPTOOLS_SCM_DEBUG=1 python setup.py --version

finalize hook {'name': 'gpustat', 'version': '1.1.0', 'author': 'Jongwook Choi', 'author_email': '[email protected]', 'maintainer': None, 'maintainer_email': None, 'url': 'https://github.com/wookayin/gpustat', 
... (omitted) ...
}
abs root {'root': '.', 'relative_to': 'pyproject.toml'}
file pyproject.toml
root '/home/wookayin/gpustat'
relative_to 'pyproject.toml'
dist name: gpustat
version_from_ep setuptools_scm.parse_scm /home/wookayin/gpustat
looking for ep setuptools_scm.parse_scm /home/wookayin/gpustat
found ep EntryPoint(name='.git', value='setuptools_scm.git:parse', group='setuptools_scm.parse_scm') in /home/wookayin/gpustat
GIT_EDITOR nvim
----
cmd:
     git --git-dir /home/wookayin/gpustat/.git rev-parse --show-prefix
 in: /home/wookayin/gpustat
GIT_EDITOR nvim
out:


real root /home/wookayin/gpustat
GIT_EDITOR nvim
----
cmd:
     git --git-dir /home/wookayin/gpustat/.git describe --dirty --tags --long --match "*[0-9]*"
 in: /home/wookayin/gpustat
GIT_EDITOR nvim
out:
     v1.0-37-g5a18b1c

----
cmd:
     git --git-dir /home/wookayin/gpustat/.git rev-parse --abbrev-ref HEAD
 in: /home/wookayin/gpustat
GIT_EDITOR nvim
out:
     release/1.1

----
cmd:
     git --git-dir /home/wookayin/gpustat/.git -c log.showSignature=false log -n 1 HEAD --format=%cI
 in: /home/wookayin/gpustat
GIT_EDITOR nvim
out:
     2023-04-05T10:17:35-04:00

tag v1.0
tag 'v1.0' parsed to {'version': 'v1.0', 'prefix': '', 'suffix': ''}
version pre parse v1.0
version <Version('1.0')>
version v1.0 -> 1.0
EntryPoint(name='.git', value='setuptools_scm.git:parse', group='setuptools_scm.parse_scm') <ScmVersion 1.0 dist=37 node=g5a18b1c dirty=False branch=release/1.1>
scm version <ScmVersion 1.0 dist=37 node=g5a18b1c dirty=False branch=release/1.1>
config {'version_scheme': 'guess-next-dev', 'local_scheme': 'node-and-date'}
ep found: guess-next-dev
version 1.1.dev37
ep found: node-and-date
local_version +g5a18b1c
1.1.dev37+g5a18b1c

Expected: 1.1.0 (it should not override version=... in setup.py)

wookayin avatar Apr 05 '23 14:04 wookayin

Thanks for the note, as far as I can tell this is a oversight in the code for self config, it should warn/fail if Version is statically configured as keyword

It's also incorrect usage to set Version while using setuptools_scm

I believe a example for the release Branch semver as release scheme is needed

RonnyPfannschmidt avatar Apr 05 '23 15:04 RonnyPfannschmidt

please try again with the current version of setuptools_scm - a bug regading config loading vs setup.py usage has been resolved

the last output indicates using the default config instead of the release branch semver one

RonnyPfannschmidt avatar Jan 05 '24 11:01 RonnyPfannschmidt