aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@corte.si>2018-06-16 09:41:15 +1200
committerAldo Cortesi <aldo@corte.si>2018-06-16 09:48:21 +1200
commitbf791ba1d5fc7b06178e077c9e4b6583296eed07 (patch)
tree56578fe2bb69a3c46ea2085c52fcb34444397ea6
parentff8a9f5440bf9c75a8c8213faec0bd3ce7cd83f4 (diff)
downloadmitmproxy-bf791ba1d5fc7b06178e077c9e4b6583296eed07.tar.gz
mitmproxy-bf791ba1d5fc7b06178e077c9e4b6583296eed07.tar.bz2
mitmproxy-bf791ba1d5fc7b06178e077c9e4b6583296eed07.zip
cibuild: refactor to handle v prefix for release tag names
-rwxr-xr-xrelease/cibuild.py30
-rw-r--r--test/release/test_cibuild.py39
2 files changed, 47 insertions, 22 deletions
diff --git a/release/cibuild.py b/release/cibuild.py
index 2d11d69a..734eaf39 100755
--- a/release/cibuild.py
+++ b/release/cibuild.py
@@ -184,25 +184,17 @@ class BuildEnviron:
"""
with open(pathlib.Path(self.root_dir) / "mitmproxy" / "version.py") as f:
contents = f.read()
-
version = re.search(r'^VERSION = "(.+?)"', contents, re.M).group(1)
- if self.tag:
- # For (tagged) releases, we are strict:
- # 1. The tagname must match the version in mitmproxy/version.py
- # 2. The version info must be in canonical form (as recommended in PEP 440).
-
- if version != self.tag:
+ if self.is_prod_release:
+ # For production releases, we require strict version equality
+ if self.version != version:
raise ValueError(f"Tag is {self.tag}, but mitmproxy/version.py is {version}.")
- try:
- parver.Version.parse(version, strict=True)
- except parver.ParseError as e:
- raise ValueError(str(e)) from e
else:
# For snapshots, we only ensure that mitmproxy/version.py contains a dev release.
version_info = parver.Version.parse(version)
if not version_info.is_devrelease:
- raise ValueError("Releases must be tagged.")
+ raise ValueError(f"Non-production releases must have dev suffix: {version}")
@property
def has_docker_creds(self) -> bool:
@@ -265,10 +257,18 @@ class BuildEnviron:
@property
def version(self):
- name = self.tag or self.branch
- if not name:
+ if self.tag:
+ if self.tag.startswith("v"):
+ try:
+ parver.Version.parse(self.tag[1:], strict=True)
+ except parver.ParseError as e:
+ return self.tag
+ return self.tag[1:]
+ return self.tag
+ elif self.branch:
+ return self.branch
+ else:
raise BuildError("We're on neither a tag nor a branch - could not establish version")
- return name
def build_wheel(be: BuildEnviron): # pragma: no cover
diff --git a/test/release/test_cibuild.py b/test/release/test_cibuild.py
index efa2f072..9983576a 100644
--- a/test/release/test_cibuild.py
+++ b/test/release/test_cibuild.py
@@ -82,7 +82,7 @@ def test_buildenviron_releasetag():
be = cibuild.BuildEnviron(
system="Linux",
root_dir="/foo",
- travis_tag="0.0.1",
+ travis_tag="v0.0.1",
travis_branch="v0.x",
should_build_wheel=True,
should_build_docker=True,
@@ -91,7 +91,7 @@ def test_buildenviron_releasetag():
docker_username="foo",
docker_password="bar",
)
- assert be.tag == "0.0.1"
+ assert be.tag == "v0.0.1"
assert be.branch == "v0.x"
assert be.version == "0.0.1"
assert be.upload_dir == "0.0.1"
@@ -101,8 +101,32 @@ def test_buildenviron_releasetag():
assert be.is_prod_release
+def test_buildenviron_namedtag():
+ # Simulates a non-release tag on a branch.
+ be = cibuild.BuildEnviron(
+ system="Linux",
+ root_dir="/foo",
+ travis_tag="anyname",
+ travis_branch="v0.x",
+ should_build_wheel=True,
+ should_build_docker=True,
+ should_build_pyinstaller=True,
+ has_twine_creds=True,
+ docker_username="foo",
+ docker_password="bar",
+ )
+ assert be.tag == "anyname"
+ assert be.branch == "v0.x"
+ assert be.version == "anyname"
+ assert be.upload_dir == "anyname"
+ assert be.docker_tag == "mitmproxy/mitmproxy:anyname"
+ assert not be.should_upload_pypi
+ assert not be.should_upload_docker
+ assert not be.is_prod_release
+
+
def test_buildenviron_branch():
- # Simulates a development branch on the main repo
+ # Simulates a commit on a development branch on the main repo
be = cibuild.BuildEnviron(
system="Linux",
root_dir="/foo",
@@ -163,11 +187,12 @@ def test_buildenviron_windows(tmpdir):
@pytest.mark.parametrize("version, tag, ok", [
("3.0.0.dev", "", True), # regular snapshot
- ("3.0.0.dev", "3.0.0", False), # forgot to remove ".dev" on bump
+ ("3.0.0.dev", "v3.0.0", False), # forgot to remove ".dev" on bump
("3.0.0", "", False), # forgot to re-add ".dev"
- ("3.0.0", "4.0.0", False), # version mismatch
- ("3.0.0", "3.0.0", True), # regular release
- ("3.0.0.rc1", "3.0.0.rc1", False), # non-canonical.
+ ("3.0.0", "v4.0.0", False), # version mismatch
+ ("3.0.0", "v3.0.0", True), # regular release
+ ("3.0.0.rc1", "v3.0.0.rc1", False), # non-canonical.
+ ("3.0.0.dev", "anyname", True), # tagged test/dev release
])
def test_buildenviron_check_version(version, tag, ok, tmpdir):
tmpdir.mkdir("mitmproxy").join("version.py").write(f'VERSION = "{version}"')