Permalink
Browse files

build: extract external binaries config

  • Loading branch information...
alexeykuzmin committed Dec 27, 2018
1 parent 5957ede commit dee964e0feca7dfbd5cdb6d6124bd9dfdccc64eb
Showing with 100 additions and 37 deletions.
  1. +0 −2 DEPS
  2. +40 −0 script/external-binaries.json
  3. +60 −35 script/update-external-binaries.py
2 DEPS
@@ -99,8 +99,6 @@ hooks = [
'action': [
'python',
'src/electron/script/update-external-binaries.py',
'--root-url=http://github.com/electron/electron-frameworks/releases/download',
'--version=v1.4.0',
],
},
{
@@ -0,0 +1,40 @@
{
"baseUrl": "http://github.com/electron/electron-frameworks/releases/download",
"version": "v1.4.0",
"binaries": [
{
"url": "Mantle.zip",
"platform": "darwin"
},
{
"url": "ReactiveCocoa.zip",
"platform": "darwin"
},
{
"url": "Squirrel.zip",
"platform": "darwin"
},
{
"url": "directxsdk-ia32.zip",
"platform": "win32",
"targetArch": "ia32"
},
{
"url": "directxsdk-x64.zip",
"platform": "win32",
"targetArch": "x64"
},
{
"url": "sccache-darwin-x64.zip",
"platform": "darwin"
},
{
"url": "sccache-linux-x64.zip",
"platform": "linux"
},
{
"url": "sccache-win32-x64.zip",
"platform": "win32"
}
]
}
@@ -2,7 +2,7 @@

import argparse
import errno
import sys
import json
import os

from lib.config import PLATFORM, get_target_arch
@@ -11,46 +11,55 @@

SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))


def parse_args():
parser = argparse.ArgumentParser(
description='Download binaries for Electron build')

parser.add_argument('-u', '--root-url', required=True,
help="Root URL for all downloads.")
parser.add_argument('-v', '--version', required=True,
help="Version string, e.g. 'v1.0.0'.")
parser.add_argument('--base-url', required=False,
help="Base URL for all downloads")

return parser.parse_args()


def parse_config():
config_path = os.path.join(SOURCE_ROOT, 'script', 'external-binaries.json')
with open(config_path, 'r') as config_file:
config = json.load(config_file)
return config


def main():
args = parse_args()
url_prefix = "{root_url}/{version}".format(**vars(args))
config = parse_config()

os.chdir(SOURCE_ROOT)
version_file = os.path.join(SOURCE_ROOT, 'external_binaries', '.version')
base_url = args.base_url if args.base_url is not None else config['baseUrl']
version = config['version']
output_dir = os.path.join(SOURCE_ROOT, 'external_binaries')
version_file = os.path.join(output_dir, '.version')

if (is_updated(version_file, args.version)):
if (is_updated(version_file, version)):
return

rm_rf('external_binaries')
safe_mkdir('external_binaries')
rm_rf(output_dir)
safe_mkdir(output_dir)

for binary in config['binaries']:
if not binary_should_be_downloaded(binary):
continue

temp_path = download_binary(base_url, version, binary['url'])

if sys.platform == 'darwin':
download_and_unzip(url_prefix, 'Mantle')
download_and_unzip(url_prefix, 'ReactiveCocoa')
download_and_unzip(url_prefix, 'Squirrel')
elif sys.platform in ['cygwin', 'win32']:
download_and_unzip(url_prefix, 'directxsdk-' + get_target_arch())
# We assume that all binaries are in zip archives.
extract_zip(temp_path, output_dir)

# get sccache & set exec bit. https://bugs.python.org/issue15795
download_and_unzip(url_prefix, 'sccache-{0}-x64'.format(PLATFORM))
appname = 'sccache'
if sys.platform == 'win32':
appname += '.exe'
add_exec_bit(os.path.join('external_binaries', appname))
# Hack alert. Set exec bit for sccache binaries.
# https://bugs.python.org/issue15795
if 'sccache' in binary['url']:
add_exec_bit_to_sccache_binary(output_dir)

with open(version_file, 'w') as f:
f.write(args.version)
f.write(version)


def is_updated(version_file, version):
@@ -64,21 +73,37 @@ def is_updated(version_file, version):
return existing_version == version


def download_and_unzip(url_prefix, framework):
zip_path = download_framework(url_prefix, framework)
if zip_path:
extract_zip(zip_path, 'external_binaries')
def binary_should_be_downloaded(binary):
if 'platform' in binary and binary['platform'] != PLATFORM:
return False

if 'targetArch' in binary and binary['targetArch'] != get_target_arch():
return False

def download_framework(url_prefix, framework):
filename = framework + '.zip'
url = url_prefix + '/' + filename
return True


def download_binary(base_url, version, binary_url):
full_url = '{0}/{1}/{2}'.format(base_url, version, binary_url)
temp_path = download_to_temp_dir(full_url, filename=binary_url)
return temp_path


def download_to_temp_dir(url, filename):
download_dir = tempdir(prefix='electron-')
path = os.path.join(download_dir, filename)
file_path = os.path.join(download_dir, filename)
download(text='Download ' + filename, url=url, path=file_path)
return file_path


def add_exec_bit_to_sccache_binary(binary_dir):
binary_name = 'sccache'
if PLATFORM == 'win32':
binary_name += '.exe'

download('Download ' + framework, url, path)
return path
binary_path = os.path.join(binary_dir, binary_name)
add_exec_bit(binary_path)


if __name__ == '__main__':
sys.exit(main())
main()

0 comments on commit dee964e

Please sign in to comment.