Browse Source

Merge pull request #6676 from electron/fix-upload

Fix a few errors when running the script to upload checksum files
Cheng Zhao 8 years ago
parent
commit
eb73303f28
3 changed files with 37 additions and 40 deletions
  1. 2 25
      script/lib/util.py
  2. 7 4
      script/merge-electron-checksums.py
  3. 28 11
      script/upload.py

+ 2 - 25
script/lib/util.py

@@ -3,7 +3,6 @@
 import atexit
 import contextlib
 import errno
-import hashlib
 import platform
 import re
 import shutil
@@ -16,7 +15,7 @@ import urllib2
 import os
 import zipfile
 
-from config import is_verbose_mode, s3_config
+from config import is_verbose_mode
 from env_util import get_vs_env
 
 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:
           zip_file.write(os.path.join(root, f))
     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):
@@ -237,13 +220,7 @@ def run_boto_script(access_key, secret_key, script_name, *args):
       [env.get('PYTHONPATH', '')] + boto_path_dirs())
 
   boto = os.path.join(BOTO_DIR, 'bin', script_name)
-
-  args = [
-    sys.executable,
-    boto
-  ] + args
-
-  execute(args, env)
+  execute([sys.executable, boto] + list(args), env)
 
 
 def s3put(bucket, access_key, secret_key, prefix, key_prefix, files):

+ 7 - 4
script/merge-electron-checksums.py

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

+ 28 - 11
script/upload.py

@@ -2,16 +2,17 @@
 
 import argparse
 import errno
-from io import StringIO
+import hashlib
 import os
 import subprocess
 import sys
 import tempfile
 
+from io import StringIO
 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, \
-                     parse_version, scoped_cwd
+                     parse_version, scoped_cwd, s3put
 from lib.github import GitHub
 
 
@@ -125,8 +126,8 @@ def parse_args():
 
 
 def run_python_script(script, *args):
-  script_path = os.path.join(SOURCE_ROOT, 'script', script),
-  return execute([sys.executable, script_path] + args)
+  script_path = os.path.join(SOURCE_ROOT, 'script', script)
+  return execute([sys.executable, script_path] + list(args))
 
 
 def get_electron_build_version():
@@ -205,10 +206,10 @@ def create_release_draft(github, tag):
 
 
 def release_electron_checksums(github, release):
-  checksums = run_python_script(
-      'merge-electron-checksums.py', '-v', ELECTRON_VERSION)
-  upload_io_to_github(github, release,
-      'SHASUMS256.txt', StringIO(checksums), 'text/plain')
+  checksums = run_python_script('merge-electron-checksums.py',
+                                '-v', ELECTRON_VERSION)
+  upload_io_to_github(github, release, 'SHASUMS256.txt',
+                      StringIO(checksums.decode('utf-8')), 'text/plain')
 
 
 def upload_electron(github, release, file_path):
@@ -223,9 +224,11 @@ def upload_electron(github, release, file_path):
       pass
 
   # Upload the file.
-  name = os.path.dirname(file_path)
   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):
@@ -235,6 +238,20 @@ def upload_io_to_github(github, release, name, io, content_type):
       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):
   data = dict(draft=False)
   github.repos(ELECTRON_REPO).releases(release_id).patch(data=data)