From ff8a9f5440bf9c75a8c8213faec0bd3ce7cd83f4 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 16 Jun 2018 09:07:37 +1200 Subject: Sync CHANGELOG for v4.x --- CHANGELOG | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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 -- cgit v1.2.3 From bf791ba1d5fc7b06178e077c9e4b6583296eed07 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 16 Jun 2018 09:41:15 +1200 Subject: cibuild: refactor to handle v prefix for release tag names --- release/cibuild.py | 30 +++++++++++++++--------------- test/release/test_cibuild.py | 39 ++++++++++++++++++++++++++++++++------- 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}"') -- cgit v1.2.3 From 85526e5370e32a93b7086648ece12c3bd5269db8 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 16 Jun 2018 10:17:59 +1200 Subject: cibuild: Match Travis env variable behaviour Whenever TRAVIS_TAG is non-empty, TRAVIS_BRANCH is over-ridden to match the TRAVIS_TAG value. Adjust our tests to reflect this, and add a sanity check that fails hard if this constraint is ever not met. See https://github.com/travis-ci/travis-ci/issues/4745 --- release/cibuild.py | 8 +++++++- test/release/test_cibuild.py | 26 ++++++++++++++++++-------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/release/cibuild.py b/release/cibuild.py index 734eaf39..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 @@ -202,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) diff --git a/test/release/test_cibuild.py b/test/release/test_cibuild.py index 9983576a..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 @@ -83,7 +91,7 @@ def test_buildenviron_releasetag(): system="Linux", root_dir="/foo", travis_tag="v0.0.1", - travis_branch="v0.x", + travis_branch="v0.0.1", should_build_wheel=True, should_build_docker=True, should_build_pyinstaller=True, @@ -92,7 +100,7 @@ def test_buildenviron_releasetag(): docker_password="bar", ) assert be.tag == "v0.0.1" - assert be.branch == "v0.x" + 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" @@ -107,7 +115,7 @@ def test_buildenviron_namedtag(): system="Linux", root_dir="/foo", travis_tag="anyname", - travis_branch="v0.x", + travis_branch="anyname", should_build_wheel=True, should_build_docker=True, should_build_pyinstaller=True, @@ -116,7 +124,7 @@ def test_buildenviron_namedtag(): docker_password="bar", ) assert be.tag == "anyname" - assert be.branch == "v0.x" + assert be.branch == "anyname" assert be.version == "anyname" assert be.upload_dir == "anyname" assert be.docker_tag == "mitmproxy/mitmproxy:anyname" @@ -152,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 == { @@ -170,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 == { @@ -193,13 +201,15 @@ def test_buildenviron_windows(tmpdir): ("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() -- cgit v1.2.3 From f5a6499b15df194c5d3e96fa22d010d534b42b1e Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 16 Jun 2018 10:59:24 +1200 Subject: Simpler addon clear mechanism This should improve test robustness --- mitmproxy/addonmanager.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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): """ -- cgit v1.2.3