def gather_rosdeps( docker_client: DockerClient, platform: Platform, workspace: Path, skip_rosdep_keys: List[str] = [], custom_script: Optional[Path] = None, custom_data_dir: Optional[Path] = None, ) -> None: """ Run the rosdep Docker image, which outputs a script for dependency installation. :param docker_client: Will be used to run the container :param platform: The name of the image produced by `build_rosdep_image` :param workspace: Absolute path to the colcon source workspace. :param custom_script: Optional absolute path of a script that does custom setup for rosdep :param custom_data_dir: Optional absolute path of a directory containing custom data for setup :return None """ out_path = rosdep_install_script(platform) logger.info('Building rosdep collector image: %s', _IMG_NAME) docker_client.build_image( dockerfile_name='rosdep.Dockerfile', tag=_IMG_NAME, ) logger.info( 'Running rosdep collector image on workspace {}'.format(workspace)) volumes = { workspace: '/ws', } if custom_script: volumes[custom_script] = CUSTOM_SETUP if custom_data_dir: volumes[custom_data_dir] = CUSTOM_DATA docker_client.run_container( image_name=_IMG_NAME, environment={ 'CUSTOM_SETUP': CUSTOM_SETUP, 'OUT_PATH': str(out_path), 'OWNER_USER': str(os.getuid()), 'ROSDISTRO': platform.ros_distro, 'SKIP_ROSDEP_KEYS': ' '.join(skip_rosdep_keys), 'COLCON_DEFAULTS_FILE': 'defaults.yaml', 'TARGET_OS': '{}:{}'.format(platform.os_name, platform.os_distro), }, volumes=volumes, )
def run_emulated_docker_build(docker_client: DockerClient, platform: Platform, workspace_path: Path) -> None: """ Spin up a sysroot docker container and run an emulated build inside. :param docker_client: Preconfigured to run Docker images. :param platform: Information about the target platform. :param workspace: Absolute path to the user's source workspace. """ docker_client.run_container( image_name=platform.sysroot_image_tag, environment={ 'OWNER_USER': str(os.getuid()), 'ROS_DISTRO': platform.ros_distro, 'TARGET_ARCH': platform.arch, }, volumes={ workspace_path: '/ros_ws', }, )