You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by tv...@apache.org on 2022/08/17 08:08:30 UTC
[buildstream] 04/06: Mark unstable BuildStream releases with PEP440-compatible postfix
This is an automated email from the ASF dual-hosted git repository.
tvb pushed a commit to branch tristan/build-wheels
in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 8dd3c2d8191b67d47ae720f6d38dda56eb323d53
Author: Sam Thursfield <sa...@codethink.co.uk>
AuthorDate: Fri Aug 12 12:22:55 2022 +0200
Mark unstable BuildStream releases with PEP440-compatible postfix
PyPI and Pip use the PEP440 version standard, which uses explicit
'.dev', '.a', '.b' and '.rc' suffixes to mark "unstable" releases.
BuildStream uses the even/odd convention. When running `pip install`
we want Pip to prefer a stable 2.0.0 release over an unstable 2.1.0
release. To make this work, all unstable releases now have a .dev0
suffix automatically added in setup.py, e.g. `2.1.0.dev0`.
This is necessary for us to fully automate releases to PyPI from GitHub
Actions.
---
pyproject.toml | 3 ++-
setup.cfg | 2 +-
setup.py | 42 +++++++++++++++++++++++++++++++++++++++++-
3 files changed, 44 insertions(+), 3 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index f3eadb7af..ea9f0df05 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,8 @@ requires = [
"setuptools>=36.6.0",
# In order to build wheels, and as required by PEP 517
"wheel",
- "Cython"
+ "Cython",
+ "packaging",
]
build-backend = "setuptools.build_meta"
diff --git a/setup.cfg b/setup.cfg
index aea4bdcc8..d220e3952 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
[versioneer]
VCS = git
-style = pep440
+style = pep440_buildstream
versionfile_source = src/buildstream/_version.py
versionfile_build = buildstream/_version.py
tag_prefix =
diff --git a/setup.py b/setup.py
index 820b0588c..d118e516c 100755
--- a/setup.py
+++ b/setup.py
@@ -23,6 +23,8 @@ from pathlib import Path
import re
import sys
+import packaging.version
+
###################################
# Ensure we have a version number #
@@ -32,11 +34,49 @@ import sys
sys.path.append(os.path.dirname(__file__))
import versioneer # pylint: disable=wrong-import-position
+
+def mark_unstable_version(version_string):
+ # When publishing to PyPI we must be sure that unstable releases are
+ # marked as such, so `pip install` doesn't install them by default.
+
+ v = packaging.version.parse(version_string)
+
+ # BuildStream version scheme: if MINOR version is odd, then
+ # this is an unstable release.
+ is_unstable_release = v.minor % 2 != 0
+
+ # Python PEP440 version scheme: use an explicit postfix to mark development
+ # and prereleases.
+ if is_unstable_release:
+ if v.local or v.is_devrelease or v.is_prerelease:
+ # PyPI will ignore these without us marking them.
+ return version_string
+ else:
+ return version_string + ".dev0"
+
+ return version_string
+
+
+# Extend versioneer to support our custom version style.
+_render = versioneer.render
+
+
+def render_version(pieces, style):
+ if style == "pep440_buildstream":
+ result = _render(pieces, "pep440")
+ result["version"] = mark_unstable_version(result["version"])
+ else:
+ result = _render(pieces, style)
+ return result
+
+
+versioneer.render = render_version
+
version = versioneer.get_version()
if version.startswith("0+untagged"):
print(
- "Your git repository has no tags - BuildStream can't " "determine its version. Please run `git fetch --tags`.",
+ "Your git repository has no tags - BuildStream can't determine its version. Please run `git fetch --tags`.",
file=sys.stderr,
)
sys.exit(1)