123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- #!/usr/bin/env python3
- import contextlib
- import errno
- import json
- import os
- import shutil
- import subprocess
- import sys
- from urllib.request import urlopen
- import zipfile
- # from lib.config import is_verbose_mode
- def is_verbose_mode():
- return False
- ELECTRON_DIR = os.path.abspath(
- os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
- )
- TS_NODE = os.path.join(ELECTRON_DIR, 'node_modules', '.bin', 'ts-node')
- SRC_DIR = os.path.abspath(os.path.join(__file__, '..', '..', '..', '..'))
- if sys.platform in ['win32', 'cygwin']:
- TS_NODE += '.cmd'
- @contextlib.contextmanager
- def scoped_cwd(path):
- cwd = os.getcwd()
- os.chdir(path)
- try:
- yield
- finally:
- os.chdir(cwd)
- def download(text, url, path):
- safe_mkdir(os.path.dirname(path))
- with open(path, 'wb') as local_file:
- print("Downloading %s to %s" % (url, path))
- web_file = urlopen(url)
- info = web_file.info()
- if hasattr(info, 'getheader'):
- file_size = int(info.getheaders("Content-Length")[0])
- else:
- file_size = int(info.get("Content-Length")[0])
- downloaded_size = 0
- block_size = 4096
- ci = os.environ.get('CI') is not None
- while True:
- buf = web_file.read(block_size)
- if not buf:
- break
- downloaded_size += len(buf)
- local_file.write(buf)
- if not ci:
- percent = downloaded_size * 100. / file_size
- status = "\r%s %10d [%3.1f%%]" % (text, downloaded_size, percent)
- print(status, end=' ')
- if ci:
- print("%s done." % (text))
- else:
- print()
- return path
- def make_zip(zip_file_path, files, dirs):
- safe_unlink(zip_file_path)
- if sys.platform == 'darwin':
- allfiles = files + dirs
- execute(['zip', '-r', '-y', zip_file_path] + allfiles)
- else:
- zip_file = zipfile.ZipFile(zip_file_path, "w", zipfile.ZIP_DEFLATED,
- allowZip64=True)
- for filename in files:
- zip_file.write(filename, filename)
- for dirname in dirs:
- for root, _, filenames in os.walk(dirname):
- for f in filenames:
- zip_file.write(os.path.join(root, f))
- zip_file.close()
- def rm_rf(path):
- try:
- shutil.rmtree(path)
- except OSError:
- pass
- def safe_unlink(path):
- try:
- os.unlink(path)
- except OSError as e:
- if e.errno != errno.ENOENT:
- raise
- def safe_mkdir(path):
- try:
- os.makedirs(path)
- except OSError as e:
- if e.errno != errno.EEXIST:
- raise
- def execute(argv, env=None, cwd=None):
- if env is None:
- env = os.environ
- if is_verbose_mode():
- print(' '.join(argv))
- try:
- output = subprocess.check_output(argv, stderr=subprocess.STDOUT,
- env=env, cwd=cwd)
- if is_verbose_mode():
- print(output)
- return output
- except subprocess.CalledProcessError as e:
- print(e.output)
- raise e
- def get_electron_branding():
- SOURCE_ROOT = os.path.abspath(os.path.join(__file__, '..', '..', '..'))
- branding_file_path = os.path.join(
- SOURCE_ROOT, 'shell', 'app', 'BRANDING.json')
- with open(branding_file_path) as f:
- return json.load(f)
- cached_electron_version = None
- def get_electron_version():
- global cached_electron_version
- if cached_electron_version is None:
- cached_electron_version = str.strip(execute([
- 'node',
- '-p',
- 'require("./script/lib/get-version").getElectronVersion()'
- ], cwd=ELECTRON_DIR).decode())
- return cached_electron_version
- def store_artifact(prefix, key_prefix, files):
- # Azure Storage
- azput(prefix, key_prefix, files)
- def azput(prefix, key_prefix, files):
- env = os.environ.copy()
- output = execute([
- 'node',
- os.path.join(os.path.dirname(__file__), 'azput.js'),
- '--prefix', prefix,
- '--key_prefix', key_prefix,
- ] + files, env)
- print(output)
- def get_out_dir():
- out_dir = 'Debug'
- override = os.environ.get('ELECTRON_OUT_DIR')
- if override is not None:
- out_dir = override
- return os.path.join(SRC_DIR, 'out', out_dir)
- # NOTE: This path is not created by gn, it is used as a scratch zone by our
- # upload scripts
- def get_dist_dir():
- return os.path.join(get_out_dir(), 'gen', 'electron_dist')
- def get_electron_exec():
- out_dir = get_out_dir()
- if sys.platform == 'darwin':
- return '{0}/Electron.app/Contents/MacOS/Electron'.format(out_dir)
- if sys.platform == 'win32':
- return '{0}/electron.exe'.format(out_dir)
- if sys.platform == 'linux':
- return '{0}/electron'.format(out_dir)
- raise Exception(
- "get_electron_exec: unexpected platform '{0}'".format(sys.platform))
- def get_buildtools_executable(name):
- buildtools = os.path.realpath(os.path.join(ELECTRON_DIR, '..', 'buildtools'))
- chromium_platform = {
- 'darwin': 'mac',
- 'linux': 'linux64',
- 'linux2': 'linux64',
- 'win32': 'win',
- 'cygwin': 'win',
- }[sys.platform]
- path = os.path.join(buildtools, chromium_platform, name)
- if sys.platform == 'win32':
- path += '.exe'
- return path
- def get_linux_binaries():
- return [
- 'chrome-sandbox',
- 'chrome_crashpad_handler',
- get_electron_branding()['project_name'],
- 'libEGL.so',
- 'libGLESv2.so',
- 'libffmpeg.so',
- 'libvk_swiftshader.so',
- ]
|