| """Steps for executing lucicfg commands.""" |
| |
| from __future__ import absolute_import |
| import logging |
| import os |
| |
| from slave import base_step |
| from helpers import os_utils |
| |
| _CONFIG_PATHS_KEY = 'lucicfg_paths' |
| |
| |
| class FindConfigsStep(base_step.BaseStep): |
| """Step for finding all `main.star` luci configs.""" |
| |
| def __init__(self, **kwargs): |
| super(FindConfigsStep, self).__init__(name='Find luci configs', **kwargs) |
| |
| def _get_config_paths(self): |
| return os_utils.find_files(self.directory, 'main.star') |
| |
| def run(self): |
| config_paths = self._get_config_paths() |
| logging.info(config_paths) |
| self.add_step_data(_CONFIG_PATHS_KEY, config_paths) |
| return True |
| |
| |
| class LucicfgValidateStep(base_step.BaseStep): |
| """Step for running `lucicfg validate` on `main.star` files.""" |
| |
| def __init__(self, **kwargs): |
| super(LucicfgValidateStep, self).__init__(name='Validate configs', **kwargs) |
| |
| def _validate_config(self, config_path): |
| """Runs `lucicfg validate` against a single config.""" |
| cmd = ['lucicfg', 'validate', config_path] |
| |
| # Validate with GCE service account, if specified. |
| if self.get_property('gce_service_account'): |
| cmd.extend(['-service-account-json', |
| self.get_property('gce_service_account')]) |
| |
| retcode, _, stderr = self.exec_subprocess(cmd) |
| |
| if retcode == 0: |
| logging.info('%s is valid!', config_path) |
| return True |
| |
| self.add_review({'message': stderr}) |
| logging.error('%s is NOT valid!', config_path) |
| return False |
| |
| def run(self): |
| """Runs the lucicfg validate step. |
| |
| Attempts to validate every luci config found in the directory. |
| Expects depot_tools to be on $PATH. |
| """ |
| config_paths = self.get_step_data(_CONFIG_PATHS_KEY) |
| results = [] |
| for config_path in config_paths: |
| result = self._validate_config(config_path) |
| results.append(result) |
| |
| return all(results) |