Merge pull request #6676 from electron/fix-upload

Fix a few errors when running the script to upload checksum files
This commit is contained in:
Cheng Zhao 2016-08-01 22:54:10 +09:00 committed by GitHub
commit eb73303f28
3 changed files with 37 additions and 40 deletions

View file

@ -3,7 +3,6 @@
import atexit import atexit
import contextlib import contextlib
import errno import errno
import hashlib
import platform import platform
import re import re
import shutil import shutil
@ -16,7 +15,7 @@ import urllib2
import os import os
import zipfile import zipfile
from config import is_verbose_mode, s3_config from config import is_verbose_mode
from env_util import get_vs_env from env_util import get_vs_env
BOTO_DIR = os.path.abspath(os.path.join(__file__, '..', '..', '..', 'vendor', BOTO_DIR = os.path.abspath(os.path.join(__file__, '..', '..', '..', 'vendor',
@ -133,22 +132,6 @@ def make_zip(zip_file_path, files, dirs):
for f in filenames: for f in filenames:
zip_file.write(os.path.join(root, f)) zip_file.write(os.path.join(root, f))
zip_file.close() zip_file.close()
upload_zip_sha256_checksum(zip_file_path)
def upload_zip_sha256_checksum(zip_file_path):
bucket, access_key, secret_key = s3_config()
checksum_path = '{}.sha256sum'.format(zip_file_path)
safe_unlink(checksum_path)
sha256 = hashlib.sha256()
with open(zip_file_path, 'rb') as f:
sha256.update(f.read())
zip_basename = os.path.basename(zip_file_path)
with open(checksum_path, 'w') as checksum:
checksum.write('{} *{}'.format(sha256.hexdigest(), zip_basename))
s3put(bucket, access_key, secret_key, os.path.dirname(checksum_path),
'atom-shell/tmp', [checksum_path])
def rm_rf(path): def rm_rf(path):
@ -237,13 +220,7 @@ def run_boto_script(access_key, secret_key, script_name, *args):
[env.get('PYTHONPATH', '')] + boto_path_dirs()) [env.get('PYTHONPATH', '')] + boto_path_dirs())
boto = os.path.join(BOTO_DIR, 'bin', script_name) boto = os.path.join(BOTO_DIR, 'bin', script_name)
execute([sys.executable, boto] + list(args), env)
args = [
sys.executable,
boto
] + args
execute(args, env)
def s3put(bucket, access_key, secret_key, prefix, key_prefix, files): def s3put(bucket, access_key, secret_key, prefix, key_prefix, files):

11
script/merge-electron-checksums.py Normal file → Executable file
View file

@ -12,21 +12,23 @@ from lib.config import s3_config
from lib.util import boto_path_dirs from lib.util import boto_path_dirs
sys.path.extend(boto_path_dirs()) sys.path.extend(boto_path_dirs())
from boto.s3.connection import S3Connection from boto.s3.connection import S3Connection
def main(): def main():
args = parse_args() args = parse_args()
bucket_name, access_key, secret_key = s3_config() bucket_name, access_key, secret_key = s3_config()
s3 = S3Connection(access_key, secret_key) s3 = S3Connection(access_key, secret_key)
bucket = s3.get_bucket(bucket_name) bucket = s3.get_bucket(bucket_name)
if bucket is None: if bucket is None:
print('S3 bucket "{}" does not exist!'.format(bucket_name), file=sys.stderr) print('S3 bucket "{}" does not exist!'.format(bucket_name), file=sys.stderr)
return 1 return 1
prefix = 'atom-shell/tmp/{0}/'.format(args.version)
shasums = [s3_object.get_contents_as_string().strip() shasums = [s3_object.get_contents_as_string().strip()
for s3_object in bucket.list('atom-shell/tmp/', delimiter='/') for s3_object in bucket.list(prefix, delimiter='/')
if s3_object.key.endswith('.sha256sum') and if s3_object.key.endswith('.sha256sum')]
args.version in s3_object.key]
print('\n'.join(shasums)) print('\n'.join(shasums))
return 0 return 0
@ -37,5 +39,6 @@ def parse_args():
required=True) required=True)
return parser.parse_args() return parser.parse_args()
if __name__ == '__main__': if __name__ == '__main__':
sys.exit(main()) sys.exit(main())

View file

@ -2,16 +2,17 @@
import argparse import argparse
import errno import errno
from io import StringIO import hashlib
import os import os
import subprocess import subprocess
import sys import sys
import tempfile import tempfile
from io import StringIO
from lib.config import PLATFORM, get_target_arch, get_chromedriver_version, \ from lib.config import PLATFORM, get_target_arch, get_chromedriver_version, \
get_platform_key, get_env_var get_platform_key, get_env_var, s3_config
from lib.util import electron_gyp, execute, get_electron_version, \ from lib.util import electron_gyp, execute, get_electron_version, \
parse_version, scoped_cwd parse_version, scoped_cwd, s3put
from lib.github import GitHub from lib.github import GitHub
@ -125,8 +126,8 @@ def parse_args():
def run_python_script(script, *args): def run_python_script(script, *args):
script_path = os.path.join(SOURCE_ROOT, 'script', script), script_path = os.path.join(SOURCE_ROOT, 'script', script)
return execute([sys.executable, script_path] + args) return execute([sys.executable, script_path] + list(args))
def get_electron_build_version(): def get_electron_build_version():
@ -205,10 +206,10 @@ def create_release_draft(github, tag):
def release_electron_checksums(github, release): def release_electron_checksums(github, release):
checksums = run_python_script( checksums = run_python_script('merge-electron-checksums.py',
'merge-electron-checksums.py', '-v', ELECTRON_VERSION) '-v', ELECTRON_VERSION)
upload_io_to_github(github, release, upload_io_to_github(github, release, 'SHASUMS256.txt',
'SHASUMS256.txt', StringIO(checksums), 'text/plain') StringIO(checksums.decode('utf-8')), 'text/plain')
def upload_electron(github, release, file_path): def upload_electron(github, release, file_path):
@ -223,9 +224,11 @@ def upload_electron(github, release, file_path):
pass pass
# Upload the file. # Upload the file.
name = os.path.dirname(file_path)
with open(file_path, 'rb') as f: with open(file_path, 'rb') as f:
upload_io_to_github(github, release, name, f, 'application/zip') upload_io_to_github(github, release, filename, f, 'application/zip')
# Upload the checksum file.
upload_sha256_checksum(release['tag_name'], file_path)
def upload_io_to_github(github, release, name, io, content_type): def upload_io_to_github(github, release, name, io, content_type):
@ -235,6 +238,20 @@ def upload_io_to_github(github, release, name, io, content_type):
params=params, headers=headers, data=io, verify=False) params=params, headers=headers, data=io, verify=False)
def upload_sha256_checksum(version, file_path):
bucket, access_key, secret_key = s3_config()
checksum_path = '{}.sha256sum'.format(file_path)
sha256 = hashlib.sha256()
with open(file_path, 'rb') as f:
sha256.update(f.read())
filename = os.path.basename(file_path)
with open(checksum_path, 'w') as checksum:
checksum.write('{} {}'.format(sha256.hexdigest(), filename))
s3put(bucket, access_key, secret_key, os.path.dirname(checksum_path),
'atom-shell/tmp/{0}'.format(version), [checksum_path])
def publish_release(github, release_id): def publish_release(github, release_id):
data = dict(draft=False) data = dict(draft=False)
github.repos(ELECTRON_REPO).releases(release_id).patch(data=data) github.repos(ELECTRON_REPO).releases(release_id).patch(data=data)