зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1305502 - Add an option to download symbols for an artifact build. r=glandium
MozReview-Commit-ID: HJxJeMkLiz9
This commit is contained in:
Родитель
333ac383e2
Коммит
0c70afc0a3
|
@ -35,6 +35,16 @@ def artifact_builds(value):
|
||||||
|
|
||||||
set_config('MOZ_ARTIFACT_BUILDS', artifact_builds)
|
set_config('MOZ_ARTIFACT_BUILDS', artifact_builds)
|
||||||
|
|
||||||
|
imply_option('--enable-artifact-build-symbols',
|
||||||
|
depends(artifact_builds)(lambda v: False if v is None else None),
|
||||||
|
reason='--disable-artifact-builds')
|
||||||
|
|
||||||
|
option('--enable-artifact-build-symbols',
|
||||||
|
help='Download symbols when artifact builds are enabled.')
|
||||||
|
|
||||||
|
set_config('MOZ_ARTIFACT_BUILD_SYMBOLS',
|
||||||
|
depends_if('--enable-artifact-build-symbols')(lambda _: True))
|
||||||
|
|
||||||
@depends('--enable-artifact-builds')
|
@depends('--enable-artifact-builds')
|
||||||
def imply_disable_compile_environment(value):
|
def imply_disable_compile_environment(value):
|
||||||
if value:
|
if value:
|
||||||
|
|
|
@ -128,12 +128,15 @@ class ArtifactJob(object):
|
||||||
# be the same across platforms.
|
# be the same across platforms.
|
||||||
_test_archive_suffix = '.common.tests.zip'
|
_test_archive_suffix = '.common.tests.zip'
|
||||||
|
|
||||||
def __init__(self, package_re, tests_re, log=None):
|
def __init__(self, package_re, tests_re, log=None, download_symbols=False):
|
||||||
self._package_re = re.compile(package_re)
|
self._package_re = re.compile(package_re)
|
||||||
self._tests_re = None
|
self._tests_re = None
|
||||||
if tests_re:
|
if tests_re:
|
||||||
self._tests_re = re.compile(tests_re)
|
self._tests_re = re.compile(tests_re)
|
||||||
self._log = log
|
self._log = log
|
||||||
|
self._symbols_archive_suffix = None
|
||||||
|
if download_symbols:
|
||||||
|
self._symbols_archive_suffix = 'crashreporter-symbols.zip'
|
||||||
|
|
||||||
def log(self, *args, **kwargs):
|
def log(self, *args, **kwargs):
|
||||||
if self._log:
|
if self._log:
|
||||||
|
@ -149,6 +152,8 @@ class ArtifactJob(object):
|
||||||
elif self._tests_re and self._tests_re.match(name):
|
elif self._tests_re and self._tests_re.match(name):
|
||||||
tests_artifact = name
|
tests_artifact = name
|
||||||
yield name
|
yield name
|
||||||
|
elif self._symbols_archive_suffix and name.endswith(self._symbols_archive_suffix):
|
||||||
|
yield name
|
||||||
else:
|
else:
|
||||||
self.log(logging.DEBUG, 'artifact',
|
self.log(logging.DEBUG, 'artifact',
|
||||||
{'name': name},
|
{'name': name},
|
||||||
|
@ -160,6 +165,8 @@ class ArtifactJob(object):
|
||||||
def process_artifact(self, filename, processed_filename):
|
def process_artifact(self, filename, processed_filename):
|
||||||
if filename.endswith(ArtifactJob._test_archive_suffix) and self._tests_re:
|
if filename.endswith(ArtifactJob._test_archive_suffix) and self._tests_re:
|
||||||
return self.process_tests_artifact(filename, processed_filename)
|
return self.process_tests_artifact(filename, processed_filename)
|
||||||
|
if self._symbols_archive_suffix and filename.endswith(self._symbols_archive_suffix):
|
||||||
|
return self.process_symbols_archive(filename, processed_filename)
|
||||||
return self.process_package_artifact(filename, processed_filename)
|
return self.process_package_artifact(filename, processed_filename)
|
||||||
|
|
||||||
def process_package_artifact(self, filename, processed_filename):
|
def process_package_artifact(self, filename, processed_filename):
|
||||||
|
@ -188,6 +195,15 @@ class ArtifactJob(object):
|
||||||
'matched an archive path.'.format(
|
'matched an archive path.'.format(
|
||||||
patterns=LinuxArtifactJob.test_artifact_patterns))
|
patterns=LinuxArtifactJob.test_artifact_patterns))
|
||||||
|
|
||||||
|
def process_symbols_archive(self, filename, processed_filename):
|
||||||
|
with JarWriter(file=processed_filename, optimize=False, compress_level=5) as writer:
|
||||||
|
reader = JarReader(filename)
|
||||||
|
for filename in reader.entries:
|
||||||
|
destpath = mozpath.join('crashreporter-symbols', filename)
|
||||||
|
self.log(logging.INFO, 'artifact',
|
||||||
|
{'destpath': destpath},
|
||||||
|
'Adding {destpath} to processed archive')
|
||||||
|
writer.add(destpath.encode('utf-8'), reader[filename])
|
||||||
|
|
||||||
class AndroidArtifactJob(ArtifactJob):
|
class AndroidArtifactJob(ArtifactJob):
|
||||||
|
|
||||||
|
@ -430,9 +446,9 @@ JOB_DETAILS = {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_job_details(job, log=None):
|
def get_job_details(job, log=None, download_symbols=False):
|
||||||
cls, (package_re, tests_re) = JOB_DETAILS[job]
|
cls, (package_re, tests_re) = JOB_DETAILS[job]
|
||||||
return cls(package_re, tests_re, log=log)
|
return cls(package_re, tests_re, log=log, download_symbols=download_symbols)
|
||||||
|
|
||||||
def cachedmethod(cachefunc):
|
def cachedmethod(cachefunc):
|
||||||
'''Decorator to wrap a class or instance method with a memoizing callable that
|
'''Decorator to wrap a class or instance method with a memoizing callable that
|
||||||
|
@ -611,9 +627,9 @@ class TaskCache(CacheManager):
|
||||||
self._queue = taskcluster.Queue()
|
self._queue = taskcluster.Queue()
|
||||||
|
|
||||||
@cachedmethod(operator.attrgetter('_cache'))
|
@cachedmethod(operator.attrgetter('_cache'))
|
||||||
def artifact_urls(self, tree, job, rev):
|
def artifact_urls(self, tree, job, rev, download_symbols):
|
||||||
try:
|
try:
|
||||||
artifact_job = get_job_details(job, log=self._log)
|
artifact_job = get_job_details(job, log=self._log, download_symbols=download_symbols)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
self.log(logging.INFO, 'artifact',
|
self.log(logging.INFO, 'artifact',
|
||||||
{'job': job},
|
{'job': job},
|
||||||
|
@ -748,6 +764,7 @@ class Artifacts(object):
|
||||||
raise ValueError("Must provide path to exactly one of hg and git")
|
raise ValueError("Must provide path to exactly one of hg and git")
|
||||||
|
|
||||||
self._substs = substs
|
self._substs = substs
|
||||||
|
self._download_symbols = self._substs.get('MOZ_ARTIFACT_BUILD_SYMBOLS', False)
|
||||||
self._defines = defines
|
self._defines = defines
|
||||||
self._tree = tree
|
self._tree = tree
|
||||||
self._job = job or self._guess_artifact_job()
|
self._job = job or self._guess_artifact_job()
|
||||||
|
@ -759,7 +776,7 @@ class Artifacts(object):
|
||||||
self._topsrcdir = topsrcdir
|
self._topsrcdir = topsrcdir
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self._artifact_job = get_job_details(self._job, log=self._log)
|
self._artifact_job = get_job_details(self._job, log=self._log, download_symbols=self._download_symbols)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
self.log(logging.INFO, 'artifact',
|
self.log(logging.INFO, 'artifact',
|
||||||
{'job': self._job},
|
{'job': self._job},
|
||||||
|
@ -914,7 +931,7 @@ class Artifacts(object):
|
||||||
|
|
||||||
for tree in trees:
|
for tree in trees:
|
||||||
try:
|
try:
|
||||||
urls = task_cache.artifact_urls(tree, job, pushhead)
|
urls = task_cache.artifact_urls(tree, job, pushhead, self._download_symbols)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
continue
|
continue
|
||||||
if urls:
|
if urls:
|
||||||
|
|
Загрузка…
Ссылка в новой задаче