diff options
author | 2017-02-02 09:02:37 -0500 | |
---|---|---|
committer | 2017-02-02 14:31:45 +0000 | |
commit | 7e97dc0aa1ff5b03593e689fe1cfdcc3550c169e (patch) | |
tree | f29cb093e1fdd069cfc119dfc5b1e24097401bfd /infra/bots/recipe_modules/vars | |
parent | 8233fc82b00763d37a7b0db7890b15c7d58939d4 (diff) |
Copy modules back in from skia-recipes repo
BUG=skia:6070
Change-Id: I86b3f039c27bd8287516c1db8bd1cae62888171b
Reviewed-on: https://skia-review.googlesource.com/7890
Reviewed-by: Ravi Mistry <rmistry@google.com>
Commit-Queue: Eric Boren <borenet@google.com>
Diffstat (limited to 'infra/bots/recipe_modules/vars')
-rw-r--r-- | infra/bots/recipe_modules/vars/__init__.py | 13 | ||||
-rw-r--r-- | infra/bots/recipe_modules/vars/api.py | 213 |
2 files changed, 226 insertions, 0 deletions
diff --git a/infra/bots/recipe_modules/vars/__init__.py b/infra/bots/recipe_modules/vars/__init__.py new file mode 100644 index 0000000000..e74431efac --- /dev/null +++ b/infra/bots/recipe_modules/vars/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +DEPS = [ + 'builder_name_schema', + 'recipe_engine/json', + 'recipe_engine/path', + 'recipe_engine/properties', + 'recipe_engine/python', + 'recipe_engine/raw_io', + 'recipe_engine/step', +] diff --git a/infra/bots/recipe_modules/vars/api.py b/infra/bots/recipe_modules/vars/api.py new file mode 100644 index 0000000000..faba0ad5c0 --- /dev/null +++ b/infra/bots/recipe_modules/vars/api.py @@ -0,0 +1,213 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +# pylint: disable=W0201 + + +from recipe_engine import recipe_api + + +CONFIG_DEBUG = 'Debug' +CONFIG_RELEASE = 'Release' + + +class SkiaVarsApi(recipe_api.RecipeApi): + + def make_path(self, *path): + """Return a Path object for the given path.""" + key = 'custom_%s' % '_'.join(path) + self.m.path.c.base_paths[key] = tuple(path) + return self.m.path[key] + + def setup(self): + """Prepare the variables.""" + # Setup + self.builder_name = self.m.properties['buildername'] + self.master_name = self.m.properties['mastername'] + self.slave_name = self.m.properties['slavename'] + self.build_number = self.m.properties['buildnumber'] + + self.slave_dir = self.m.path['start_dir'] + self.checkout_root = self.slave_dir + self.default_env = {} + self.gclient_env = {} + self.is_compile_bot = self.builder_name.startswith('Build-') + self.no_buildbot = self.m.properties.get('nobuildbot', '') == 'True' + self.skia_task_id = self.m.properties.get('skia_task_id', None) + + self.default_env['CHROME_HEADLESS'] = '1' + # The 'depot_tools' directory comes from recipe DEPS and isn't provided by + # default. We have to set it manually. + self.m.path.c.base_paths['depot_tools'] = ( + self.m.path.c.base_paths['start_dir'] + + ('skia', 'infra', 'bots', '.recipe_deps', 'depot_tools')) + if 'Win' in self.builder_name: + self.m.path.c.base_paths['depot_tools'] = ( + 'c:\\', 'Users', 'chrome-bot', 'depot_tools') + + # Compile bots keep a persistent checkout. + self.persistent_checkout = (self.is_compile_bot or + 'RecreateSKPs' in self.builder_name or + '-CT_' in self.builder_name or + 'Presubmit' in self.builder_name or + 'InfraTests' in self.builder_name or + self.builder_name == "Housekeeper-PerCommit") + if self.persistent_checkout: + if 'Win' in self.builder_name: + self.checkout_root = self.make_path('C:\\', 'b', 'work') + self.gclient_cache = self.make_path('C:\\', 'b', 'cache') + else: + self.checkout_root = self.make_path('/', 'b', 'work') + self.gclient_cache = self.make_path('/', 'b', 'cache') + + # got_revision is filled in after checkout steps. + self.got_revision = None + else: + # If there's no persistent checkout, then we have to asume we got the + # correct revision of the files from isolate. + self.got_revision = self.m.properties['revision'] + + # Some bots also require a checkout of PDFium; in this case we use the + # checkout of Skia obtained through DEPS in pdfium/third_party/skia. + self.need_pdfium_checkout = 'PDFium' in self.builder_name + + self.skia_dir = self.checkout_root.join('skia') + if self.need_pdfium_checkout: + self.skia_dir = self.checkout_root.join('pdfium', 'third_party', 'skia') + if not self.persistent_checkout: + self.m.path['checkout'] = self.skia_dir + + self.infrabots_dir = self.skia_dir.join('infra', 'bots') + self.resource_dir = self.skia_dir.join('resources') + self.images_dir = self.slave_dir.join('skimage') + self.skia_out = self.skia_dir.join('out', self.builder_name) + self.swarming_out_dir = self.make_path(self.m.properties['swarm_out_dir']) + self.local_skp_dir = self.slave_dir.join('skp') + self.local_svg_dir = self.slave_dir.join('svg') + if not self.is_compile_bot: + self.skia_out = self.slave_dir.join('out') + self.tmp_dir = self.m.path['start_dir'].join('tmp') + + # Some bots also require a checkout of chromium. + self.need_chromium_checkout = False + if 'CommandBuffer' in self.builder_name: + self.need_chromium_checkout = True + self.gclient_env['GYP_CHROMIUM_NO_ACTION'] = '0' + if 'RecreateSKPs' in self.builder_name: # pragma: no cover + self.need_chromium_checkout = True + self.gclient_env['CPPFLAGS'] = ( + '-DSK_ALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS=1') + + self.builder_cfg = self.m.builder_name_schema.DictForBuilderName( + self.builder_name) + self.role = self.builder_cfg['role'] + if self.role == self.m.builder_name_schema.BUILDER_ROLE_HOUSEKEEPER: + self.configuration = CONFIG_RELEASE + else: + self.configuration = self.builder_cfg.get('configuration', CONFIG_DEBUG) + arch = (self.builder_cfg.get('arch') or self.builder_cfg.get('target_arch')) + if ('Win' in self.builder_cfg.get('os', '') and arch == 'x86_64'): + self.configuration += '_x64' + + self.default_env.update({'SKIA_OUT': self.skia_out, + 'BUILDTYPE': self.configuration}) + + self.patch_storage = self.m.properties.get('patch_storage', 'rietveld') + self.issue = None + self.patchset = None + if self.no_buildbot: + self.is_trybot = False + if (self.m.properties.get('issue', '') and + self.m.properties.get('patchset', '')): + self.is_trybot = True + self.issue = self.m.properties['issue'] + self.patchset = self.m.properties['patchset'] + elif (self.m.properties.get('patch_issue', '') and + self.m.properties.get('patch_set', '')): + self.is_trybot = True + self.issue = self.m.properties['patch_issue'] + self.patchset = self.m.properties['patch_set'] + else: + self.is_trybot = self.builder_cfg['is_trybot'] + if self.is_trybot: + if self.patch_storage == 'gerrit': + self.issue = self.m.properties['patch_issue'] + self.patchset = self.m.properties['patch_set'] + else: + self.issue = self.m.properties['issue'] + self.patchset = self.m.properties['patchset'] + + self.dm_dir = self.m.path.join( + self.swarming_out_dir, 'dm') + self.perf_data_dir = self.m.path.join(self.swarming_out_dir, + 'perfdata', self.builder_name, 'data') + self._swarming_bot_id = None + self._swarming_task_id = None + + # Data should go under in _data_dir, which may be preserved across runs. + self.android_data_dir = '/sdcard/revenge_of_the_skiabot/' + # Executables go under _bin_dir, which, well, allows executable files. + self.android_bin_dir = '/data/local/tmp/' + + @property + def upload_dm_results(self): + # TODO(borenet): Move this into the swarm_test recipe. + skip_upload_bots = [ + 'ASAN', + 'Coverage', + 'MSAN', + 'TSAN', + 'UBSAN', + 'Valgrind', + ] + upload_dm_results = True + for s in skip_upload_bots: + if s in self.m.properties['buildername']: + upload_dm_results = False + break + return upload_dm_results + + @property + def upload_perf_results(self): + # TODO(borenet): Move this into the swarm_perf recipe. + if 'Release' not in self.m.properties['buildername']: + return False + skip_upload_bots = [ + 'ASAN', + 'Coverage', + 'MSAN', + 'TSAN', + 'UBSAN', + 'Valgrind', + ] + upload_perf_results = True + for s in skip_upload_bots: + if s in self.m.properties['buildername']: + upload_perf_results = False + break + return upload_perf_results + + @property + def swarming_bot_id(self): + if not self._swarming_bot_id: + self._swarming_bot_id = self.m.python.inline( + name='get swarming bot id', + program='''import os +print os.environ.get('SWARMING_BOT_ID', '') +''', + stdout=self.m.raw_io.output()).stdout.rstrip() + return self._swarming_bot_id + + @property + def swarming_task_id(self): + if not self._swarming_task_id: + self._swarming_task_id = self.m.python.inline( + name='get swarming task id', + program='''import os +print os.environ.get('SWARMING_TASK_ID', '') +''', + stdout=self.m.raw_io.output()).stdout.rstrip() + return self._swarming_task_id + |