cibuild: permit non-dev versions on maintenance branches

Cater for the corner case where commits are incorporated on a maintenance
branch. We should be able to test these without adding a dev suffix to the tool
versions.
This commit is contained in:
Aldo Cortesi 2018-06-16 15:09:34 +12:00
parent 94a22b8795
commit 9463fee764
2 changed files with 44 additions and 4 deletions

View File

@ -196,12 +196,24 @@ class BuildEnviron:
# 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}.")
else:
# For snapshots, we only ensure that mitmproxy/version.py contains a dev release.
elif not self.is_maintenance_branch:
# Commits on maintenance branches don't need the dev suffix. This
# allows us to incorporate and test commits between tagged releases.
# 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(f"Non-production releases must have dev suffix: {version}")
@property
def is_maintenance_branch(self) -> bool:
"""
Is this an untagged commit on a maintenance branch?
"""
if not self.tag and self.branch and re.match(r"v\d+\.x", self.branch):
return True
return False
@property
def has_docker_creds(self) -> bool:
return bool(self.docker_username and self.docker_password)

View File

@ -64,6 +64,7 @@ def test_buildenviron_pr():
)
assert be.is_pull_request
assert not be.is_prod_release
assert not be.is_maintenance_branch
def test_buildenviron_commit():
@ -83,6 +84,7 @@ def test_buildenviron_commit():
assert not be.should_upload_pypi
assert be.should_upload_docker
assert not be.is_prod_release
assert not be.is_maintenance_branch
def test_buildenviron_releasetag():
@ -107,6 +109,7 @@ def test_buildenviron_releasetag():
assert be.should_upload_pypi
assert be.should_upload_docker
assert be.is_prod_release
assert not be.is_maintenance_branch
def test_buildenviron_namedtag():
@ -131,9 +134,10 @@ def test_buildenviron_namedtag():
assert not be.should_upload_pypi
assert not be.should_upload_docker
assert not be.is_prod_release
assert not be.is_maintenance_branch
def test_buildenviron_branch():
def test_buildenviron_dev_branch():
# Simulates a commit on a development branch on the main repo
be = cibuild.BuildEnviron(
system="Linux",
@ -153,6 +157,30 @@ def test_buildenviron_branch():
assert be.upload_dir == "branches/mybranch"
assert not be.should_upload_pypi
assert not be.should_upload_docker
assert not be.is_maintenance_branch
def test_buildenviron_maintenance_branch():
# Simulates a commit on a release maintenance branch on the main repo
be = cibuild.BuildEnviron(
system="Linux",
root_dir="/foo",
travis_tag="",
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 == ""
assert be.branch == "v0.x"
assert be.version == "v0.x"
assert be.upload_dir == "branches/v0.x"
assert not be.should_upload_pypi
assert not be.should_upload_docker
assert be.is_maintenance_branch
def test_buildenviron_osx(tmpdir):
@ -209,7 +237,7 @@ def test_buildenviron_check_version(version, tag, ok, tmpdir):
be = cibuild.BuildEnviron(
root_dir=tmpdir,
travis_tag=tag,
travis_branch=tag
travis_branch=tag or "branch",
)
if ok:
be.check_version()