aboutsummaryrefslogtreecommitdiffstats
path: root/tasks.py
diff options
context:
space:
mode:
Diffstat (limited to 'tasks.py')
-rw-r--r--tasks.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/tasks.py b/tasks.py
index f72f43ba..242f2536 100644
--- a/tasks.py
+++ b/tasks.py
@@ -12,8 +12,68 @@
# limitations under the License.
from __future__ import absolute_import, division, print_function
+import getpass
+import os
+import time
+
import invoke
+import requests
+
+
+JENKINS_URL = "http://jenkins.cryptography.io/job/cryptography-wheel-builder"
+
+
+def wait_for_build_completed():
+ while True:
+ response = requests.get(
+ "{0}/lastBuild/api/json/".format(JENKINS_URL),
+ headers={
+ "Accept": "application/json",
+ }
+ )
+ response.raise_for_status()
+ if not response.json()["building"]:
+ assert response.json()["result"] == "SUCCESS"
+ break
+ time.sleep(0.1)
+
+
+def download_artifacts():
+ response = requests.get(
+ "{0}/lastBuild/api/json/".format(JENKINS_URL),
+ headers={
+ "Accept": "application/json"
+ }
+ )
+ response.raise_for_status()
+ assert not response.json()["building"]
+ assert response.json()["result"] == "SUCCESS"
+
+ paths = []
+
+ for run in response.json()["runs"]:
+ response = requests.get(
+ run["url"] + "api/json/",
+ headers={
+ "Accept": "application/json",
+ }
+ )
+ response.raise_for_status()
+ for artifact in response.json()["artifacts"]:
+ response = requests.get(
+ "{0}artifacts/{1}".format(run["url"], artifact["relativePath"])
+ )
+ out_path = os.path.join(
+ os.path.dirname(__file__),
+ "dist",
+ artifact["fileName"],
+ )
+ with open(out_path, "wb") as f:
+ f.write(response.content)
+ paths.append(out_path)
+ return paths
+
@invoke.task
def release(version):
@@ -25,3 +85,16 @@ def release(version):
invoke.run("python setup.py sdist")
invoke.run("twine upload -s dist/cryptography-{0}*".format(version))
+
+ token = getpass.getpass("Input the Jenkins token: ")
+ response = requests.post(
+ "{0}/build".format(JENKINS_URL),
+ params={
+ "token": token,
+ "cause": "Building wheels for {0}".format(version)
+ }
+ )
+ response.raise_for_status()
+ wait_for_build_completed()
+ paths = download_artifacts()
+ invoke.run("twine upload {0}".format(" ".join(paths)))