8from recipe_engine
import recipe_api
16 def _chmod(self, filepath, mode, recursive=False):
20 cmd.extend([mode, filepath])
21 name =
' '.
join([str(elem)
for elem
in cmd])
22 self.m.
step(name, cmd=cmd, infra_step=
True)
32 def run(self, name, docker_image, src_dir, out_dir, script, args=None, docker_args=None, copies=None, recursive_read=None, attempts=1, match_directory_structure=False):
35 with self.m.step.nest(
'Docker setup'):
36 uid_gid_script = self.resource(
'get_uid_gid.py')
37 step_stdout = self.m.
step(
38 name=
'Get uid and gid',
39 cmd=[
'python3', uid_gid_script],
40 stdout=self.m.raw_io.output(),
42 lambda: self.m.raw_io.test_api.stream_output(
'13:17'))
43 ).stdout.decode(
'utf-8')
44 uid_gid_pair = step_stdout.rstrip()
if step_stdout
else ''
48 self.m.file.ensure_directory(
'mkdirs out_dir', out_dir, mode=0o777)
51 self.
_chmod(out_dir,
'777')
55 self.
_chmod(src_dir,
'755')
58 self.
_chmod(script,
'0755')
65 dirname = self.m.path.dirname(dest)
66 self.m.file.ensure_directory(
67 'mkdirs %s' % dirname, dirname, mode=0o777)
68 self.m.file.copy(
'cp %s %s' % (src, dest), src, dest)
73 for elem
in recursive_read:
74 self.
_chmod(elem,
'a+r', recursive=
True)
78 'docker',
'run',
'--shm-size=2gb',
'--rm',
'--user', uid_gid_pair,
79 '--mount',
'type=bind,source=%s,target=%s' %
80 (src_dir, src_dir
if match_directory_structure
else MOUNT_SRC),
81 '--mount',
'type=bind,source=%s,target=%s' %
82 (out_dir, out_dir
if match_directory_structure
else MOUNT_OUT),
85 cmd.extend(docker_args)
86 if not match_directory_structure:
89 script = MOUNT_SRC +
'/' + posixpath.relpath(str(script), str(self.m.path.start_dir))
90 cmd.extend([docker_image, script])
94 env = {
'DOCKER_CONFIG':
'/home/chrome-bot/.docker'}
96 self.m.run.with_retry(self.m.step, name, attempts, cmd=cmd)
static int step(int x, SkScalar min, SkScalar max)
def run(self, name, docker_image, src_dir, out_dir, script, args=None, docker_args=None, copies=None, recursive_read=None, attempts=1, match_directory_structure=False)
def _chmod(self, filepath, mode, recursive=False)
static SkString join(const CommandLineFlags::StringArray &)