aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@corte.si>2018-06-16 11:21:22 +1200
committerGitHub <noreply@github.com>2018-06-16 11:21:22 +1200
commit94a22b87954af42d552d2d94a845e764df0d4587 (patch)
treeac7d059d351fa1ccccee5ea76e811d2cd5089750
parent3227f67d883de2b77d83e77d7bc25afb04bc375f (diff)
parentf5a6499b15df194c5d3e96fa22d010d534b42b1e (diff)
downloadmitmproxy-94a22b87954af42d552d2d94a845e764df0d4587.tar.gz
mitmproxy-94a22b87954af42d552d2d94a845e764df0d4587.tar.bz2
mitmproxy-94a22b87954af42d552d2d94a845e764df0d4587.zip
Merge pull request #3204 from cortesi/nurelease
cibuild: cater for tags with "v" prefix
-rw-r--r--CHANGELOG16
-rw-r--r--mitmproxy/addonmanager.py5
-rwxr-xr-xrelease/cibuild.py38
-rw-r--r--test/release/test_cibuild.py61
4 files changed, 89 insertions, 31 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 4997ecd4..7c8b498d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,19 @@
+15 June 2018: mitmproxy 4.0.2
+
+ * Add support for IPv6 transparent mode on Windows (#3174)
+ * Add Docker images for ARMv7 - Raspberry Pi (#3190)
+ * Major overhaul of our release workflow - you probably won't notice it, but for us it's a big thing!
+ * Fix the Python version detection on Python 3.5, we now show a more intuitive error message (#3188)
+ * Fix application shutdown on Windows (#3172)
+ * Fix IPv6 scope suffixes in block addon (#3164)
+ * Fix options update when added (#3157)
+ * Fix "Edit Flow" button in mitmweb (#3136)
+
+17 May 2018: mitmproxy 4.0.1
+
+ ** Bugfixes **
+ * The previous release had a packaging issue, so we bumped it to v4.0.1 and re-released it.
+ * This contains no actual bugfixes or new features.
17 May 2018: mitmproxy 4.0
diff --git a/mitmproxy/addonmanager.py b/mitmproxy/addonmanager.py
index 0b559293..645f3a93 100644
--- a/mitmproxy/addonmanager.py
+++ b/mitmproxy/addonmanager.py
@@ -123,9 +123,10 @@ class AddonManager:
"""
Remove all addons.
"""
- for i in self.chain:
- self.remove(i)
+ for a in self.chain:
+ self.invoke_addon(a, "done")
self.lookup = {}
+ self.chain = []
def get(self, name):
"""
diff --git a/release/cibuild.py b/release/cibuild.py
index 2d11d69a..76eb377e 100755
--- a/release/cibuild.py
+++ b/release/cibuild.py
@@ -63,6 +63,12 @@ class BuildEnviron:
self.travis_tag = travis_tag
self.travis_branch = travis_branch
+
+ if travis_tag and travis_tag != travis_branch:
+ raise ValueError(
+ f"Something is wrong - TRAVIS_TAG={travis_tag}, but TRAVIS_BRANCH={travis_branch}"
+ )
+
self.travis_pull_request = travis_pull_request
self.should_build_wheel = should_build_wheel
@@ -184,25 +190,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:
@@ -210,7 +208,7 @@ class BuildEnviron:
@property
def is_prod_release(self) -> bool:
- if not self.tag:
+ if not (self.tag and self.tag.startswith("v")):
return False
try:
v = parver.Version.parse(self.version, strict=True)
@@ -265,10 +263,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..96280e35 100644
--- a/test/release/test_cibuild.py
+++ b/test/release/test_cibuild.py
@@ -36,6 +36,14 @@ def test_buildenviron_common():
with pytest.raises(cibuild.BuildError):
be.platform_tag
+ with pytest.raises(ValueError, match="TRAVIS_TAG"):
+ be = cibuild.BuildEnviron(
+ system="Linux",
+ root_dir="/foo",
+ travis_tag="one",
+ travis_branch="two",
+ )
+
def test_buildenviron_pr():
# Simulates a PR. We build everything, but don't have access to secret
@@ -82,8 +90,8 @@ def test_buildenviron_releasetag():
be = cibuild.BuildEnviron(
system="Linux",
root_dir="/foo",
- travis_tag="0.0.1",
- travis_branch="v0.x",
+ travis_tag="v0.0.1",
+ travis_branch="v0.0.1",
should_build_wheel=True,
should_build_docker=True,
should_build_pyinstaller=True,
@@ -91,8 +99,8 @@ def test_buildenviron_releasetag():
docker_username="foo",
docker_password="bar",
)
- assert be.tag == "0.0.1"
- assert be.branch == "v0.x"
+ assert be.tag == "v0.0.1"
+ assert be.branch == "v0.0.1"
assert be.version == "0.0.1"
assert be.upload_dir == "0.0.1"
assert be.docker_tag == "mitmproxy/mitmproxy:0.0.1"
@@ -101,8 +109,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="anyname",
+ 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 == "anyname"
+ 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",
@@ -128,7 +160,7 @@ def test_buildenviron_osx(tmpdir):
system="Darwin",
root_dir="/foo",
travis_tag="0.0.1",
- travis_branch="v0.x",
+ travis_branch="0.0.1",
)
assert be.platform_tag == "osx"
assert be.bdists == {
@@ -146,8 +178,8 @@ def test_buildenviron_windows(tmpdir):
be = cibuild.BuildEnviron(
system="Windows",
root_dir="/foo",
- travis_tag="0.0.1",
- travis_branch="v0.x",
+ travis_tag="v0.0.1",
+ travis_branch="v0.0.1",
)
assert be.platform_tag == "windows"
assert be.bdists == {
@@ -163,18 +195,21 @@ 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
+ ("3.0.0", "3.0.0", False), # tagged, but without v prefix
])
def test_buildenviron_check_version(version, tag, ok, tmpdir):
tmpdir.mkdir("mitmproxy").join("version.py").write(f'VERSION = "{version}"')
be = cibuild.BuildEnviron(
root_dir=tmpdir,
- travis_tag=tag
+ travis_tag=tag,
+ travis_branch=tag
)
if ok:
be.check_version()