diff options
Diffstat (limited to 'python/servo/package_commands.py')
-rw-r--r-- | python/servo/package_commands.py | 56 |
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]: |