aboutsummaryrefslogtreecommitdiffstats
path: root/release/cibuild.py
diff options
context:
space:
mode:
Diffstat (limited to 'release/cibuild.py')
-rwxr-xr-xrelease/cibuild.py158
1 files changed, 84 insertions, 74 deletions
diff --git a/release/cibuild.py b/release/cibuild.py
index 37381527..04ca9474 100755
--- a/release/cibuild.py
+++ b/release/cibuild.py
@@ -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")