1# Copyright 2016 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5 6# pylint: disable=W0201 7 8 9from recipe_engine import recipe_api 10 11 12CONFIG_DEBUG = 'Debug' 13CONFIG_RELEASE = 'Release' 14 15 16class SkiaVarsApi(recipe_api.RecipeApi): 17 18 def setup(self): 19 """Prepare the variables.""" 20 # Hack start_dir to remove the "k" directory which is added by Kitchen. 21 # Otherwise, we can't get to the CIPD packages, caches, and isolates which 22 # were put into the task workdir. 23 if self.m.path.c.base_paths['start_dir'][-1] == 'k': # pragma: nocover 24 self.m.path.c.base_paths['start_dir'] = ( 25 self.m.path.c.base_paths['start_dir'][:-1]) 26 27 # Setup 28 self.builder_name = self.m.properties['buildername'] 29 30 self.workdir = self.m.path['start_dir'] 31 32 # Special input/output directories. 33 self.build_dir = self.workdir.join('build') 34 35 self.default_env = self.m.context.env 36 self.default_env['CHROME_HEADLESS'] = '1' 37 self.default_env['PATH'] = self.m.path.pathsep.join([ 38 self.default_env.get('PATH', '%(PATH)s'), 39 str(self.m.bot_update.repo_resource()), 40 ]) 41 self.cache_dir = self.workdir.join('cache') 42 43 self.swarming_out_dir = self.workdir.join( 44 self.m.properties.get('swarm_out_dir', 'tmp')) 45 46 self.tmp_dir = self.m.path['start_dir'].join('tmp') 47 48 self.builder_cfg = self.m.builder_name_schema.DictForBuilderName( 49 self.builder_name) 50 self.role = self.builder_cfg['role'] 51 if self.role == self.m.builder_name_schema.BUILDER_ROLE_HOUSEKEEPER: 52 self.configuration = CONFIG_RELEASE 53 else: 54 self.configuration = self.builder_cfg.get('configuration', CONFIG_DEBUG) 55 arch = (self.builder_cfg.get('arch') or self.builder_cfg.get('target_arch')) 56 if ('Win' in self.builder_cfg.get('os', '') and arch == 'x86_64'): 57 self.configuration += '_x64' 58 59 self.extra_tokens = [] 60 if len(self.builder_cfg.get('extra_config', '')) > 0: 61 if self.builder_cfg['extra_config'].startswith('SK'): 62 assert self.builder_cfg['extra_config'].isupper() 63 self.extra_tokens = [self.builder_cfg['extra_config']] 64 else: 65 self.extra_tokens = self.builder_cfg['extra_config'].split('_') 66 67 self.patch_storage = self.m.properties.get('patch_storage', 'gerrit') 68 self.issue = None 69 self.patchset = None 70 self.is_trybot = False 71 if (self.m.properties.get('patch_issue', '') and 72 self.m.properties['patch_issue'] != '0' and 73 self.m.properties.get('patch_set', '') and 74 self.m.properties['patch_set'] != '0' and 75 self.m.properties.get('patch_ref', '')): 76 self.is_trybot = True 77 self.issue = self.m.properties['patch_issue'] 78 self.patchset = self.m.properties['patch_set'] 79 80 self._swarming_bot_id = None 81 self._swarming_task_id = None 82 83 # Internal bot support. 84 self.internal_hardware_label = ( 85 self.m.properties.get('internal_hardware_label')) 86 self.is_internal_bot = self.internal_hardware_label is not None 87 88 @property 89 def is_linux(self): 90 return ( 91 'Ubuntu' in self.builder_name 92 or 'Debian' in self.builder_name 93 or 'Housekeeper' in self.builder_name 94 ) 95 96 @property 97 def swarming_bot_id(self): 98 if not self._swarming_bot_id: 99 step_stdout = self.m.python.inline( 100 name='get swarming bot id', 101 program='''import os 102print(os.environ.get('SWARMING_BOT_ID', '')) 103''', 104 stdout=self.m.raw_io.output()).stdout.decode('utf-8') 105 self._swarming_bot_id = step_stdout.rstrip() if step_stdout else '' 106 return self._swarming_bot_id 107 108 @property 109 def swarming_task_id(self): 110 if not self._swarming_task_id: 111 step_stdout = self.m.python.inline( 112 name='get swarming task id', 113 program='''import os 114print(os.environ.get('SWARMING_TASK_ID', '')) 115''', 116 stdout=self.m.raw_io.output()).stdout.decode('utf-8') 117 self._swarming_task_id = step_stdout.rstrip() if step_stdout else '' 118 return self._swarming_task_id 119