aboutsummaryrefslogtreecommitdiffstats
path: root/python/servo/package_commands.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/servo/package_commands.py')
-rw-r--r--python/servo/package_commands.py56
1 files changed, 43 insertions, 13 deletions
diff --git a/python/servo/package_commands.py b/python/servo/package_commands.py
index 53910dcd644..c5b9fb69726 100644
--- a/python/servo/package_commands.py
+++ b/python/servo/package_commands.py
@@ -10,6 +10,8 @@
from __future__ import absolute_import, print_function, unicode_literals
from datetime import datetime
+from github import Github
+
import base64
import hashlib
import io
@@ -594,7 +596,11 @@ class PackageCommands(CommandBase):
@CommandArgument('--secret-from-environment',
action='store_true',
help='Retrieve the appropriate secrets from the environment.')
- def upload_nightly(self, platform, secret_from_environment):
+ @CommandArgument('--github-release-id',
+ default=None,
+ type=int,
+ help='The github release to upload the nightly builds.')
+ def upload_nightly(self, platform, secret_from_environment, github_release_id):
import boto3
def get_s3_secret():
@@ -612,7 +618,28 @@ class PackageCommands(CommandBase):
path.basename(package)
)
- def upload_to_s3(platform, package, timestamp):
+ def upload_to_github_release(platform, package, package_hash):
+ if not github_release_id:
+ return
+
+ extension = path.basename(package).partition('.')[2]
+ g = Github(os.environ['NIGHTLY_REPO_TOKEN'])
+ nightly_repo = g.get_repo(os.environ['NIGHTLY_REPO'])
+ release = nightly_repo.get_release(github_release_id)
+ package_hash_fileobj = io.BytesIO(package_hash.encode('utf-8'))
+
+ if '2020' in platform:
+ asset_name = f'servo-latest-layout-2020.{extension}'
+ else:
+ asset_name = f'servo-latest.{extension}'
+
+ release.upload_asset(package, name=asset_name)
+ release.upload_asset_from_memory(
+ package_hash_fileobj,
+ package_hash_fileobj.getbuffer().nbytes,
+ name=f'{asset_name}.sha256')
+
+ def upload_to_s3(platform, package, package_hash, timestamp):
(aws_access_key, aws_secret_access_key) = get_s3_secret()
s3 = boto3.client(
's3',
@@ -635,16 +662,6 @@ class PackageCommands(CommandBase):
extension = path.basename(package).partition('.')[2]
latest_upload_key = '{}/servo-latest.{}'.format(nightly_dir, extension)
- # Compute the hash
- SHA_BUF_SIZE = 1048576 # read in 1 MiB chunks
- sha256_digest = hashlib.sha256()
- with open(package, 'rb') as package_file:
- while True:
- data = package_file.read(SHA_BUF_SIZE)
- if not data:
- break
- sha256_digest.update(data)
- package_hash = sha256_digest.hexdigest()
package_hash_fileobj = io.BytesIO(package_hash.encode('utf-8'))
latest_hash_upload_key = f'{latest_upload_key}.sha256'
@@ -763,7 +780,20 @@ class PackageCommands(CommandBase):
package
), file=sys.stderr)
return 1
- upload_to_s3(platform, package, timestamp)
+
+ # Compute the hash
+ SHA_BUF_SIZE = 1048576 # read in 1 MiB chunks
+ sha256_digest = hashlib.sha256()
+ with open(package, 'rb') as package_file:
+ while True:
+ data = package_file.read(SHA_BUF_SIZE)
+ if not data:
+ break
+ sha256_digest.update(data)
+ package_hash = sha256_digest.hexdigest()
+
+ upload_to_s3(platform, package, package_hash, timestamp)
+ upload_to_github_release(platform, package, package_hash)
if platform == 'maven':
for package in PACKAGES[platform]: