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,
    )
Example #2
0
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',
        },
    )