Add command to automatically upload symbols after jenkins build

By default, uploading of symbols is disabled. It will enabled for specific
release builds only.
This supersedes copying the symbol tarbal in the jenkins job.

ref T69
This commit is contained in:
Roland Winklmeier
2017-09-20 14:50:50 +02:00
committed by Mathew Sutcliffe
parent 400ff9f033
commit e135784aac

View File

@@ -13,6 +13,7 @@ import multiprocessing
import os import os
import os.path as path import os.path as path
import platform import platform
import requests
import subprocess import subprocess
import sys import sys
import symbolstore import symbolstore
@@ -92,7 +93,7 @@ class Builder:
content_path = path.abspath(path.join(os.curdir, 'dist', 'xswiftbus')) content_path = path.abspath(path.join(os.curdir, 'dist', 'xswiftbus'))
subprocess.check_call(['7z', 'a', '-mx=9', archive_path, content_path], env=dict(os.environ)) subprocess.check_call(['7z', 'a', '-mx=9', archive_path, content_path], env=dict(os.environ))
def symbols(self): def symbols(self, upload_symbols):
""" """
Generates the binary symbols and archives them into a gzip archive, located in the swift source root. Generates the binary symbols and archives them into a gzip archive, located in the swift source root.
""" """
@@ -109,6 +110,8 @@ class Builder:
tar_filename = '-'.join(['swift', 'symbols', platform.system(), self.word_size, self.version]) + '.tar.gz' tar_filename = '-'.join(['swift', 'symbols', platform.system(), self.word_size, self.version]) + '.tar.gz'
tar_path = path.abspath(path.join(self._get_swift_source_path(), tar_filename)) tar_path = path.abspath(path.join(self._get_swift_source_path(), tar_filename))
dumper.pack(tar_path) dumper.pack(tar_path)
if upload_symbols:
self.__upload_symbol_files(symbol_path)
def _get_swift_source_path(self): def _get_swift_source_path(self):
return self.__source_path return self.__source_path
@@ -208,6 +211,24 @@ class Builder:
version = '.'.join([version_major, version_minor, version_micro]) version = '.'.join([version_major, version_minor, version_micro])
return version return version
def __upload_symbol_files(self, symbol_path):
print('Uploading symbols')
url = 'http://crashreports.swift-project.org/symfiles'
symbol_files = [os.path.join(root, name)
for root, dirs, files in os.walk(symbol_path)
for name in files
if name.endswith('.sym')]
for symbol_file in symbol_files:
print ('Uploading ' + symbol_file)
files = [
('symfile', open(symbol_file, 'rb')),
]
data = {'release': self.version}
r = requests.post(url, files=files, data=data)
r.raise_for_status()
class MSVCBuilder(Builder): class MSVCBuilder(Builder):
@@ -334,14 +355,15 @@ def main(argv):
tool_chain = '' tool_chain = ''
dev_build = False dev_build = False
jobs = None jobs = None
upload_symbols = False
try: try:
opts, args = getopt.getopt(argv, 'hc:w:t:j:d', ['config=', 'wordsize=', 'toolchain=', 'jobs=', 'dev']) opts, args = getopt.getopt(argv, 'hc:w:t:j:du', ['config=', 'wordsize=', 'toolchain=', 'jobs=', 'dev', 'upload'])
except getopt.GetoptError: except getopt.GetoptError:
print_help() print_help()
sys.exit(2) sys.exit(2)
if len(opts) < 2 or len(opts) > 4: if len(opts) < 2 or len(opts) > 5:
print_help() print_help()
sys.exit(2) sys.exit(2)
@@ -362,6 +384,8 @@ def main(argv):
jobs = arg jobs = arg
elif opt in ('-d', '--dev'): elif opt in ('-d', '--dev'):
dev_build = True dev_build = True
elif opt in ('-u', '--upload'):
upload_symbols = True
if word_size not in ['32', '64']: if word_size not in ['32', '64']:
print('Unsupported word size. Choose 32 or 64') print('Unsupported word size. Choose 32 or 64')
@@ -388,7 +412,7 @@ def main(argv):
builder.checks() builder.checks()
builder.install() builder.install()
builder.package_xswiftbus() builder.package_xswiftbus()
builder.symbols() builder.symbols(upload_symbols)
# run main if run directly # run main if run directly