Files
docker-stacks/tagging/taggers.py
2021-05-01 11:04:44 +03:00

111 lines
3.2 KiB
Python

# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
import logging
from .git_helper import GitHelper
from .docker_runner import run_simple_command
logger = logging.getLogger(__name__)
def _get_program_version(container, program):
return run_simple_command(container, cmd=f"{program} --version")
def _get_env_variable(container, variable):
env = run_simple_command(container, cmd="env", print_result=False).split()
for env_entry in env:
if env_entry.startswith(variable):
return env_entry[len(variable) + 1:]
raise KeyError(variable)
def _get_pip_package_version(container, package):
VERSION_PREFIX = "Version: "
package_info = run_simple_command(container, cmd=f"pip show {package}", print_result=False)
version_line = package_info.split("\n")[1]
assert version_line.startswith(VERSION_PREFIX)
return version_line[len(VERSION_PREFIX):]
class TaggerInterface:
"""Common interface for all taggers"""
@staticmethod
def tag_value(container):
raise NotImplementedError
class SHATagger(TaggerInterface):
@staticmethod
def tag_value(container):
return GitHelper.commit_hash_tag()
class UbuntuVersionTagger(TaggerInterface):
@staticmethod
def tag_value(container):
os_release = run_simple_command(container, "cat /etc/os-release").split("\n")
for line in os_release:
if line.startswith("VERSION_ID"):
return "ubuntu-" + line.split("=")[1].strip('"')
class PythonVersionTagger(TaggerInterface):
@staticmethod
def tag_value(container):
return "python-" + _get_program_version(container, "python").split()[1]
class JupyterNotebookVersionTagger(TaggerInterface):
@staticmethod
def tag_value(container):
return "notebook-" + _get_program_version(container, "jupyter-notebook")
class JupyterLabVersionTagger(TaggerInterface):
@staticmethod
def tag_value(container):
return "lab-" + _get_program_version(container, "jupyter-lab")
class JupyterHubVersionTagger(TaggerInterface):
@staticmethod
def tag_value(container):
return "hub-" + _get_program_version(container, "jupyterhub")
class RVersionTagger(TaggerInterface):
@staticmethod
def tag_value(container):
return "r-" + _get_program_version(container, "R").split()[2]
class TensorflowVersionTagger(TaggerInterface):
@staticmethod
def tag_value(container):
return "tensorflow-" + _get_pip_package_version(container, "tensorflow")
class JuliaVersionTagger(TaggerInterface):
@staticmethod
def tag_value(container):
return "julia-" + _get_program_version(container, "julia").split()[2]
class SparkVersionTagger(TaggerInterface):
@staticmethod
def tag_value(container):
return "spark-" + _get_env_variable(container, "APACHE_SPARK_VERSION")
class HadoopVersionTagger(TaggerInterface):
@staticmethod
def tag_value(container):
return "hadoop-" + _get_env_variable(container, "HADOOP_VERSION")
class JavaVersionTagger(TaggerInterface):
@staticmethod
def tag_value(container):
return "java-" + _get_program_version(container, "java").split()[1]