From 7f7edbb21e072bde617d6acba03c631f4b2e4330 Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Fri, 2 May 2025 12:54:20 -0300 Subject: [PATCH 01/19] RHOAIENG-16568: [Bug] Unable to download notebook as a PDF from JupyterLab Workbenches --- .../minimal/ubi9-python-3.11/Dockerfile.cpu | 19 ++++++++++++++++--- .../ubi9-python-3.11/start-notebook.sh | 3 +++ jupyter/utils/jupyter_server_config.py | 5 +++++ 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 jupyter/utils/jupyter_server_config.py diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu index b1be0bc41..89a8020a2 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu @@ -11,6 +11,15 @@ USER 0 # Install useful OS packages RUN dnf install -y mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +# TexLive dependency for PDF export +RUN echo "Installing TexLive to allow PDf export from Notebooks" && \ + wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz && \ + zcat < install-tl-unx.tar.gz | tar xf - && \ + cd install-tl-2* && \ + perl ./install-tl --no-interaction --scheme=scheme-small && \ + cd /usr/local/texlive/2025/bin/x86_64-linux && \ + ./tlmgr install tcolorbox pdfcol adjustbox titling enumitem soul ucs collection-fontsrecommended + # Other apps and tools installed as default user USER 1001 @@ -19,10 +28,12 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]" # Install the oc client RUN curl -L https://mirror.openshift.com/pub/openshift-v4/$(uname -m)/clients/ocp/stable/openshift-client-linux.tar.gz \ - -o /tmp/openshift-client-linux.tar.gz && \ + -o /tmp/openshift-client-linux.tar.gz && \ tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ rm -f /tmp/openshift-client-linux.tar.gz + + #################### # jupyter-minimal # #################### @@ -45,7 +56,7 @@ WORKDIR /opt/app-root/bin COPY ${JUPYTER_REUSABLE_UTILS} utils/ -COPY ${MINIMAL_SOURCE_CODE}/Pipfile.lock ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ +COPY ${MINIMAL_SOURCE_CODE}/Pipfile.lock ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ # Install Python dependencies from Pipfile.lock file RUN echo "Installing softwares and packages" && \ @@ -55,12 +66,14 @@ RUN echo "Installing softwares and packages" && \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + # copy jupyter configuration + cp /opt/app-root/bin/utils/jupyter_server_config.py /opt/app-root/etc/jupyter && \ # Fix permissions to support pip in Openshift environments \ chmod -R g+w /opt/app-root/lib/python3.11/site-packages && \ fix-permissions /opt/app-root -P && \ # Apply JupyterLab addons \ /opt/app-root/bin/utils/addons/apply.sh - + WORKDIR /opt/app-root/src ENTRYPOINT ["start-notebook.sh"] \ No newline at end of file diff --git a/jupyter/minimal/ubi9-python-3.11/start-notebook.sh b/jupyter/minimal/ubi9-python-3.11/start-notebook.sh index 2773e05b2..957c59198 100755 --- a/jupyter/minimal/ubi9-python-3.11/start-notebook.sh +++ b/jupyter/minimal/ubi9-python-3.11/start-notebook.sh @@ -8,6 +8,9 @@ if [ -f "${SCRIPT_DIR}/utils/setup-elyra.sh" ]; then source ${SCRIPT_DIR}/utils/setup-elyra.sh fi +export PATH=/usr/local/texlive/2025/bin/x86_64-linux:$PATH + + # Initialize notebooks arguments variable NOTEBOOK_PROGRAM_ARGS="" diff --git a/jupyter/utils/jupyter_server_config.py b/jupyter/utils/jupyter_server_config.py new file mode 100644 index 000000000..9bc18c3f5 --- /dev/null +++ b/jupyter/utils/jupyter_server_config.py @@ -0,0 +1,5 @@ +c = get_config() +# Disable unsupported exporters +c.WebPDFExporter.enabled = False +c.QtPDFExporter.enabled = False +c.QtPNGExporter.enabled = False From dea7051901aa7419b7d3784f8a7dbf7c5663c25d Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Mon, 5 May 2025 17:24:04 -0300 Subject: [PATCH 02/19] Running installation from a script --- .../minimal/ubi9-python-3.11/Dockerfile.cpu | 18 ++++++++---------- .../minimal/ubi9-python-3.11/Dockerfile.cuda | 7 +++++++ .../minimal/ubi9-python-3.11/Dockerfile.rocm | 7 +++++++ jupyter/utils/install_text_live.sh | 7 +++++++ jupyter/utils/jupyter_server_config.py | 1 + 5 files changed, 30 insertions(+), 10 deletions(-) create mode 100755 jupyter/utils/install_text_live.sh diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu index 89a8020a2..b1ba7cb6f 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu @@ -11,15 +11,6 @@ USER 0 # Install useful OS packages RUN dnf install -y mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum -# TexLive dependency for PDF export -RUN echo "Installing TexLive to allow PDf export from Notebooks" && \ - wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz && \ - zcat < install-tl-unx.tar.gz | tar xf - && \ - cd install-tl-2* && \ - perl ./install-tl --no-interaction --scheme=scheme-small && \ - cd /usr/local/texlive/2025/bin/x86_64-linux && \ - ./tlmgr install tcolorbox pdfcol adjustbox titling enumitem soul ucs collection-fontsrecommended - # Other apps and tools installed as default user USER 1001 @@ -56,7 +47,14 @@ WORKDIR /opt/app-root/bin COPY ${JUPYTER_REUSABLE_UTILS} utils/ -COPY ${MINIMAL_SOURCE_CODE}/Pipfile.lock ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ +USER 0 + +# TexLive dependency for PDF export +RUN ./utils/install_text_live.sh + +USER 1001 + +COPY ${MINIMAL_SOURCE_CODE}/Pipfile.lock ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ # Install Python dependencies from Pipfile.lock file RUN echo "Installing softwares and packages" && \ diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda index baa668268..0a4105754 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda @@ -165,6 +165,13 @@ WORKDIR /opt/app-root/bin COPY ${JUPYTER_REUSABLE_UTILS} utils/ +USER 0 + +# TexLive dependency for PDF export +RUN ./utils/install_text_live.sh + +USER 1001 + COPY ${MINIMAL_SOURCE_CODE}/Pipfile.lock ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ # Install Python dependencies from Pipfile.lock file diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm index 64d51898e..0bd0f28d5 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm @@ -79,6 +79,13 @@ WORKDIR /opt/app-root/bin COPY ${JUPYTER_REUSABLE_UTILS} utils/ +USER 0 + +# TexLive dependency for PDF export +RUN ./utils/install_text_live.sh + +USER 1001 + COPY ${MINIMAL_SOURCE_CODE}/Pipfile.lock ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ # Install Python dependencies from Pipfile.lock file diff --git a/jupyter/utils/install_text_live.sh b/jupyter/utils/install_text_live.sh new file mode 100755 index 000000000..f3c95df2a --- /dev/null +++ b/jupyter/utils/install_text_live.sh @@ -0,0 +1,7 @@ +echo "Installing TexLive to allow PDf export from Notebooks" && \ +curl -L https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz -o install-tl-unx.tar.gz && \ +zcat < install-tl-unx.tar.gz | tar xf - && \ +cd install-tl-2* && \ +perl ./install-tl --no-interaction --scheme=scheme-small && \ +cd /usr/local/texlive/2025/bin/x86_64-linux && \ +./tlmgr install tcolorbox pdfcol adjustbox titling enumitem soul ucs collection-fontsrecommended \ No newline at end of file diff --git a/jupyter/utils/jupyter_server_config.py b/jupyter/utils/jupyter_server_config.py index 9bc18c3f5..62e828683 100644 --- a/jupyter/utils/jupyter_server_config.py +++ b/jupyter/utils/jupyter_server_config.py @@ -1,3 +1,4 @@ +# https://github.com/opendatahub-io-contrib/workbench-images/blob/main/snippets/ides/1-jupyter/files/etc/jupyter_notebook_config.py c = get_config() # Disable unsupported exporters c.WebPDFExporter.enabled = False From a94c7afd7ae659895cd904673fa952ef56a99c43 Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Tue, 6 May 2025 15:10:31 -0300 Subject: [PATCH 03/19] Adding test and fixing path --- .../minimal/ubi9-python-3.11/Dockerfile.cpu | 3 +++ .../minimal/ubi9-python-3.11/Dockerfile.cuda | 1 + .../minimal/ubi9-python-3.11/Dockerfile.rocm | 1 + .../ubi9-python-3.11/start-notebook.sh | 3 --- .../workbenches/jupyterlab/jupyterlab_test.py | 15 +++++++++++ .../workbenches/jupyterlab/test.ipynb | 25 +++++++++++++++++++ 6 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 tests/containers/workbenches/jupyterlab/test.ipynb diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu index b1ba7cb6f..455a2b4d2 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu @@ -52,6 +52,9 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_text_live.sh +ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" + + USER 1001 COPY ${MINIMAL_SOURCE_CODE}/Pipfile.lock ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda index 0a4105754..9a1eb2ac2 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda @@ -169,6 +169,7 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_text_live.sh +ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm index 0bd0f28d5..cd929f617 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm @@ -83,6 +83,7 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_text_live.sh +ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/minimal/ubi9-python-3.11/start-notebook.sh b/jupyter/minimal/ubi9-python-3.11/start-notebook.sh index 957c59198..2773e05b2 100755 --- a/jupyter/minimal/ubi9-python-3.11/start-notebook.sh +++ b/jupyter/minimal/ubi9-python-3.11/start-notebook.sh @@ -8,9 +8,6 @@ if [ -f "${SCRIPT_DIR}/utils/setup-elyra.sh" ]; then source ${SCRIPT_DIR}/utils/setup-elyra.sh fi -export PATH=/usr/local/texlive/2025/bin/x86_64-linux:$PATH - - # Initialize notebooks arguments variable NOTEBOOK_PROGRAM_ARGS="" diff --git a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py index c81858e29..65b7ebe71 100644 --- a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py +++ b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py @@ -5,6 +5,7 @@ import allure import requests + from tests.containers import docker_utils from tests.containers.workbenches.workbench_image_test import WorkbenchContainer @@ -54,3 +55,17 @@ def test_spinner_html_loaded(self, jupyterlab_image: docker.models.images.Image) assert 'class="pf-v6-c-spinner"' in response.text finally: docker_utils.NotebookContainer(container).stop(timeout=0) + + @allure.issue("RHOAIENG-16568") + @allure.description("Check that PDF export is working correctly") + def test_pdf_export(self, jupyterlab_image: docker.models.images.Image) -> None: + container = WorkbenchContainer(image=jupyterlab_image, user=4321, group_add=[0]) + try: + test_notebook = "test.ipynb" + container.start(wait_for_readiness=True) + docker_utils.container_cp(container.get_wrapped_container(), test_notebook, self.APP_ROOT_HOME) + exit_code, convert_output = container.exec(["jupyter", "nbconvert", test_notebook, "--to", "pdf"]) + assert "PDF successfully created" in convert_output.decode() + assert 0 == exit_code + finally: + docker_utils.NotebookContainer(container).stop(timeout=0) \ No newline at end of file diff --git a/tests/containers/workbenches/jupyterlab/test.ipynb b/tests/containers/workbenches/jupyterlab/test.ipynb new file mode 100644 index 000000000..b208f1e52 --- /dev/null +++ b/tests/containers/workbenches/jupyterlab/test.ipynb @@ -0,0 +1,25 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "952c981e", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [ + "print('Hello World')" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 8c8a58de4814da8e7232fefb27bbfd5467008375 Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Tue, 6 May 2025 15:26:10 -0300 Subject: [PATCH 04/19] Fixing Script file name --- jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu | 2 +- jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda | 2 +- jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm | 2 +- jupyter/utils/{install_text_live.sh => install_tex_live.sh} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename jupyter/utils/{install_text_live.sh => install_tex_live.sh} (100%) diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu index 455a2b4d2..a7ce21908 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu @@ -50,7 +50,7 @@ COPY ${JUPYTER_REUSABLE_UTILS} utils/ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_text_live.sh +RUN ./utils/install_tex_live.sh ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda index 9a1eb2ac2..d940ccb98 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda @@ -168,7 +168,7 @@ COPY ${JUPYTER_REUSABLE_UTILS} utils/ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_text_live.sh +RUN ./utils/install_tex_live.sh ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm index cd929f617..2731ed345 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm @@ -82,7 +82,7 @@ COPY ${JUPYTER_REUSABLE_UTILS} utils/ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_text_live.sh +RUN ./utils/install_tex_live.sh ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/utils/install_text_live.sh b/jupyter/utils/install_tex_live.sh similarity index 100% rename from jupyter/utils/install_text_live.sh rename to jupyter/utils/install_tex_live.sh From 7937ac92e7a3cf9cef6e6f789fb80a1497f50ae4 Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Tue, 6 May 2025 16:01:37 -0300 Subject: [PATCH 05/19] Using minimal tmp file instead a fixed file --- logs/pytest-logs.txt | 107 ++++++++++++++++++ .../workbenches/jupyterlab/jupyterlab_test.py | 12 +- .../workbenches/jupyterlab/test.ipynb | 25 ---- 3 files changed, 115 insertions(+), 29 deletions(-) create mode 100644 logs/pytest-logs.txt delete mode 100644 tests/containers/workbenches/jupyterlab/test.ipynb diff --git a/logs/pytest-logs.txt b/logs/pytest-logs.txt new file mode 100644 index 000000000..5dae89314 --- /dev/null +++ b/logs/pytest-logs.txt @@ -0,0 +1,107 @@ +INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/_ping HTTP/1.1" 200 2 +INFO root:conftest.py:121 Env variable TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE not set, setting it now +INFO root:conftest.py:123 We are on Linux, setting socket_path='/run/user/16481/podman/podman.sock' for TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE +WARNING root:conftest.py:140 Ryuk is enabled. This may not work with rootless podman. +INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 +INFO testcontainers.core.container:container.py:98 Pulling image testcontainers/ryuk:0.8.1 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/create?name=testcontainers-ryuk-b0bcab84-dda0-4e93-ab06-3f49dbae1c19 HTTP/1.1" 201 88 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/json HTTP/1.1" 200 None +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/start HTTP/1.1" 204 0 +INFO testcontainers.core.container:container.py:125 Container started: fd38a9920ac8 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/logs?stderr=0&stdout=1×tamps=0&follow=0&tail=all HTTP/1.1" 200 None +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/json HTTP/1.1" 200 None +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/logs?stderr=1&stdout=0×tamps=0&follow=0&tail=all HTTP/1.1" 200 None +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/json HTTP/1.1" 200 None +INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image testcontainers/ryuk:0.8.1 to be ready ... +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/json HTTP/1.1" 200 None +INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/images/quay.io/wsiqueir/workbench-images:jupyter-minimal-ubi9-python-3.11-texlive_install_with_script_export_on_dockerfile_20250506/json HTTP/1.1" 200 None +INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 +INFO testcontainers.core.container:container.py:98 Pulling image +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/create HTTP/1.1" 201 88 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/start HTTP/1.1" 204 0 +INFO testcontainers.core.container:container.py:125 Container started: 45bcdc1a907c +INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None +DEBUG root:workbench_image_test.py:194 {'Binds': [], 'ContainerIDFile': '', 'LogConfig': {'Type': 'journald', 'Config': None}, 'NetworkMode': 'bridge', 'PortBindings': {'8888/tcp': [{'HostIp': '0.0.0.0', 'HostPort': '41335'}]}, 'RestartPolicy': {'Name': 'no', 'MaximumRetryCount': 0}, 'AutoRemove': False, 'VolumeDriver': '', 'VolumesFrom': None, 'ConsoleSize': [0, 0], 'Annotations': {'io.container.manager': 'libpod', 'org.opencontainers.image.stopSignal': '15', 'org.systemd.property.KillSignal': '15', 'org.systemd.property.TimeoutStopUSec': 'uint64 10000000'}, 'CapAdd': [], 'CapDrop': [], 'CgroupnsMode': '', 'Dns': [], 'DnsOptions': [], 'DnsSearch': [], 'ExtraHosts': [], 'GroupAdd': ['0'], 'IpcMode': 'shareable', 'Cgroup': '', 'Links': None, 'OomScoreAdj': 200, 'PidMode': 'private', 'Privileged': False, 'PublishAllPorts': False, 'ReadonlyRootfs': False, 'SecurityOpt': [], 'Tmpfs': {'/opt/app-root/src': 'rw,rprivate,nosuid,nodev'}, 'UTSMode': 'private', 'UsernsMode': '', 'ShmSize': 65536000, 'Runtime': 'oci', 'Isolation': '', 'CpuShares': 0, 'Memory': 0, 'NanoCpus': 0, 'CgroupParent': 'user.slice', 'BlkioWeight': 0, 'BlkioWeightDevice': None, 'BlkioDeviceReadBps': None, 'BlkioDeviceWriteBps': None, 'BlkioDeviceReadIOps': None, 'BlkioDeviceWriteIOps': None, 'CpuPeriod': 0, 'CpuQuota': 0, 'CpuRealtimePeriod': 0, 'CpuRealtimeRuntime': 0, 'CpusetCpus': '', 'CpusetMems': '', 'Devices': [], 'DeviceCgroupRules': None, 'DeviceRequests': None, 'MemoryReservation': 0, 'MemorySwap': 0, 'MemorySwappiness': 0, 'OomKillDisable': False, 'PidsLimit': 2048, 'Ulimits': [{'Name': 'RLIMIT_NOFILE', 'Hard': 524288, 'Soft': 524288}, {'Name': 'RLIMIT_NPROC', 'Hard': 250822, 'Soft': 250822}], 'CpuCount': 0, 'CpuPercent': 0, 'IOMaximumIOps': 0, 'IOMaximumBandwidth': 0, 'MaskedPaths': None, 'ReadonlyPaths': None} +INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None +INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None +INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None +INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None +DEBUG urllib3.connectionpool:connectionpool.py:241 Starting new HTTP connection (1): localhost:41335 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:41335 "GET /notebook/opendatahub/jovyan HTTP/1.1" 302 0 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:41335 "GET /notebook/opendatahub/jovyan/lab HTTP/1.1" 200 5694 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/stop?t=0 HTTP/1.1" 204 0 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "DELETE /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495?v=True&link=False&force=True HTTP/1.1" 204 0 +INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/images/quay.io/wsiqueir/workbench-images:jupyter-minimal-ubi9-python-3.11-texlive_install_with_script_export_on_dockerfile_20250506/json HTTP/1.1" 200 None +INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 +INFO testcontainers.core.container:container.py:98 Pulling image +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/create HTTP/1.1" 201 88 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/start HTTP/1.1" 204 0 +INFO testcontainers.core.container:container.py:125 Container started: 04d207776892 +INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] +DEBUG docker.utils.config:config.py:28 No config file found +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None +DEBUG root:workbench_image_test.py:194 {'Binds': [], 'ContainerIDFile': '', 'LogConfig': {'Type': 'journald', 'Config': None}, 'NetworkMode': 'bridge', 'PortBindings': {'8888/tcp': [{'HostIp': '0.0.0.0', 'HostPort': '36941'}]}, 'RestartPolicy': {'Name': 'no', 'MaximumRetryCount': 0}, 'AutoRemove': False, 'VolumeDriver': '', 'VolumesFrom': None, 'ConsoleSize': [0, 0], 'Annotations': {'io.container.manager': 'libpod', 'org.opencontainers.image.stopSignal': '15', 'org.systemd.property.KillSignal': '15', 'org.systemd.property.TimeoutStopUSec': 'uint64 10000000'}, 'CapAdd': [], 'CapDrop': [], 'CgroupnsMode': '', 'Dns': [], 'DnsOptions': [], 'DnsSearch': [], 'ExtraHosts': [], 'GroupAdd': ['0'], 'IpcMode': 'shareable', 'Cgroup': '', 'Links': None, 'OomScoreAdj': 200, 'PidMode': 'private', 'Privileged': False, 'PublishAllPorts': False, 'ReadonlyRootfs': False, 'SecurityOpt': [], 'Tmpfs': {'/opt/app-root/src': 'rw,rprivate,nosuid,nodev'}, 'UTSMode': 'private', 'UsernsMode': '', 'ShmSize': 65536000, 'Runtime': 'oci', 'Isolation': '', 'CpuShares': 0, 'Memory': 0, 'NanoCpus': 0, 'CgroupParent': 'user.slice', 'BlkioWeight': 0, 'BlkioWeightDevice': None, 'BlkioDeviceReadBps': None, 'BlkioDeviceWriteBps': None, 'BlkioDeviceReadIOps': None, 'BlkioDeviceWriteIOps': None, 'CpuPeriod': 0, 'CpuQuota': 0, 'CpuRealtimePeriod': 0, 'CpuRealtimeRuntime': 0, 'CpusetCpus': '', 'CpusetMems': '', 'Devices': [], 'DeviceCgroupRules': None, 'DeviceRequests': None, 'MemoryReservation': 0, 'MemorySwap': 0, 'MemorySwappiness': 0, 'OomKillDisable': False, 'PidsLimit': 2048, 'Ulimits': [{'Name': 'RLIMIT_NOFILE', 'Hard': 524288, 'Soft': 524288}, {'Name': 'RLIMIT_NPROC', 'Hard': 250822, 'Soft': 250822}], 'CpuCount': 0, 'CpuPercent': 0, 'IOMaximumIOps': 0, 'IOMaximumBandwidth': 0, 'MaskedPaths': None, 'ReadonlyPaths': None} +INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None +INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None +INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None +DEBUG root:docker_utils.py:65 Adding src='/tmp/tmpde3gteg_/test.ipybn' to archive dst='/opt/app-root/src' +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "PUT /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/archive?path=%2Fopt%2Fapp-root%2Fsrc HTTP/1.1" 200 0 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/exec HTTP/1.1" 201 74 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/exec/216227cd2581789e4accba63abd9d8668f4072e607b328e9ee083ef81cf35dac/start HTTP/1.1" 101 0 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/exec/216227cd2581789e4accba63abd9d8668f4072e607b328e9ee083ef81cf35dac/json HTTP/1.1" 200 413 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/stop?t=0 HTTP/1.1" 204 0 +DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "DELETE /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6?v=True&link=False&force=True HTTP/1.1" 204 0 diff --git a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py index 65b7ebe71..993398e39 100644 --- a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py +++ b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py @@ -4,7 +4,8 @@ import allure import requests - +import tempfile +import pathlib from tests.containers import docker_utils from tests.containers.workbenches.workbench_image_test import WorkbenchContainer @@ -60,11 +61,14 @@ def test_spinner_html_loaded(self, jupyterlab_image: docker.models.images.Image) @allure.description("Check that PDF export is working correctly") def test_pdf_export(self, jupyterlab_image: docker.models.images.Image) -> None: container = WorkbenchContainer(image=jupyterlab_image, user=4321, group_add=[0]) + test_file_name = "test.ipybn" try: - test_notebook = "test.ipynb" container.start(wait_for_readiness=True) - docker_utils.container_cp(container.get_wrapped_container(), test_notebook, self.APP_ROOT_HOME) - exit_code, convert_output = container.exec(["jupyter", "nbconvert", test_notebook, "--to", "pdf"]) + with tempfile.TemporaryDirectory() as tmpdir: + tmpdir = pathlib.Path(tmpdir) + (tmpdir / test_file_name).write_text("{\"cells\": []}") + docker_utils.container_cp(container.get_wrapped_container(), src=str(tmpdir / test_file_name), dst=self.APP_ROOT_HOME) + exit_code, convert_output = container.exec(["jupyter", "nbconvert", test_file_name, "--to", "pdf"]) assert "PDF successfully created" in convert_output.decode() assert 0 == exit_code finally: diff --git a/tests/containers/workbenches/jupyterlab/test.ipynb b/tests/containers/workbenches/jupyterlab/test.ipynb deleted file mode 100644 index b208f1e52..000000000 --- a/tests/containers/workbenches/jupyterlab/test.ipynb +++ /dev/null @@ -1,25 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "952c981e", - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, - "outputs": [], - "source": [ - "print('Hello World')" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From 2849a5e354bdde03ed53b89d093686120390a86c Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Tue, 6 May 2025 16:17:12 -0300 Subject: [PATCH 06/19] Removing and ignoring logs --- .gitignore | 3 ++ logs/pytest-logs.txt | 107 ------------------------------------------- 2 files changed, 3 insertions(+), 107 deletions(-) delete mode 100644 logs/pytest-logs.txt diff --git a/.gitignore b/.gitignore index 552631d2e..14f07bf56 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,9 @@ MANIFEST pip-log.txt pip-delete-this-directory.txt +# Test logs +logs/pytest-logs.txt + # Unit test / coverage reports htmlcov/ .tox/ diff --git a/logs/pytest-logs.txt b/logs/pytest-logs.txt deleted file mode 100644 index 5dae89314..000000000 --- a/logs/pytest-logs.txt +++ /dev/null @@ -1,107 +0,0 @@ -INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/_ping HTTP/1.1" 200 2 -INFO root:conftest.py:121 Env variable TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE not set, setting it now -INFO root:conftest.py:123 We are on Linux, setting socket_path='/run/user/16481/podman/podman.sock' for TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE -WARNING root:conftest.py:140 Ryuk is enabled. This may not work with rootless podman. -INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 -INFO testcontainers.core.container:container.py:98 Pulling image testcontainers/ryuk:0.8.1 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/create?name=testcontainers-ryuk-b0bcab84-dda0-4e93-ab06-3f49dbae1c19 HTTP/1.1" 201 88 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/json HTTP/1.1" 200 None -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/start HTTP/1.1" 204 0 -INFO testcontainers.core.container:container.py:125 Container started: fd38a9920ac8 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/logs?stderr=0&stdout=1×tamps=0&follow=0&tail=all HTTP/1.1" 200 None -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/json HTTP/1.1" 200 None -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/logs?stderr=1&stdout=0×tamps=0&follow=0&tail=all HTTP/1.1" 200 None -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/json HTTP/1.1" 200 None -INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image testcontainers/ryuk:0.8.1 to be ready ... -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/fd38a9920ac829b231a98304fec78bdadada17d3a0d468389952c3a6da9f705e/json HTTP/1.1" 200 None -INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/images/quay.io/wsiqueir/workbench-images:jupyter-minimal-ubi9-python-3.11-texlive_install_with_script_export_on_dockerfile_20250506/json HTTP/1.1" 200 None -INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 -INFO testcontainers.core.container:container.py:98 Pulling image -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/create HTTP/1.1" 201 88 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/start HTTP/1.1" 204 0 -INFO testcontainers.core.container:container.py:125 Container started: 45bcdc1a907c -INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None -DEBUG root:workbench_image_test.py:194 {'Binds': [], 'ContainerIDFile': '', 'LogConfig': {'Type': 'journald', 'Config': None}, 'NetworkMode': 'bridge', 'PortBindings': {'8888/tcp': [{'HostIp': '0.0.0.0', 'HostPort': '41335'}]}, 'RestartPolicy': {'Name': 'no', 'MaximumRetryCount': 0}, 'AutoRemove': False, 'VolumeDriver': '', 'VolumesFrom': None, 'ConsoleSize': [0, 0], 'Annotations': {'io.container.manager': 'libpod', 'org.opencontainers.image.stopSignal': '15', 'org.systemd.property.KillSignal': '15', 'org.systemd.property.TimeoutStopUSec': 'uint64 10000000'}, 'CapAdd': [], 'CapDrop': [], 'CgroupnsMode': '', 'Dns': [], 'DnsOptions': [], 'DnsSearch': [], 'ExtraHosts': [], 'GroupAdd': ['0'], 'IpcMode': 'shareable', 'Cgroup': '', 'Links': None, 'OomScoreAdj': 200, 'PidMode': 'private', 'Privileged': False, 'PublishAllPorts': False, 'ReadonlyRootfs': False, 'SecurityOpt': [], 'Tmpfs': {'/opt/app-root/src': 'rw,rprivate,nosuid,nodev'}, 'UTSMode': 'private', 'UsernsMode': '', 'ShmSize': 65536000, 'Runtime': 'oci', 'Isolation': '', 'CpuShares': 0, 'Memory': 0, 'NanoCpus': 0, 'CgroupParent': 'user.slice', 'BlkioWeight': 0, 'BlkioWeightDevice': None, 'BlkioDeviceReadBps': None, 'BlkioDeviceWriteBps': None, 'BlkioDeviceReadIOps': None, 'BlkioDeviceWriteIOps': None, 'CpuPeriod': 0, 'CpuQuota': 0, 'CpuRealtimePeriod': 0, 'CpuRealtimeRuntime': 0, 'CpusetCpus': '', 'CpusetMems': '', 'Devices': [], 'DeviceCgroupRules': None, 'DeviceRequests': None, 'MemoryReservation': 0, 'MemorySwap': 0, 'MemorySwappiness': 0, 'OomKillDisable': False, 'PidsLimit': 2048, 'Ulimits': [{'Name': 'RLIMIT_NOFILE', 'Hard': 524288, 'Soft': 524288}, {'Name': 'RLIMIT_NPROC', 'Hard': 250822, 'Soft': 250822}], 'CpuCount': 0, 'CpuPercent': 0, 'IOMaximumIOps': 0, 'IOMaximumBandwidth': 0, 'MaskedPaths': None, 'ReadonlyPaths': None} -INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None -INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None -INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None -INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/json HTTP/1.1" 200 None -DEBUG urllib3.connectionpool:connectionpool.py:241 Starting new HTTP connection (1): localhost:41335 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:41335 "GET /notebook/opendatahub/jovyan HTTP/1.1" 302 0 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:41335 "GET /notebook/opendatahub/jovyan/lab HTTP/1.1" 200 5694 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495/stop?t=0 HTTP/1.1" 204 0 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "DELETE /v1.41/containers/45bcdc1a907c0ec6038d542af1882cc8e50ffff6f4a8a71287ef20c305d0c495?v=True&link=False&force=True HTTP/1.1" 204 0 -INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/images/quay.io/wsiqueir/workbench-images:jupyter-minimal-ubi9-python-3.11-texlive_install_with_script_export_on_dockerfile_20250506/json HTTP/1.1" 200 None -INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 -INFO testcontainers.core.container:container.py:98 Pulling image -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/create HTTP/1.1" 201 88 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/start HTTP/1.1" 204 0 -INFO testcontainers.core.container:container.py:125 Container started: 04d207776892 -INFO testcontainers.core.docker_client:docker_client.py:66 using host unix:///run/user/16481/podman/podman.sock -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG docker.utils.config:config.py:21 Trying paths: ['/home/wsiqueir/.docker/config.json', '/home/wsiqueir/.dockercfg'] -DEBUG docker.utils.config:config.py:28 No config file found -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /version HTTP/1.1" 200 1025 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None -DEBUG root:workbench_image_test.py:194 {'Binds': [], 'ContainerIDFile': '', 'LogConfig': {'Type': 'journald', 'Config': None}, 'NetworkMode': 'bridge', 'PortBindings': {'8888/tcp': [{'HostIp': '0.0.0.0', 'HostPort': '36941'}]}, 'RestartPolicy': {'Name': 'no', 'MaximumRetryCount': 0}, 'AutoRemove': False, 'VolumeDriver': '', 'VolumesFrom': None, 'ConsoleSize': [0, 0], 'Annotations': {'io.container.manager': 'libpod', 'org.opencontainers.image.stopSignal': '15', 'org.systemd.property.KillSignal': '15', 'org.systemd.property.TimeoutStopUSec': 'uint64 10000000'}, 'CapAdd': [], 'CapDrop': [], 'CgroupnsMode': '', 'Dns': [], 'DnsOptions': [], 'DnsSearch': [], 'ExtraHosts': [], 'GroupAdd': ['0'], 'IpcMode': 'shareable', 'Cgroup': '', 'Links': None, 'OomScoreAdj': 200, 'PidMode': 'private', 'Privileged': False, 'PublishAllPorts': False, 'ReadonlyRootfs': False, 'SecurityOpt': [], 'Tmpfs': {'/opt/app-root/src': 'rw,rprivate,nosuid,nodev'}, 'UTSMode': 'private', 'UsernsMode': '', 'ShmSize': 65536000, 'Runtime': 'oci', 'Isolation': '', 'CpuShares': 0, 'Memory': 0, 'NanoCpus': 0, 'CgroupParent': 'user.slice', 'BlkioWeight': 0, 'BlkioWeightDevice': None, 'BlkioDeviceReadBps': None, 'BlkioDeviceWriteBps': None, 'BlkioDeviceReadIOps': None, 'BlkioDeviceWriteIOps': None, 'CpuPeriod': 0, 'CpuQuota': 0, 'CpuRealtimePeriod': 0, 'CpuRealtimeRuntime': 0, 'CpusetCpus': '', 'CpusetMems': '', 'Devices': [], 'DeviceCgroupRules': None, 'DeviceRequests': None, 'MemoryReservation': 0, 'MemorySwap': 0, 'MemorySwappiness': 0, 'OomKillDisable': False, 'PidsLimit': 2048, 'Ulimits': [{'Name': 'RLIMIT_NOFILE', 'Hard': 524288, 'Soft': 524288}, {'Name': 'RLIMIT_NPROC', 'Hard': 250822, 'Soft': 250822}], 'CpuCount': 0, 'CpuPercent': 0, 'IOMaximumIOps': 0, 'IOMaximumBandwidth': 0, 'MaskedPaths': None, 'ReadonlyPaths': None} -INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None -INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None -INFO testcontainers.core.waiting_utils:waiting_utils.py:52 Waiting for container with image to be ready ... -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/json HTTP/1.1" 200 None -DEBUG root:docker_utils.py:65 Adding src='/tmp/tmpde3gteg_/test.ipybn' to archive dst='/opt/app-root/src' -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "PUT /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/archive?path=%2Fopt%2Fapp-root%2Fsrc HTTP/1.1" 200 0 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/exec HTTP/1.1" 201 74 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/exec/216227cd2581789e4accba63abd9d8668f4072e607b328e9ee083ef81cf35dac/start HTTP/1.1" 101 0 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "GET /v1.41/exec/216227cd2581789e4accba63abd9d8668f4072e607b328e9ee083ef81cf35dac/json HTTP/1.1" 200 413 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "POST /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6/stop?t=0 HTTP/1.1" 204 0 -DEBUG urllib3.connectionpool:connectionpool.py:544 http://localhost:None "DELETE /v1.41/containers/04d207776892f77a9bae15874e08737d5c79beb66f86ecfc2580f45563a0a3e6?v=True&link=False&force=True HTTP/1.1" 204 0 From 76de561eb22f2fc174c0af35579034cdfacdcf1e Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Tue, 6 May 2025 16:23:49 -0300 Subject: [PATCH 07/19] Adding tex live to missing Dockerfiles --- jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu | 8 ++++++++ jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda | 8 ++++++++ jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm | 8 ++++++++ jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm | 8 ++++++++ jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda | 8 ++++++++ jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu | 8 ++++++++ 6 files changed, 48 insertions(+) diff --git a/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu b/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu index 0bce7bd49..11fe72e5b 100644 --- a/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu @@ -36,6 +36,14 @@ WORKDIR /opt/app-root/bin COPY ${JUPYTER_REUSABLE_UTILS} utils/ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ +USER 0 + +# TexLive dependency for PDF export +RUN ./utils/install_tex_live.sh +ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" + +USER 1001 + WORKDIR /opt/app-root/src ENTRYPOINT ["start-notebook.sh"] diff --git a/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda b/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda index 242e815fe..9316d62e0 100644 --- a/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda @@ -156,6 +156,14 @@ WORKDIR /opt/app-root/bin COPY ${JUPYTER_REUSABLE_UTILS} utils/ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ + +USER 0 + +# TexLive dependency for PDF export +RUN ./utils/install_tex_live.sh +ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" + +USER 1001 WORKDIR /opt/app-root/src diff --git a/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm b/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm index 4d2c3dd61..1faa41b6e 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm @@ -70,6 +70,14 @@ WORKDIR /opt/app-root/bin COPY ${JUPYTER_REUSABLE_UTILS} utils/ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ + +USER 0 + +# TexLive dependency for PDF export +RUN ./utils/install_tex_live.sh +ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" + +USER 1001 WORKDIR /opt/app-root/src diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm b/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm index 1d0a50e7c..2ec4df8c4 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm @@ -69,6 +69,14 @@ WORKDIR /opt/app-root/bin COPY ${JUPYTER_REUSABLE_UTILS} utils/ +USER 0 + +# TexLive dependency for PDF export +RUN ./utils/install_tex_live.sh +ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" + +USER 1001 + COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ WORKDIR /opt/app-root/src diff --git a/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda b/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda index 3794d00fc..609b530c6 100644 --- a/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda @@ -156,6 +156,14 @@ WORKDIR /opt/app-root/bin COPY ${JUPYTER_REUSABLE_UTILS} utils/ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ + +USER 0 + +# TexLive dependency for PDF export +RUN ./utils/install_tex_live.sh +ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" + +USER 1001 WORKDIR /opt/app-root/src diff --git a/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu b/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu index 37bd7662b..97fa36dc3 100644 --- a/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu @@ -36,6 +36,14 @@ WORKDIR /opt/app-root/bin COPY ${JUPYTER_REUSABLE_UTILS} utils/ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ +USER 0 + +# TexLive dependency for PDF export +RUN ./utils/install_tex_live.sh +ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" + +USER 1001 + WORKDIR /opt/app-root/src ENTRYPOINT ["start-notebook.sh"] From 2ec226b2ba72db99a7e5791401ea1d04e33abbcd Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Tue, 6 May 2025 16:35:39 -0300 Subject: [PATCH 08/19] Formatting --- .../workbenches/jupyterlab/jupyterlab_test.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py index 993398e39..3fe76e355 100644 --- a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py +++ b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py @@ -1,11 +1,11 @@ from __future__ import annotations +import pathlib +import tempfile from typing import TYPE_CHECKING import allure import requests -import tempfile -import pathlib from tests.containers import docker_utils from tests.containers.workbenches.workbench_image_test import WorkbenchContainer @@ -66,10 +66,12 @@ def test_pdf_export(self, jupyterlab_image: docker.models.images.Image) -> None: container.start(wait_for_readiness=True) with tempfile.TemporaryDirectory() as tmpdir: tmpdir = pathlib.Path(tmpdir) - (tmpdir / test_file_name).write_text("{\"cells\": []}") - docker_utils.container_cp(container.get_wrapped_container(), src=str(tmpdir / test_file_name), dst=self.APP_ROOT_HOME) + (tmpdir / test_file_name).write_text('{"cells": []}') + docker_utils.container_cp( + container.get_wrapped_container(), src=str(tmpdir / test_file_name), dst=self.APP_ROOT_HOME + ) exit_code, convert_output = container.exec(["jupyter", "nbconvert", test_file_name, "--to", "pdf"]) assert "PDF successfully created" in convert_output.decode() assert 0 == exit_code finally: - docker_utils.NotebookContainer(container).stop(timeout=0) \ No newline at end of file + docker_utils.NotebookContainer(container).stop(timeout=0) From 4bd800b07f8d45c101689f7cb9f035d62c61f371 Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Wed, 7 May 2025 11:58:19 -0300 Subject: [PATCH 09/19] Review changes --- jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu | 3 --- jupyter/utils/install_tex_live.sh | 13 +++++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu index a7ce21908..742b9977f 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu @@ -24,7 +24,6 @@ RUN curl -L https://mirror.openshift.com/pub/openshift-v4/$(uname -m)/clients/oc rm -f /tmp/openshift-client-linux.tar.gz - #################### # jupyter-minimal # #################### @@ -51,10 +50,8 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_tex_live.sh - ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" - USER 1001 COPY ${MINIMAL_SOURCE_CODE}/Pipfile.lock ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ diff --git a/jupyter/utils/install_tex_live.sh b/jupyter/utils/install_tex_live.sh index f3c95df2a..6888223a4 100755 --- a/jupyter/utils/install_tex_live.sh +++ b/jupyter/utils/install_tex_live.sh @@ -1,7 +1,8 @@ -echo "Installing TexLive to allow PDf export from Notebooks" && \ -curl -L https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz -o install-tl-unx.tar.gz && \ -zcat < install-tl-unx.tar.gz | tar xf - && \ -cd install-tl-2* && \ -perl ./install-tl --no-interaction --scheme=scheme-small && \ -cd /usr/local/texlive/2025/bin/x86_64-linux && \ +#!/bin/bash +echo "Installing TexLive to allow PDf export from Notebooks" +curl -L https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz -o install-tl-unx.tar.gz +zcat < install-tl-unx.tar.gz | tar xf - +cd install-tl-2* +perl ./install-tl --no-interaction --scheme=scheme-small +cd /usr/local/texlive/2025/bin/x86_64-linux ./tlmgr install tcolorbox pdfcol adjustbox titling enumitem soul ucs collection-fontsrecommended \ No newline at end of file From 8817fec336bec21f26081ec1a33bf9c65680de69 Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Tue, 13 May 2025 10:08:09 -0300 Subject: [PATCH 10/19] Removing unwanted line --- jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu | 1 - 1 file changed, 1 deletion(-) diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu index 742b9977f..fd0875346 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu @@ -23,7 +23,6 @@ RUN curl -L https://mirror.openshift.com/pub/openshift-v4/$(uname -m)/clients/oc tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ rm -f /tmp/openshift-client-linux.tar.gz - #################### # jupyter-minimal # #################### From 50a0ed220ab05fff530fb42d3662424ebb7384ee Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Tue, 13 May 2025 10:09:48 -0300 Subject: [PATCH 11/19] Fixing type --- tests/containers/workbenches/jupyterlab/jupyterlab_test.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py index d0a33d01f..dc53a2290 100644 --- a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py +++ b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py @@ -2,7 +2,6 @@ import pathlib import tempfile -from typing import TYPE_CHECKING import allure import requests @@ -56,7 +55,7 @@ def test_spinner_html_loaded(self, jupyterlab_image: conftest.Image) -> None: @allure.issue("RHOAIENG-16568") @allure.description("Check that PDF export is working correctly") - def test_pdf_export(self, jupyterlab_image: docker.models.images.Image) -> None: + def test_pdf_export(self, jupyterlab_image: conftest.Image) -> None: container = WorkbenchContainer(image=jupyterlab_image, user=4321, group_add=[0]) test_file_name = "test.ipybn" try: From 14a379ba83997df7ea663ce0d6bd3c3e0de297f7 Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Tue, 13 May 2025 11:13:23 -0300 Subject: [PATCH 12/19] Copying configuration in all images --- jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu | 4 +++- jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda | 2 ++ jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm | 2 ++ jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda | 4 +++- jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm | 2 ++ jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm | 2 ++ jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda | 4 +++- jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu | 4 +++- 8 files changed, 20 insertions(+), 4 deletions(-) diff --git a/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu b/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu index 11fe72e5b..c4e7ac546 100644 --- a/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu @@ -103,7 +103,9 @@ RUN echo "Installing softwares and packages" && \ # Remove default Elyra runtime-images \ rm /opt/app-root/share/jupyter/metadata/runtime-images/*.json && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ - sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + # copy jupyter configuration + cp /opt/app-root/bin/utils/jupyter_server_config.py /opt/app-root/etc/jupyter && \ # Disable announcement plugin of jupyterlab \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Apply JupyterLab addons \ diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda index d940ccb98..30bddbbb1 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda @@ -183,6 +183,8 @@ RUN echo "Installing softwares and packages" && \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + # copy jupyter configuration + cp /opt/app-root/bin/utils/jupyter_server_config.py /opt/app-root/etc/jupyter && \ # Fix permissions to support pip in Openshift environments \ chmod -R g+w /opt/app-root/lib/python3.11/site-packages && \ fix-permissions /opt/app-root -P && \ diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm index 2731ed345..ec3289f08 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm @@ -97,6 +97,8 @@ RUN echo "Installing softwares and packages" && \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + # copy jupyter configuration + cp /opt/app-root/bin/utils/jupyter_server_config.py /opt/app-root/etc/jupyter && \ # Fix permissions to support pip in Openshift environments \ chmod -R g+w /opt/app-root/lib/python3.11/site-packages && \ fix-permissions /opt/app-root -P && \ diff --git a/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda b/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda index 9316d62e0..d53fbdc07 100644 --- a/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda @@ -235,7 +235,9 @@ RUN echo "Installing softwares and packages" && \ # Remove default Elyra runtime-images \ rm /opt/app-root/share/jupyter/metadata/runtime-images/*.json && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ - sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + # copy jupyter configuration + cp /opt/app-root/bin/utils/jupyter_server_config.py /opt/app-root/etc/jupyter && \ # Disable announcement plugin of jupyterlab \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Apply JupyterLab addons \ diff --git a/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm b/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm index 1faa41b6e..5d09b1f7d 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm @@ -150,6 +150,8 @@ RUN echo "Installing softwares and packages" && \ rm /opt/app-root/share/jupyter/metadata/runtime-images/*.json && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + # copy jupyter configuration + cp /opt/app-root/bin/utils/jupyter_server_config.py /opt/app-root/etc/jupyter && \ # Disable announcement plugin of jupyterlab \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Apply JupyterLab addons \ diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm b/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm index 2ec4df8c4..99a05368f 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm @@ -150,6 +150,8 @@ RUN echo "Installing softwares and packages" && \ rm /opt/app-root/share/jupyter/metadata/runtime-images/*.json && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + # copy jupyter configuration + cp /opt/app-root/bin/utils/jupyter_server_config.py /opt/app-root/etc/jupyter && \ # Disable announcement plugin of jupyterlab \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Apply JupyterLab addons \ diff --git a/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda b/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda index 609b530c6..f455d7760 100644 --- a/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda @@ -235,7 +235,9 @@ RUN echo "Installing softwares and packages" && \ # Remove default Elyra runtime-images \ rm /opt/app-root/share/jupyter/metadata/runtime-images/*.json && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ - sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + # copy jupyter configuration + cp /opt/app-root/bin/utils/jupyter_server_config.py /opt/app-root/etc/jupyter && \ # Disable announcement plugin of jupyterlab \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Apply JupyterLab addons \ diff --git a/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu b/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu index 97fa36dc3..04d6cbeeb 100644 --- a/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu @@ -122,7 +122,9 @@ RUN echo "Installing softwares and packages" && \ # Remove default Elyra runtime-images \ rm /opt/app-root/share/jupyter/metadata/runtime-images/*.json && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ - sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \ + # copy jupyter configuration + cp /opt/app-root/bin/utils/jupyter_server_config.py /opt/app-root/etc/jupyter && \ # Disable announcement plugin of jupyterlab \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Apply JupyterLab addons \ From 294de99db0aae17ad460d2e9984795d116efc80f Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Thu, 15 May 2025 14:57:13 -0300 Subject: [PATCH 13/19] Removing year from the TeXLive installation --- jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu | 2 +- jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu | 2 +- jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda | 2 +- jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm | 2 +- jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda | 2 +- jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm | 2 +- jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm | 2 +- jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda | 2 +- jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu | 2 +- jupyter/utils/install_tex_live.sh | 4 ++-- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu b/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu index c4e7ac546..4aeef3c47 100644 --- a/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu @@ -40,7 +40,7 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" +ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu index fd0875346..85bd7e50b 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu @@ -49,7 +49,7 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" +ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda index 30bddbbb1..6b467a214 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda @@ -169,7 +169,7 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" +ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm index ec3289f08..0fb6e6c16 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm @@ -83,7 +83,7 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" +ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda b/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda index d53fbdc07..3ab63ffee 100644 --- a/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda @@ -161,7 +161,7 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" +ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm b/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm index 5d09b1f7d..70175a71b 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm @@ -75,7 +75,7 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" +ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm b/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm index 99a05368f..e9a806bad 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm @@ -73,7 +73,7 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" +ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda b/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda index f455d7760..5cccfe0ec 100644 --- a/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda @@ -161,7 +161,7 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" +ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu b/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu index 04d6cbeeb..95531416d 100644 --- a/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu @@ -40,7 +40,7 @@ USER 0 # TexLive dependency for PDF export RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/2025/bin/x86_64-linux:$PATH" +ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" USER 1001 diff --git a/jupyter/utils/install_tex_live.sh b/jupyter/utils/install_tex_live.sh index 6888223a4..eb1730f59 100755 --- a/jupyter/utils/install_tex_live.sh +++ b/jupyter/utils/install_tex_live.sh @@ -3,6 +3,6 @@ echo "Installing TexLive to allow PDf export from Notebooks" curl -L https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz -o install-tl-unx.tar.gz zcat < install-tl-unx.tar.gz | tar xf - cd install-tl-2* -perl ./install-tl --no-interaction --scheme=scheme-small -cd /usr/local/texlive/2025/bin/x86_64-linux +perl ./install-tl --no-interaction --scheme=scheme-small --texdir=/usr/local/texlive +cd /usr/local/texlive/bin/x86_64-linux ./tlmgr install tcolorbox pdfcol adjustbox titling enumitem soul ucs collection-fontsrecommended \ No newline at end of file From f3b6ddfa6c09d353033738352fa0517018fe162a Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Wed, 28 May 2025 14:49:19 -0300 Subject: [PATCH 14/19] Adding pandoc for a complete PDF export support --- jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu | 4 ++-- jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu | 4 ++-- jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda | 4 ++-- jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm | 4 ++-- jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda | 4 ++-- .../rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm | 4 ++-- .../rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm | 4 ++-- jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda | 4 ++-- jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu | 4 ++-- .../{install_tex_live.sh => install_pdf_deps.sh} | 12 +++++++++++- 10 files changed, 29 insertions(+), 19 deletions(-) rename jupyter/utils/{install_tex_live.sh => install_pdf_deps.sh} (52%) diff --git a/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu b/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu index 9ce6bc54b..ddbe97e0d 100644 --- a/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu @@ -52,8 +52,8 @@ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" +RUN ./utils/install_pdf_deps.sh +ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" USER 1001 diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu index 85bd7e50b..a544827c0 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu @@ -48,8 +48,8 @@ COPY ${JUPYTER_REUSABLE_UTILS} utils/ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" +RUN ./utils/install_pdf_deps.sh +ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" USER 1001 diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda index 6b467a214..cd5b8e15b 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda @@ -168,8 +168,8 @@ COPY ${JUPYTER_REUSABLE_UTILS} utils/ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" +RUN ./utils/install_pdf_deps.sh +ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" USER 1001 diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm index 0fb6e6c16..9a7fc25fc 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm @@ -82,8 +82,8 @@ COPY ${JUPYTER_REUSABLE_UTILS} utils/ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" +RUN ./utils/install_pdf_deps.sh +ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" USER 1001 diff --git a/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda b/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda index b0799b31e..1ae00abad 100644 --- a/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda @@ -173,8 +173,8 @@ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" +RUN ./utils/install_pdf_deps.sh +ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" USER 1001 diff --git a/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm b/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm index 9d0cd83d9..b89c8d562 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm @@ -87,8 +87,8 @@ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" +RUN ./utils/install_pdf_deps.sh +ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" USER 1001 diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm b/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm index d6807fb92..6713028aa 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm @@ -85,8 +85,8 @@ COPY ${JUPYTER_REUSABLE_UTILS} utils/ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" +RUN ./utils/install_pdf_deps.sh +ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" USER 1001 diff --git a/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda b/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda index 3a80a39d7..68d07d5ed 100644 --- a/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda @@ -173,8 +173,8 @@ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" +RUN ./utils/install_pdf_deps.sh +ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" USER 1001 diff --git a/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu b/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu index 21a4c9548..e6618d1f3 100644 --- a/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu @@ -52,8 +52,8 @@ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ USER 0 # TexLive dependency for PDF export -RUN ./utils/install_tex_live.sh -ENV PATH="/usr/local/texlive/bin/x86_64-linux:$PATH" +RUN ./utils/install_pdf_deps.sh +ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" USER 1001 diff --git a/jupyter/utils/install_tex_live.sh b/jupyter/utils/install_pdf_deps.sh similarity index 52% rename from jupyter/utils/install_tex_live.sh rename to jupyter/utils/install_pdf_deps.sh index eb1730f59..498547c0e 100755 --- a/jupyter/utils/install_tex_live.sh +++ b/jupyter/utils/install_pdf_deps.sh @@ -1,8 +1,18 @@ #!/bin/bash + +# Install dependencies required for Notebooks PDF exports + +# tex live installation echo "Installing TexLive to allow PDf export from Notebooks" curl -L https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz -o install-tl-unx.tar.gz zcat < install-tl-unx.tar.gz | tar xf - cd install-tl-2* perl ./install-tl --no-interaction --scheme=scheme-small --texdir=/usr/local/texlive cd /usr/local/texlive/bin/x86_64-linux -./tlmgr install tcolorbox pdfcol adjustbox titling enumitem soul ucs collection-fontsrecommended \ No newline at end of file +./tlmgr install tcolorbox pdfcol adjustbox titling enumitem soul ucs collection-fontsrecommended + +# pandoc installation +curl -L https://github.com/jgm/pandoc/releases/download/3.6.4/pandoc-3.6.4-linux-amd64.tar.gz -o /tmp/pandoc.tar.gz +mkdir -p /usr/local/pandoc +tar xvzf /tmp/pandoc.tar.gz --strip-components 1 -C /usr/local/pandoc/ +rm -f /tmp/pandoc.tar.gz \ No newline at end of file From 0e22badab946050a25571f9e6d2be087044d93ba Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Wed, 28 May 2025 14:51:56 -0300 Subject: [PATCH 15/19] Updating comment about TeX live installation --- jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu | 2 +- jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu | 2 +- jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda | 2 +- jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm | 2 +- jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda | 2 +- jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm | 2 +- jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm | 2 +- jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda | 2 +- jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu b/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu index ddbe97e0d..07542d824 100644 --- a/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/datascience/ubi9-python-3.11/Dockerfile.cpu @@ -51,7 +51,7 @@ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ USER 0 -# TexLive dependency for PDF export +# Dependencies for PDF export RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu index a544827c0..f148c0a09 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cpu @@ -47,7 +47,7 @@ COPY ${JUPYTER_REUSABLE_UTILS} utils/ USER 0 -# TexLive dependency for PDF export +# Dependencies for PDF export RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda index cd5b8e15b..9b11e7ba3 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.cuda @@ -167,7 +167,7 @@ COPY ${JUPYTER_REUSABLE_UTILS} utils/ USER 0 -# TexLive dependency for PDF export +# Dependencies for PDF export RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" diff --git a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm index 9a7fc25fc..ff7e7835a 100644 --- a/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/minimal/ubi9-python-3.11/Dockerfile.rocm @@ -81,7 +81,7 @@ COPY ${JUPYTER_REUSABLE_UTILS} utils/ USER 0 -# TexLive dependency for PDF export +# Dependencies for PDF export RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" diff --git a/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda b/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda index 1ae00abad..09d1a5d61 100644 --- a/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/pytorch/ubi9-python-3.11/Dockerfile.cuda @@ -172,7 +172,7 @@ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ USER 0 -# TexLive dependency for PDF export +# Dependencies for PDF export RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" diff --git a/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm b/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm index b89c8d562..722dd58f7 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/rocm/pytorch/ubi9-python-3.11/Dockerfile.rocm @@ -86,7 +86,7 @@ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ USER 0 -# TexLive dependency for PDF export +# Dependencies for PDF export RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm b/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm index 6713028aa..d489effc0 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm +++ b/jupyter/rocm/tensorflow/ubi9-python-3.11/Dockerfile.rocm @@ -84,7 +84,7 @@ COPY ${JUPYTER_REUSABLE_UTILS} utils/ USER 0 -# TexLive dependency for PDF export +# Dependencies for PDF export RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" diff --git a/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda b/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda index 68d07d5ed..82389635d 100644 --- a/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda +++ b/jupyter/tensorflow/ubi9-python-3.11/Dockerfile.cuda @@ -172,7 +172,7 @@ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ USER 0 -# TexLive dependency for PDF export +# Dependencies for PDF export RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" diff --git a/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu b/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu index e6618d1f3..5b99b9900 100644 --- a/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu +++ b/jupyter/trustyai/ubi9-python-3.11/Dockerfile.cpu @@ -51,7 +51,7 @@ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ USER 0 -# TexLive dependency for PDF export +# Dependencies for PDF export RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/x86_64-linux:/usr/local/pandoc/bin:$PATH" From d19a00b381577128a5d48270ad9566cf505b208f Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Fri, 30 May 2025 11:46:02 -0300 Subject: [PATCH 16/19] Improving PDF export test --- .../workbenches/jupyterlab/jupyterlab_test.py | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py index 06c43ecee..f369b5b90 100644 --- a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py +++ b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py @@ -2,7 +2,7 @@ import pathlib import tempfile - +import textwrap import allure import pytest import requests @@ -57,13 +57,39 @@ def test_spinner_html_loaded(self, jupyterlab_image: conftest.Image) -> None: @allure.issue("RHOAIENG-16568") @allure.description("Check that PDF export is working correctly") def test_pdf_export(self, jupyterlab_image: conftest.Image) -> None: - container = WorkbenchContainer(image=jupyterlab_image, user=4321, group_add=[0]) + container = WorkbenchContainer(image=jupyterlab_image.name, user=4321, group_add=[0]) test_file_name = "test.ipybn" + test_file_content = """{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "# Hello World" ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ "Hello World\n" ] + } + ], + "source": [ "print('Hello World')" ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 + } + """.replace('\n', '') try: container.start(wait_for_readiness=True) with tempfile.TemporaryDirectory() as tmpdir: tmpdir = pathlib.Path(tmpdir) - (tmpdir / test_file_name).write_text('{"cells": []}') + (tmpdir / test_file_name).write_text(test_file_content) docker_utils.container_cp( container.get_wrapped_container(), src=str(tmpdir / test_file_name), dst=self.APP_ROOT_HOME ) From 2c9a199841faf2c01aab9589c10c1f56f51401e5 Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Mon, 2 Jun 2025 16:17:29 -0300 Subject: [PATCH 17/19] pandoc latest version and ignoring message --- jupyter/utils/install_pdf_deps.sh | 2 +- scripts/check-payload/config.toml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/jupyter/utils/install_pdf_deps.sh b/jupyter/utils/install_pdf_deps.sh index 498547c0e..40c290755 100755 --- a/jupyter/utils/install_pdf_deps.sh +++ b/jupyter/utils/install_pdf_deps.sh @@ -12,7 +12,7 @@ cd /usr/local/texlive/bin/x86_64-linux ./tlmgr install tcolorbox pdfcol adjustbox titling enumitem soul ucs collection-fontsrecommended # pandoc installation -curl -L https://github.com/jgm/pandoc/releases/download/3.6.4/pandoc-3.6.4-linux-amd64.tar.gz -o /tmp/pandoc.tar.gz +curl -L https://github.com/jgm/pandoc/releases/download/3.7.0.2/pandoc-3.7.0.2-linux-amd64.tar.gz -o /tmp/pandoc.tar.gz mkdir -p /usr/local/pandoc tar xvzf /tmp/pandoc.tar.gz --strip-components 1 -C /usr/local/pandoc/ rm -f /tmp/pandoc.tar.gz \ No newline at end of file diff --git a/scripts/check-payload/config.toml b/scripts/check-payload/config.toml index ddb46eb22..4d417c0d9 100644 --- a/scripts/check-payload/config.toml +++ b/scripts/check-payload/config.toml @@ -173,6 +173,13 @@ dirs = ["/assets/downloads/cli"] # Temporary supprsssions for workbenches # https://github.com/openshift/check-payload/blob/main/internal/types/errors.go +[[rpm.pandoc.ignore]] +error = "ErrNotDynLinked" +files = [ + # executable is not dynamically linked + "/usr/local/pandoc/bin/pandoc", +] + [[rpm.rstudio-server.ignore]] error = "ErrNotDynLinked" files = [ From 8521ff30950e122cb45ddcaa3386696e7a3ce178 Mon Sep 17 00:00:00 2001 From: William Siqueira Date: Mon, 2 Jun 2025 16:20:22 -0300 Subject: [PATCH 18/19] formatting fix --- tests/containers/workbenches/jupyterlab/jupyterlab_test.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py index f369b5b90..dda7b5b45 100644 --- a/tests/containers/workbenches/jupyterlab/jupyterlab_test.py +++ b/tests/containers/workbenches/jupyterlab/jupyterlab_test.py @@ -2,7 +2,7 @@ import pathlib import tempfile -import textwrap + import allure import pytest import requests @@ -84,7 +84,7 @@ def test_pdf_export(self, jupyterlab_image: conftest.Image) -> None: "nbformat": 4, "nbformat_minor": 5 } - """.replace('\n', '') + """.replace("\n", "") try: container.start(wait_for_readiness=True) with tempfile.TemporaryDirectory() as tmpdir: @@ -113,4 +113,4 @@ def test_mongocli_binary_runs(self, jupyterlab_image: conftest.Image) -> None: # we did not manage to get `mongocli --version` to work, so we'll run this instead docker_utils.container_exec(container.get_wrapped_container(), "mongocli config --help") finally: - docker_utils.NotebookContainer(container).stop(timeout=0) # if no env is specified, the image will run \ No newline at end of file + docker_utils.NotebookContainer(container).stop(timeout=0) # if no env is specified, the image will run From 6ab959bf104769856fc77a5aaaa28804e21118f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Mon, 2 Jun 2025 23:57:47 +0200 Subject: [PATCH 19/19] add "/usr/local/pandoc/bin/pandoc" to config.toml --- scripts/check-payload/config.toml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/scripts/check-payload/config.toml b/scripts/check-payload/config.toml index 4d417c0d9..0a07e12c4 100644 --- a/scripts/check-payload/config.toml +++ b/scripts/check-payload/config.toml @@ -173,13 +173,6 @@ dirs = ["/assets/downloads/cli"] # Temporary supprsssions for workbenches # https://github.com/openshift/check-payload/blob/main/internal/types/errors.go -[[rpm.pandoc.ignore]] -error = "ErrNotDynLinked" -files = [ - # executable is not dynamically linked - "/usr/local/pandoc/bin/pandoc", -] - [[rpm.rstudio-server.ignore]] error = "ErrNotDynLinked" files = [ @@ -257,6 +250,7 @@ error = "ErrNotDynLinked" files = [ # executable is not dynamically linked "/opt/app-root/bin/py-spy", + "/usr/local/pandoc/bin/pandoc", ] [[rpm.code-server.ignore]]