| """Build step class for Dipper build.""" |
| |
| from __future__ import absolute_import |
| import os |
| |
| from slave import base_step |
| |
| class DipperStep(base_step.BaseStep): |
| """Build step class for Dipper build.""" |
| |
| def __init__(self, build_name, name='Dipper build', **kwargs): |
| """Create a Dipper instance. |
| |
| Args: |
| build_name: Name of build (e.g. dipper-eng). |
| name: User-visible name of this step. |
| **kwargs: Any additional args to pass to BaseStep. |
| """ |
| base_step.BaseStep.__init__(self, name=name, **kwargs) |
| self._build_name = build_name |
| |
| def _get_pip_local_path(self): |
| """Gets the local python package folder. |
| |
| Returns: |
| The local dipper-required python package folder as string. |
| """ |
| gcs_path = self._properties.get( |
| 'gcs_mirror_path', '/workspace/gcs-mirror') |
| return os.path.expanduser(os.path.join(gcs_path, |
| 'team-dipper/python_packages')) |
| |
| def _build(self, variant, src_dir): |
| """Build |build_name| artifacts by Dipper toolchain. |
| |
| Args: |
| variant: "user" or "eng" variant |
| src_dir: the root path of source codes |
| |
| Returns: |
| True if artifacts were built successfully; False if failed. |
| """ |
| os.environ['PIP_FIND_LINKS'] = self._get_pip_local_path() |
| |
| build_command = [ |
| os.path.join('build', 'build.sh'), |
| '--{variant}'.format(variant=variant), |
| ] |
| returncode, stdout, stderr = self.exec_subprocess( |
| build_command, cwd=src_dir) |
| if returncode != 0: |
| self._error_processor(stdout, stderr) |
| return False |
| |
| return True |
| |
| def _copy(self, variant, src_dir): |
| """Copy |build_name| artifacts to GCS. |
| |
| Args: |
| variant: "user" or "eng" variant |
| src_dir: the root path of source codes |
| |
| Returns: |
| True if artifacts were copied successfully; False if failed. |
| """ |
| |
| artifacts_path = 'out/target/product/dipper' |
| artifacts_file = os.path.join( |
| artifacts_path, 'd6_artifacts-{variant}.zip'.format(variant=variant)) |
| dist_dir = self.get_gcs_dir() |
| copy_command = [ |
| 'cp', |
| artifacts_file, |
| dist_dir |
| ] |
| returncode, stdout, stderr = self.exec_subprocess(copy_command, cwd=src_dir) |
| if returncode != 0: |
| self._error_processor(stdout, stderr) |
| return False |
| |
| return True |
| |
| def run(self): |
| """Build artifacts and copy to distribution(GCS). |
| |
| Returns: |
| True if there were no errors. |
| """ |
| variant = "user" if self._build_name.endswith("user") else "eng" |
| src_dir = self.get_project_path('telink/d6') |
| |
| return self._build(variant, src_dir) and self._copy(variant, src_dir) |
| |
| def _error_processor(self, stdout, stderr): |
| if stdout: |
| self.add_review({'message': stdout}) |
| if stderr: |
| self.add_review({'message': stderr}) |