xref: /aosp_15_r20/external/skia/infra/bots/recipe_modules/vars/api.py (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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.basename(self.m.path.start_dir) == 'k':  # pragma: nocover
24      self.m.path._start_dir = self.m.path._start_dir[:-2]
25
26    # Setup
27    self.builder_name = self.m.properties['buildername']
28
29    self.workdir = self.m.path.start_dir
30
31    # Special input/output directories.
32    self.build_dir = self.workdir.joinpath('build')
33
34    self.default_env = self.m.context.env
35    self.default_env['CHROME_HEADLESS'] = '1'
36    self.default_env['PATH'] = self.m.path.pathsep.join([
37        self.default_env.get('PATH', '%(PATH)s'),
38        str(self.m.bot_update.repo_resource()),
39    ])
40    self.cache_dir = self.workdir.joinpath('cache')
41
42    self.swarming_out_dir = self.workdir.joinpath(
43        self.m.properties.get('swarm_out_dir', 'tmp'))
44
45    self.tmp_dir = self.m.path.start_dir.joinpath('tmp')
46
47    self.builder_cfg = self.m.builder_name_schema.DictForBuilderName(
48        self.builder_name)
49    self.role = self.builder_cfg['role']
50    if self.role == self.m.builder_name_schema.BUILDER_ROLE_HOUSEKEEPER:
51      self.configuration = CONFIG_RELEASE
52    else:
53      self.configuration = self.builder_cfg.get('configuration', CONFIG_DEBUG)
54    arch = (self.builder_cfg.get('arch') or self.builder_cfg.get('target_arch'))
55    if ('Win' in self.builder_cfg.get('os', '') and arch == 'x86_64'):
56      self.configuration += '_x64'
57
58    self.extra_tokens = []
59    if len(self.builder_cfg.get('extra_config', '')) > 0:
60      if self.builder_cfg['extra_config'].startswith('SK'):
61        assert self.builder_cfg['extra_config'].isupper()
62        self.extra_tokens = [self.builder_cfg['extra_config']]
63      else:
64        self.extra_tokens = self.builder_cfg['extra_config'].split('_')
65
66    self.patch_storage = self.m.properties.get('patch_storage', 'gerrit')
67    self.issue = None
68    self.patchset = None
69    self.is_trybot = False
70    if (self.m.properties.get('patch_issue', '') and
71        self.m.properties['patch_issue'] != '0' and
72        self.m.properties.get('patch_set', '') and
73        self.m.properties['patch_set'] != '0' and
74        self.m.properties.get('patch_ref', '')):
75      self.is_trybot = True
76      self.issue = self.m.properties['patch_issue']
77      self.patchset = self.m.properties['patch_set']
78
79    self._swarming_bot_id = None
80    self._swarming_task_id = None
81
82    # Internal bot support.
83    self.internal_hardware_label = (
84        self.m.properties.get('internal_hardware_label'))
85    self.is_internal_bot = self.internal_hardware_label is not None
86
87  @property
88  def is_linux(self):
89    return (
90        'Ubuntu' in self.builder_name
91     or 'Debian' in self.builder_name
92     or 'Housekeeper' in self.builder_name
93    )
94
95  @property
96  def swarming_bot_id(self):
97    if not self._swarming_bot_id:
98      script = self.resource('get_env_var.py')
99      step_stdout = self.m.step(
100          name='get swarming bot id',
101          cmd=['python3', script, 'SWARMING_BOT_ID'],
102          stdout=self.m.raw_io.output()).stdout.decode('utf-8')
103      self._swarming_bot_id = step_stdout.rstrip() if step_stdout else ''
104    return self._swarming_bot_id
105
106  @property
107  def swarming_task_id(self):
108    if not self._swarming_task_id:
109      script = self.resource('get_env_var.py')
110      step_stdout = self.m.step(
111          name='get swarming task id',
112          cmd=['python3', script, 'SWARMING_TASK_ID'],
113          stdout=self.m.raw_io.output()).stdout.decode('utf-8')
114      self._swarming_task_id = step_stdout.rstrip() if step_stdout else ''
115    return self._swarming_task_id
116