mirror of
https://github.com/jupyter/docker-stacks.git
synced 2025-10-10 11:32:57 +00:00
Implement new taggers; add all the images; simplify code
This commit is contained in:
@@ -3,11 +3,14 @@
|
|||||||
# Distributed under the terms of the Modified BSD License.
|
# Distributed under the terms of the Modified BSD License.
|
||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
from tagger_interface import TaggerInterface
|
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from typing import Optional, List
|
from typing import Optional, List
|
||||||
from taggers import SHATagger, \
|
from taggers import TaggerInterface, \
|
||||||
PythonVersionTagger, JupyterNotebookVersionTagger, JupyterLabVersionTagger, JupyterHubVersionTagger
|
SHATagger, \
|
||||||
|
PythonVersionTagger, \
|
||||||
|
JupyterNotebookVersionTagger, JupyterLabVersionTagger, JupyterHubVersionTagger, \
|
||||||
|
RVersionTagger, TensorflowVersionTagger, JuliaVersionTagger, \
|
||||||
|
SparkVersionTagger, HadoopVersionTagger, JavaVersionTagger
|
||||||
from plumbum.cmd import docker
|
from plumbum.cmd import docker
|
||||||
|
|
||||||
|
|
||||||
@@ -29,8 +32,30 @@ ALL_IMAGES = {
|
|||||||
]
|
]
|
||||||
),
|
),
|
||||||
"minimal-notebook": ImageDescription(
|
"minimal-notebook": ImageDescription(
|
||||||
parent_image="base-notebook",
|
parent_image="base-notebook"
|
||||||
taggers=[]
|
),
|
||||||
|
"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)
|
taggers = get_all_taggers(short_image_name)
|
||||||
|
|
||||||
for tagger in taggers:
|
for tagger in taggers:
|
||||||
tag_name, tag_value = tagger.tag_name(), tagger.tag_value(short_image_name, owner)
|
tagger_name = tagger.__name__
|
||||||
logger.info(f"Applying tag tag_name: {tag_name} tag_value: {tag_value}")
|
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}"]()
|
docker["tag", f"{owner}/{short_image_name}:latest", f"{owner}/{short_image_name}:{tag_value}"]()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
logging.basicConfig(level=logging.DEBUG)
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
|
||||||
arg_parser = argparse.ArgumentParser()
|
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("--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")
|
arg_parser.add_argument("--owner", required=True, help="Owner of the image")
|
||||||
args = arg_parser.parse_args()
|
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)
|
||||||
|
@@ -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
|
|
@@ -1,7 +1,6 @@
|
|||||||
# Copyright (c) Jupyter Development Team.
|
# Copyright (c) Jupyter Development Team.
|
||||||
# Distributed under the terms of the Modified BSD License.
|
# Distributed under the terms of the Modified BSD License.
|
||||||
import logging
|
import logging
|
||||||
from tagger_interface import TaggerInterface
|
|
||||||
from git_helper import GitHelper
|
from git_helper import GitHelper
|
||||||
from docker_runner import DockerRunner
|
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()
|
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):
|
class SHATagger(TaggerInterface):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def tag_value(short_image_name, owner):
|
def tag_value(short_image_name, owner):
|
||||||
return GitHelper.commit_hash()[:12]
|
return GitHelper.commit_hash()[:12]
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def tag_name():
|
|
||||||
return "git_sha"
|
|
||||||
|
|
||||||
|
|
||||||
class PythonVersionTagger(TaggerInterface):
|
class PythonVersionTagger(TaggerInterface):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def tag_value(short_image_name, owner):
|
def tag_value(short_image_name, owner):
|
||||||
return "python-" + _get_program_version(short_image_name, owner, "python").split()[1]
|
return "python-" + _get_program_version(short_image_name, owner, "python").split()[1]
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def tag_name():
|
|
||||||
return "python_version"
|
|
||||||
|
|
||||||
|
|
||||||
class JupyterNotebookVersionTagger(TaggerInterface):
|
class JupyterNotebookVersionTagger(TaggerInterface):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def tag_value(short_image_name, owner):
|
def tag_value(short_image_name, owner):
|
||||||
return "notebook-" + _get_program_version(short_image_name, owner, "jupyter-notebook")
|
return "notebook-" + _get_program_version(short_image_name, owner, "jupyter-notebook")
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def tag_name():
|
|
||||||
return "jupyter_notebook_version"
|
|
||||||
|
|
||||||
|
|
||||||
class JupyterLabVersionTagger(TaggerInterface):
|
class JupyterLabVersionTagger(TaggerInterface):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def tag_value(short_image_name, owner):
|
def tag_value(short_image_name, owner):
|
||||||
return "lab-" + _get_program_version(short_image_name, owner, "jupyter-lab")
|
return "lab-" + _get_program_version(short_image_name, owner, "jupyter-lab")
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def tag_name():
|
|
||||||
return "jupyter_lab_version"
|
|
||||||
|
|
||||||
|
|
||||||
class JupyterHubVersionTagger(TaggerInterface):
|
class JupyterHubVersionTagger(TaggerInterface):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def tag_value(short_image_name, owner):
|
def tag_value(short_image_name, owner):
|
||||||
return "hub-" + _get_program_version(short_image_name, owner, "jupyterhub")
|
return "hub-" + _get_program_version(short_image_name, owner, "jupyterhub")
|
||||||
|
|
||||||
|
|
||||||
|
class RVersionTagger(TaggerInterface):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def tag_name():
|
def tag_value(short_image_name, owner):
|
||||||
return "jupyter_lab_version"
|
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")
|
||||||
|
Reference in New Issue
Block a user