Merge pull request #3156 from cortesi/cibuild2

More cibuild tweaks
This commit is contained in:
Aldo Cortesi 2018-05-25 13:13:10 +12:00 committed by GitHub
commit 76c056affd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 90 additions and 77 deletions

View File

@ -41,7 +41,6 @@ release for! The command examples assume that you have a git remote called
- Please check https://hub.docker.com/r/mitmproxy/mitmproxy/tags/ about the latest version
- Update `latest` tag: TODO write instructions
## Website
- Update version here:
https://github.com/mitmproxy/www/blob/master/src/config.toml

View File

@ -13,6 +13,7 @@ import zipfile
import click
import cryptography.fernet
import parver
@contextlib.contextmanager
@ -106,64 +107,6 @@ class BuildEnviron:
docker_password = os.environ.get("DOCKER_PASSWORD"),
)
@property
def has_docker_creds(self) -> bool:
return self.docker_username and self.docker_password
@property
def is_pull_request(self) -> bool:
if self.appveyor_pull_request_number:
return True
if self.travis_pull_request and self.travis_pull_request != "false":
return True
return False
@property
def tag(self):
return self.travis_tag or self.appveyor_repo_tag_name
@property
def branch(self):
return self.travis_branch or self.appveyor_repo_branch
@property
def version(self):
name = self.tag or self.branch
if not name:
raise BuildError("We're on neither a tag nor a branch - could not establish version")
return re.sub('^v', "", name)
@property
def upload_dir(self):
if self.tag:
return self.version
else:
return "branches/%s" % self.version
@property
def platform_tag(self):
if self.system in self.PLATFORM_TAGS:
return self.PLATFORM_TAGS[self.system]
raise BuildError("Unsupported platform: %s" % self.system)
@property
def release_dir(self):
return os.path.join(self.root_dir, "release")
@property
def build_dir(self):
return os.path.join(self.release_dir, "build")
@property
def dist_dir(self):
return os.path.join(self.release_dir, "dist")
@property
def docker_tag(self):
if self.branch == "master":
return "dev"
return self.version
def archive(self, path):
# ZipFile and tarfile have slightly different APIs. Fix that.
if self.system == "Windows":
@ -196,18 +139,24 @@ class BuildEnviron:
return ret
@property
def should_upload_docker(self) -> bool:
return all([
(self.tag or self.branch == "master"),
self.should_build_docker,
self.has_docker_creds,
])
def branch(self):
return self.travis_branch or self.appveyor_repo_branch
@property
def should_upload_pypi(self) -> bool:
if self.tag and self.should_build_wheel and self.has_twine_creds:
return True
return False
def build_dir(self):
return os.path.join(self.release_dir, "build")
@property
def dist_dir(self):
return os.path.join(self.release_dir, "dist")
@property
def docker_tag(self):
if self.branch == "master":
t = "dev"
else:
t = self.version
return "mitmproxy/mitmproxy:{}".format(t)
def dump_info(self, fp=sys.stdout):
lst = [
@ -230,6 +179,71 @@ class BuildEnviron:
for attr in lst:
print("cibuild.%s=%s" % (attr, getattr(self, attr)), file=fp)
@property
def has_docker_creds(self) -> bool:
return self.docker_username and self.docker_password
@property
def is_prod_release(self) -> bool:
try:
v = parver.Version.parse(self.version)
except (parver.ParseError, BuildError):
return False
return not v.is_prerelease
@property
def is_pull_request(self) -> bool:
if self.appveyor_pull_request_number:
return True
if self.travis_pull_request and self.travis_pull_request != "false":
return True
return False
@property
def platform_tag(self):
if self.system in self.PLATFORM_TAGS:
return self.PLATFORM_TAGS[self.system]
raise BuildError("Unsupported platform: %s" % self.system)
@property
def release_dir(self):
return os.path.join(self.root_dir, "release")
@property
def should_upload_docker(self) -> bool:
return all([
(self.tag or self.branch == "master"),
self.should_build_docker,
self.has_docker_creds,
])
@property
def should_upload_pypi(self) -> bool:
return all([
self.tag,
self.is_prod_release,
self.should_build_wheel,
self.has_twine_creds,
])
@property
def tag(self):
return self.travis_tag or self.appveyor_repo_tag_name
@property
def upload_dir(self):
if self.tag:
return self.version
else:
return "branches/%s" % self.version
@property
def version(self):
name = self.tag or self.branch
if not name:
raise BuildError("We're on neither a tag nor a branch - could not establish version")
return re.sub('^v', "", name)
def build_wheel(be: BuildEnviron): # pragma: no cover
click.echo("Building wheel...")
@ -251,7 +265,7 @@ def build_docker_image(be: BuildEnviron, whl: str): # pragma: no cover
subprocess.check_call([
"docker",
"build",
"--tag", "mitmproxy/mitmproxy/{}".format(be.docker_tag),
"--tag", be.docker_tag,
"--build-arg", "WHEEL_MITMPROXY={}".format(whl),
"--build-arg", "WHEEL_BASENAME_MITMPROXY={}".format(os.path.basename(whl)),
"--file", "docker/Dockerfile",
@ -404,11 +418,7 @@ def upload(): # pragma: no cover
"-u", be.docker_username,
"-p", be.docker_password,
])
subprocess.check_call([
"docker",
"push",
"mitmproxy/mitmproxy:{}".format(be.docker_tag),
])
subprocess.check_call(["docker", "push", be.docker_tag])
@cli.command("decrypt")

View File

@ -89,6 +89,7 @@ setup(
"flake8>=3.5, <3.6",
"Flask>=1.0,<1.1",
"mypy>=0.590,<0.591",
"parver>=0.1<2.0",
"pytest-asyncio>=0.8",
"pytest-cov>=2.5.1,<3",
"pytest-faulthandler>=1.3.1,<2",

View File

@ -58,6 +58,7 @@ def test_buildenviron_pr():
appveyor_pull_request_number = "xxxx",
)
assert be.is_pull_request
assert not be.is_prod_release
def test_buildenviron_commit():
@ -73,10 +74,11 @@ def test_buildenviron_commit():
docker_username = "foo",
docker_password = "bar",
)
assert be.docker_tag == "dev"
assert be.docker_tag == "mitmproxy/mitmproxy:dev"
assert be.should_upload_docker
assert not be.should_upload_pypi
assert be.should_upload_docker
assert not be.is_prod_release
def test_buildenviron_rleasetag():
@ -99,9 +101,10 @@ def test_buildenviron_rleasetag():
assert be.branch == "v0.x"
assert be.version == "0.0.1"
assert be.upload_dir == "0.0.1"
assert be.docker_tag == "0.0.1"
assert be.docker_tag == "mitmproxy/mitmproxy:0.0.1"
assert be.should_upload_pypi
assert be.should_upload_docker
assert be.is_prod_release
def test_buildenviron_branch():