blob: 223d96e20fb260f6f95ce8087d3e9dbac19f9f4c [file] [log] [blame] [edit]
"""Build step class for CCStudio build."""
from __future__ import absolute_import
import os
from slave import base_step
class CCStudioStep(base_step.BaseStep):
"""Build step class for CCStudio build."""
def __init__(self, build_name, name='ccstudio build', **kwargs):
"""Create a CCStudioStep instance.
Args:
build_name: Name of build (e.g. abbey-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 _build(self):
"""Build |build_name| image by CCStudioStep.
Returns:
True if image was built successfully; False if failed.
"""
venv_root = self.get_step_data('virtual_env_root', '/usr')
python_path = os.path.join(venv_root, 'bin')
ccs_dir = os.path.expanduser('~/ccstudio/ccs/eclipse')
src_dir = self.get_project_path('abbey')
dist_dir = self.get_gcs_dir()
command = [
os.path.join(src_dir, 'build', 'build.sh'),
'--python_path={python_path}'.format(python_path=python_path),
'--ccs_dir={ccs_dir}'.format(ccs_dir=ccs_dir),
'--src_dir={src_dir}'.format(src_dir=src_dir),
'--dist_dir={dist_dir}'.format(dist_dir=dist_dir),
'--build_name={build_name}'.format(build_name=self._build_name),
]
returncode, stdout, stderr = self.exec_subprocess(command)
if returncode != 0:
self._error_processor(stdout, stderr)
return False
return True
def run(self):
"""Build images.
Returns:
True if there were no errors.
"""
return self._build()
def _error_processor(self, stdout, stderr):
# TODO(b/141637066): Improve error handling
if stdout:
self.add_review({'message': stdout})
if stderr:
self.add_review({'message': stderr})