diff --git a/tagging/apply_tags.py b/tagging/apply_tags.py index 6b9a6efb..f057d7ee 100755 --- a/tagging/apply_tags.py +++ b/tagging/apply_tags.py @@ -3,11 +3,14 @@ # Distributed under the terms of the Modified BSD License. import argparse import logging -from tagger_interface import TaggerInterface from dataclasses import dataclass, field from typing import Optional, List -from taggers import SHATagger, \ - PythonVersionTagger, JupyterNotebookVersionTagger, JupyterLabVersionTagger, JupyterHubVersionTagger +from taggers import TaggerInterface, \ + SHATagger, \ + PythonVersionTagger, \ + JupyterNotebookVersionTagger, JupyterLabVersionTagger, JupyterHubVersionTagger, \ + RVersionTagger, TensorflowVersionTagger, JuliaVersionTagger, \ + SparkVersionTagger, HadoopVersionTagger, JavaVersionTagger from plumbum.cmd import docker @@ -29,8 +32,30 @@ ALL_IMAGES = { ] ), "minimal-notebook": ImageDescription( - parent_image="base-notebook", - taggers=[] + parent_image="base-notebook" + ), + "scipy-notebook": ImageDescription( + parent_image="minimal-notebook" + ), + "r-notebook": ImageDescription( + parent_image="minimal-notebook", + taggers=[RVersionTagger] + ), + "tensorflow-notebook": ImageDescription( + parent_image="scipy-notebook", + taggers=[TensorflowVersionTagger] + ), + "datascience-notebook": ImageDescription( + parent_image="scipy-notebook", + taggers=[JuliaVersionTagger] + ), + "pyspark-notebook": ImageDescription( + parent_image="scipy-notebook", + taggers=[SparkVersionTagger, HadoopVersionTagger, JavaVersionTagger] + ), + "allspark-notebook": ImageDescription( + parent_image="pyspark-notebook", + taggers=[RVersionTagger] ) } @@ -49,15 +74,23 @@ def apply_tags(short_image_name, owner): taggers = get_all_taggers(short_image_name) for tagger in taggers: - tag_name, tag_value = tagger.tag_name(), tagger.tag_value(short_image_name, owner) - logger.info(f"Applying tag tag_name: {tag_name} tag_value: {tag_value}") + tagger_name = tagger.__name__ + tag_value = tagger.tag_value(short_image_name, owner) + logger.info(f"Applying tag tagger_name: {tagger_name} tag_value: {tag_value}") docker["tag", f"{owner}/{short_image_name}:latest", f"{owner}/{short_image_name}:{tag_value}"]() if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG) + arg_parser = argparse.ArgumentParser() arg_parser.add_argument("--short-image-name", required=True, help="Short image name to apply tags for") arg_parser.add_argument("--owner", required=True, help="Owner of the image") args = arg_parser.parse_args() - apply_tags(args.short_image_name, args.owner) + + short_image_name = args.short_image_name + owner = args.owner + + assert short_image_name in ALL_IMAGES, f"Did not found {short_image_name} image description" + + apply_tags(short_image_name, owner) diff --git a/tagging/tagger_interface.py b/tagging/tagger_interface.py deleted file mode 100644 index 3020d3b3..00000000 --- a/tagging/tagger_interface.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) Jupyter Development Team. -# Distributed under the terms of the Modified BSD License. - - -class TaggerInterface: - """HooksInterface for all hooks common interface""" - @staticmethod - def tag_value(image): - raise NotImplementedError - - @staticmethod - def tag_name(): - raise NotImplementedError diff --git a/tagging/taggers.py b/tagging/taggers.py index 556ce17a..0c3cb6c0 100644 --- a/tagging/taggers.py +++ b/tagging/taggers.py @@ -1,7 +1,6 @@ # Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. import logging -from tagger_interface import TaggerInterface from git_helper import GitHelper from docker_runner import DockerRunner @@ -18,51 +17,74 @@ def _get_program_version(short_image_name, owner, program): return cont.exec_run(cmd).output.decode("utf-8").strip() +class TaggerInterface: + """HooksInterface for all hooks common interface""" + @staticmethod + def tag_value(image): + raise NotImplementedError + + class SHATagger(TaggerInterface): @staticmethod def tag_value(short_image_name, owner): return GitHelper.commit_hash()[:12] - @staticmethod - def tag_name(): - return "git_sha" - class PythonVersionTagger(TaggerInterface): @staticmethod def tag_value(short_image_name, owner): return "python-" + _get_program_version(short_image_name, owner, "python").split()[1] - @staticmethod - def tag_name(): - return "python_version" - class JupyterNotebookVersionTagger(TaggerInterface): @staticmethod def tag_value(short_image_name, owner): return "notebook-" + _get_program_version(short_image_name, owner, "jupyter-notebook") - @staticmethod - def tag_name(): - return "jupyter_notebook_version" - class JupyterLabVersionTagger(TaggerInterface): @staticmethod def tag_value(short_image_name, owner): return "lab-" + _get_program_version(short_image_name, owner, "jupyter-lab") - @staticmethod - def tag_name(): - return "jupyter_lab_version" - class JupyterHubVersionTagger(TaggerInterface): @staticmethod def tag_value(short_image_name, owner): return "hub-" + _get_program_version(short_image_name, owner, "jupyterhub") + +class RVersionTagger(TaggerInterface): @staticmethod - def tag_name(): - return "jupyter_lab_version" + def tag_value(short_image_name, owner): + return "r-" + _get_program_version(short_image_name, owner, "R") + + +class TensorflowVersionTagger(TaggerInterface): + @staticmethod + def tag_value(short_image_name, owner): + return "tensorflow-" + _get_program_version(short_image_name, owner, "tensorflow") + + +class JuliaVersionTagger(TaggerInterface): + @staticmethod + def tag_value(short_image_name, owner): + return "julia-" + _get_program_version(short_image_name, owner, "julia") + + +class SparkVersionTagger(TaggerInterface): + @staticmethod + def tag_value(short_image_name, owner): + return "spark-" + _get_program_version(short_image_name, owner, "spark") + + +class HadoopVersionTagger(TaggerInterface): + @staticmethod + def tag_value(short_image_name, owner): + return "hadoop-" + _get_program_version(short_image_name, owner, "hadoop") + + +class JavaVersionTagger(TaggerInterface): + @staticmethod + def tag_value(short_image_name, owner): + return "java-" + _get_program_version(short_image_name, owner, "java")