2022-04-12 11:21:55 +00:00
|
|
|
#!/usr/bin/env python3
|
2014-11-07 12:19:26 +00:00
|
|
|
|
2014-11-07 12:51:25 +00:00
|
|
|
import glob
|
2020-07-29 19:41:53 +00:00
|
|
|
import os
|
2020-08-05 21:03:50 +00:00
|
|
|
import shutil
|
2020-07-29 19:41:53 +00:00
|
|
|
import subprocess
|
2015-04-12 14:26:00 +00:00
|
|
|
import sys
|
2020-08-06 17:39:24 +00:00
|
|
|
import tempfile
|
|
|
|
|
|
|
|
def is_fs_case_sensitive():
|
|
|
|
with tempfile.NamedTemporaryFile(prefix='TmP') as tmp_file:
|
|
|
|
return(not os.path.exists(tmp_file.name.lower()))
|
2014-11-07 12:19:26 +00:00
|
|
|
|
2019-06-26 18:32:42 +00:00
|
|
|
sys.path.append(
|
|
|
|
os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + "/../.."))
|
2019-06-24 17:18:04 +00:00
|
|
|
|
2022-04-04 09:32:57 +00:00
|
|
|
from lib.config import PLATFORM
|
|
|
|
from lib.util import get_electron_branding, execute, store_artifact, \
|
2019-06-24 17:18:04 +00:00
|
|
|
get_out_dir, ELECTRON_DIR
|
2014-11-07 12:19:26 +00:00
|
|
|
|
2018-09-28 01:24:25 +00:00
|
|
|
RELEASE_DIR = get_out_dir()
|
2015-04-12 14:26:00 +00:00
|
|
|
|
2018-09-27 18:53:08 +00:00
|
|
|
|
|
|
|
PROJECT_NAME = get_electron_branding()['project_name']
|
|
|
|
PRODUCT_NAME = get_electron_branding()['product_name']
|
2018-11-14 20:47:01 +00:00
|
|
|
SYMBOLS_DIR = os.path.join(RELEASE_DIR, 'breakpad_symbols')
|
2018-05-23 19:53:48 +00:00
|
|
|
|
2014-11-07 12:19:26 +00:00
|
|
|
PDB_LIST = [
|
2024-03-21 13:48:23 +00:00
|
|
|
os.path.join(RELEASE_DIR, f'{PROJECT_NAME}.exe.pdb')
|
2014-11-07 12:19:26 +00:00
|
|
|
]
|
|
|
|
|
2020-12-11 20:34:03 +00:00
|
|
|
PDB_LIST += glob.glob(os.path.join(RELEASE_DIR, '*.dll.pdb'))
|
|
|
|
|
2020-07-29 19:41:53 +00:00
|
|
|
NPX_CMD = "npx"
|
|
|
|
if sys.platform == "win32":
|
|
|
|
NPX_CMD += ".cmd"
|
|
|
|
|
2014-11-07 12:19:26 +00:00
|
|
|
|
|
|
|
def main():
|
2019-06-24 17:18:04 +00:00
|
|
|
os.chdir(ELECTRON_DIR)
|
2020-08-17 21:52:08 +00:00
|
|
|
files = []
|
2018-05-23 19:53:48 +00:00
|
|
|
if PLATFORM == 'win32':
|
|
|
|
for pdb in PDB_LIST:
|
|
|
|
run_symstore(pdb, SYMBOLS_DIR, PRODUCT_NAME)
|
|
|
|
files = glob.glob(SYMBOLS_DIR + '/*.pdb/*/*.pdb')
|
2020-08-17 21:52:08 +00:00
|
|
|
|
|
|
|
files += glob.glob(SYMBOLS_DIR + '/*/*/*.sym')
|
2020-07-29 19:41:53 +00:00
|
|
|
|
|
|
|
for symbol_file in files:
|
|
|
|
print("Generating Sentry src bundle for: " + symbol_file)
|
2020-11-24 05:26:54 +00:00
|
|
|
npx_env = os.environ.copy()
|
|
|
|
npx_env['npm_config_yes'] = 'true'
|
2020-10-19 11:55:27 +00:00
|
|
|
subprocess.check_output([
|
2023-06-08 23:31:15 +00:00
|
|
|
NPX_CMD, '@sentry/cli@1.62.0', 'difutil', 'bundle-sources',
|
2020-11-24 05:26:54 +00:00
|
|
|
symbol_file], env=npx_env)
|
2020-07-29 19:41:53 +00:00
|
|
|
|
|
|
|
files += glob.glob(SYMBOLS_DIR + '/*/*/*.src.zip')
|
2019-02-12 22:10:24 +00:00
|
|
|
|
2022-05-06 04:40:34 +00:00
|
|
|
# The file upload needs to be symbols/:symbol_name/:hash/:symbol
|
2019-02-12 22:10:24 +00:00
|
|
|
os.chdir(SYMBOLS_DIR)
|
|
|
|
files = [os.path.relpath(f, os.getcwd()) for f in files]
|
|
|
|
|
2018-10-19 00:18:35 +00:00
|
|
|
# The symbol server needs lowercase paths, it will fail otherwise
|
|
|
|
# So lowercase all the file paths here
|
2020-08-06 17:39:24 +00:00
|
|
|
if is_fs_case_sensitive():
|
|
|
|
for f in files:
|
|
|
|
lower_f = f.lower()
|
|
|
|
if lower_f != f:
|
|
|
|
if os.path.exists(lower_f):
|
|
|
|
shutil.rmtree(lower_f)
|
|
|
|
lower_dir = os.path.dirname(lower_f)
|
|
|
|
if not os.path.exists(lower_dir):
|
|
|
|
os.makedirs(lower_dir)
|
|
|
|
shutil.copy2(f, lower_f)
|
2018-10-19 00:18:35 +00:00
|
|
|
files = [f.lower() for f in files]
|
2020-08-05 21:03:50 +00:00
|
|
|
for f in files:
|
|
|
|
assert os.path.exists(f)
|
2014-11-07 12:19:26 +00:00
|
|
|
|
2022-04-04 09:32:57 +00:00
|
|
|
upload_symbols(files)
|
2014-11-07 12:51:25 +00:00
|
|
|
|
2014-11-07 12:19:26 +00:00
|
|
|
|
|
|
|
def run_symstore(pdb, dest, product):
|
2024-02-27 23:40:42 +00:00
|
|
|
for attempt in range(2):
|
|
|
|
try:
|
|
|
|
execute(['symstore', 'add', '/r', '/f', pdb, '/s', dest, '/t', product])
|
|
|
|
break
|
|
|
|
except Exception as e:
|
|
|
|
print(f"An error occurred while adding '{pdb}' to SymStore: {str(e)}")
|
|
|
|
if attempt == 0:
|
|
|
|
print("Retrying...")
|
2014-11-07 12:19:26 +00:00
|
|
|
|
2022-04-04 09:32:57 +00:00
|
|
|
def upload_symbols(files):
|
2022-05-06 04:40:34 +00:00
|
|
|
store_artifact(SYMBOLS_DIR, 'symbols',
|
2014-11-10 15:33:56 +00:00
|
|
|
files)
|
2014-11-07 12:51:25 +00:00
|
|
|
|
|
|
|
|
2014-11-07 12:19:26 +00:00
|
|
|
if __name__ == '__main__':
|
|
|
|
sys.exit(main())
|