diff planemo/lib/python3.7/site-packages/galaxy/tool_util/deps/dockerfiles.py @ 0:d30785e31577 draft

"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author guerler
date Fri, 31 Jul 2020 00:18:57 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/planemo/lib/python3.7/site-packages/galaxy/tool_util/deps/dockerfiles.py	Fri Jul 31 00:18:57 2020 -0400
@@ -0,0 +1,75 @@
+import logging
+import os
+
+from galaxy.tool_util.deps import docker_util
+from galaxy.tool_util.deps.container_classes import docker_cache_path
+from galaxy.tool_util.deps.requirements import parse_requirements_from_xml
+from galaxy.tool_util.loader_directory import load_tool_elements_from_path
+from galaxy.util import commands
+
+log = logging.getLogger(__name__)
+
+
+def docker_host_args(**kwds):
+    return dict(
+        docker_cmd=kwds["docker_cmd"],
+        sudo=kwds["docker_sudo"],
+        sudo_cmd=kwds["docker_sudo_cmd"],
+        host=kwds["docker_host"]
+    )
+
+
+def dockerfile_build(path, dockerfile=None, error=log.error, **kwds):
+    expected_container_names = set()
+    tool_directories = set()
+    for (tool_path, tool_xml) in load_tool_elements_from_path(path):
+        requirements, containers = parse_requirements_from_xml(tool_xml)
+        for container in containers:
+            if container.type == "docker":
+                expected_container_names.add(container.identifier)
+                tool_directories.add(os.path.dirname(tool_path))
+                break
+
+    if len(expected_container_names) == 0:
+        error("Could not find any docker identifiers to generate.")
+
+    if len(expected_container_names) > 1:
+        error("Multiple different docker identifiers found for selected tools [%s]", expected_container_names)
+
+    image_identifier = expected_container_names.pop()
+
+    dockerfile = __find_dockerfile(dockerfile, tool_directories)
+    if dockerfile is not None:
+        docker_command_parts = docker_util.build_command(
+            image_identifier,
+            dockerfile,
+            **docker_host_args(**kwds)
+        )
+    else:
+        docker_command_parts = docker_util.build_pull_command(image_identifier, **docker_host_args(**kwds))
+        commands.execute(docker_command_parts)
+
+    commands.execute(docker_command_parts)
+    docker_image_cache = kwds['docker_image_cache']
+    if docker_image_cache:
+        destination = docker_cache_path(docker_image_cache, image_identifier)
+        save_image_command_parts = docker_util.build_save_image_command(
+            image_identifier,
+            destination,
+            **docker_host_args(**kwds)
+        )
+        commands.execute(save_image_command_parts)
+
+
+def __find_dockerfile(dockerfile, tool_directories):
+    if dockerfile is not None:
+        return dockerfile
+    search_directories = ["."]
+    if len(tool_directories) == 1:
+        tool_directory = tool_directories.pop()
+        search_directories.insert(0, tool_directory)
+    for directory in search_directories:
+        potential_dockerfile = os.path.join(directory, "Dockerfile")
+        if os.path.exists(potential_dockerfile):
+            return potential_dockerfile
+    return None