aboutsummaryrefslogtreecommitdiffhomepage
path: root/infra/bots/recipe_modules/vars
diff options
context:
space:
mode:
authorGravatar Eric Boren <borenet@google.com>2017-02-02 09:02:37 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-02-02 14:31:45 +0000
commit7e97dc0aa1ff5b03593e689fe1cfdcc3550c169e (patch)
treef29cb093e1fdd069cfc119dfc5b1e24097401bfd /infra/bots/recipe_modules/vars
parent8233fc82b00763d37a7b0db7890b15c7d58939d4 (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__.py13
-rw-r--r--infra/bots/recipe_modules/vars/api.py213
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
+