78b471760d
We shouldn't modify self.m.vars.extra_tokens in the docker flavor. I noticed this when doing some debugging. It doesn't seem to be causing any problems currently. Change-Id: I2239787f8aec8a25a6a26418c633e68840f74e04 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/271058 Commit-Queue: Eric Boren <borenet@google.com> Auto-Submit: Ben Wagner aka dogben <benjaminwagner@google.com> Reviewed-by: Eric Boren <borenet@google.com>
69 lines
2.5 KiB
Python
69 lines
2.5 KiB
Python
# Copyright 2014 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
|
|
from . import default
|
|
|
|
"""Docker flavor, used for running inside a Docker container."""
|
|
|
|
|
|
# TODO(dogben): Move this mapping to a machine-editable file.
|
|
# TODO(dogben): Use images without extra packages installed.
|
|
IMAGES = {
|
|
'gcc-debian10': (
|
|
'gcr.io/skia-public/gcc-debian10@sha256:'
|
|
'89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c'),
|
|
'gcc-debian10-x86': (
|
|
'gcr.io/skia-public/gcc-debian10-x86@sha256:'
|
|
'b1ec55403ac66d9500d033d6ffd7663894d32335711fbbb0fb4c67dfce812203'),
|
|
}
|
|
|
|
|
|
class DockerFlavor(default.DefaultFlavor):
|
|
def __init__(self, m):
|
|
super(DockerFlavor, self).__init__(m)
|
|
|
|
def _map_host_path_to_docker(self, path):
|
|
"""Returns the path in the Docker container mapped to the given path.
|
|
|
|
Returns None if the path is not mapped into the Docker container.
|
|
"""
|
|
path = str(path)
|
|
for (docker_dir, host_dir) in [
|
|
(self.m.docker.mount_out(), str(self.m.vars.swarming_out_dir)),
|
|
(self.m.docker.mount_src(), str(self.m.path['start_dir'])),
|
|
]:
|
|
if path.startswith(host_dir):
|
|
return docker_dir + path[len(host_dir):]
|
|
return None
|
|
|
|
def step(self, name, cmd, **unused_kwargs):
|
|
extra_tokens = [t for t in self.m.vars.extra_tokens if t != 'Docker']
|
|
os = self.m.vars.builder_cfg.get('os', '')
|
|
model = self.m.vars.builder_cfg.get('model', '')
|
|
cpu_or_gpu = self.m.vars.builder_cfg.get('cpu_or_gpu', '')
|
|
arch = self.m.vars.builder_cfg.get('arch', '')
|
|
|
|
image_name = None
|
|
if (os == 'Debian10' and model == 'GCE' and cpu_or_gpu == 'CPU' and
|
|
not extra_tokens):
|
|
if arch == 'x86_64':
|
|
image_name = 'gcc-debian10'
|
|
elif arch == 'x86':
|
|
image_name = 'gcc-debian10-x86'
|
|
|
|
if not image_name: # pragma: nocover
|
|
raise Exception('Not implemented: ' + self.m.vars.builder_name)
|
|
|
|
image_hash = IMAGES[image_name]
|
|
|
|
# TODO(dogben): Currently Linux-specific.
|
|
app = self._map_host_path_to_docker(self.device_dirs.bin_dir.join(cmd[0]))
|
|
args = [self.m.docker.mount_src(), 'catchsegv', app] + [
|
|
self._map_host_path_to_docker(x) or x for x in cmd[1:]]
|
|
self.m.docker.run('symbolized %s in Docker' % name, image_hash,
|
|
self.m.path['start_dir'], self.m.vars.swarming_out_dir,
|
|
self.module.resource('symbolize_stack_trace.py'),
|
|
args=args)
|