From 1899c394a9824e668fe23fd23ca245ba641881cf Mon Sep 17 00:00:00 2001 From: atheo89 Date: Mon, 20 Oct 2025 14:12:49 +0200 Subject: [PATCH 01/43] Lock rocm and cuda minimal packages from internal aipcc index and set it available on runtime --- Makefile | 24 + .../ubi9-python-3.12/Dockerfile.konflux.cuda | 7 +- .../ubi9-python-3.12/Dockerfile.konflux.rocm | 7 +- .../minimal/ubi9-python-3.12/cuda-pip.conf | 8 + .../minimal/ubi9-python-3.12/rocm-pip.conf | 8 + .../ubi9-python-3.12/uv.lock/pylock.cuda.toml | 604 ++++++++++++++++++ .../ubi9-python-3.12/uv.lock/pylock.rocm.toml | 562 ++++++++++++++++ 7 files changed, 1216 insertions(+), 4 deletions(-) create mode 100644 jupyter/minimal/ubi9-python-3.12/cuda-pip.conf create mode 100644 jupyter/minimal/ubi9-python-3.12/rocm-pip.conf create mode 100644 jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml create mode 100644 jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml diff --git a/Makefile b/Makefile index 44f59b4f93..b729bd33ad 100644 --- a/Makefile +++ b/Makefile @@ -517,3 +517,27 @@ test: @echo "Running quick static tests" uv run pytest -m 'not buildonlytest' @./scripts/check_dockerfile_alignment.sh + + +#This is temporary lock on the final implementation that will covers all the folders should apply smart logic for the locks +CPU_INDEX=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.0/cpu-ubi9/simple/ +CUDA_INDEX=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.0/cuda-ubi9/simple/ +ROCM_INDEX=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.0/rocm-ubi9/simple/ + +lock-cuda: + uv pip compile \ + --python-platform=linux \ + jupyter/minimal/ubi9-python-3.12/pyproject.toml \ + --index-url=$(CUDA_INDEX) \ + --output-file=jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml \ + --python-version=3.12 + + +lock-rocm: + uv pip compile \ + --python-platform=linux \ + jupyter/minimal/ubi9-python-3.12/pyproject.toml \ + --index-url=$(ROCM_INDEX) \ + --output-file=jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml \ + --python-version=3.12 + diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda index 3c741d9715..5449430961 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda @@ -79,13 +79,16 @@ ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" USER 1001 -COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ +COPY ${MINIMAL_SOURCE_CODE}/uv.lock/pylock.cuda.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ + +# Makes available the internal python package index from aipcc on the container runtime +COPY ${MINIMAL_SOURCE_CODE}/cuda-pip.conf /etc/pip.conf # Install Python dependencies from requirements.txt file RUN echo "Installing softwares and packages" && \ # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ + uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.cuda.toml && \ # Disable announcement plugin of jupyterlab \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm index 0dfa9b3db8..36716c1a7e 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm @@ -67,13 +67,16 @@ ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" USER 1001 -COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ +COPY ${MINIMAL_SOURCE_CODE}/uv.lock/pylock.rocm.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ + +# Makes available the internal python package index from aipcc on the container runtime +COPY ${MINIMAL_SOURCE_CODE}/rocm-pip.conf /etc/pip.conf # Install Python dependencies from Pipfile.lock file RUN echo "Installing softwares and packages" && \ # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ + uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.rocm.toml && \ # Disable announcement plugin of jupyterlab \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ diff --git a/jupyter/minimal/ubi9-python-3.12/cuda-pip.conf b/jupyter/minimal/ubi9-python-3.12/cuda-pip.conf new file mode 100644 index 0000000000..3ba153d5b6 --- /dev/null +++ b/jupyter/minimal/ubi9-python-3.12/cuda-pip.conf @@ -0,0 +1,8 @@ +[global] +index-url = https://console.redhat.com/api/pypi/public-rhai/rhoai/3.0/cuda-ubi9/simple/ + +# Optional fallback (if you *do* want PyPI as backup) +extra-index-url = https://pypi.org/simple/ + +[install] +trusted-host = console.redhat.com diff --git a/jupyter/minimal/ubi9-python-3.12/rocm-pip.conf b/jupyter/minimal/ubi9-python-3.12/rocm-pip.conf new file mode 100644 index 0000000000..3ba153d5b6 --- /dev/null +++ b/jupyter/minimal/ubi9-python-3.12/rocm-pip.conf @@ -0,0 +1,8 @@ +[global] +index-url = https://console.redhat.com/api/pypi/public-rhai/rhoai/3.0/cuda-ubi9/simple/ + +# Optional fallback (if you *do* want PyPI as backup) +extra-index-url = https://pypi.org/simple/ + +[install] +trusted-host = console.redhat.com diff --git a/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml b/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml new file mode 100644 index 0000000000..6fad6083b4 --- /dev/null +++ b/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml @@ -0,0 +1,604 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile --python-platform=linux jupyter/minimal/ubi9-python-3.12/pyproject.toml --output-file=jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml --python-version=3.12 +lock-version = "1.0" +created-by = "uv" +requires-python = ">=3.12" + +[[packages]] +name = "aiohappyeyeballs" +version = "2.6.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/aiohappyeyeballs-2.6.1-8-py3-none-any.whl", hashes = { sha256 = "a8d5b4252b213865e06ca787f505f8955959aceae8230864e99002d5f9c97253" } }] + +[[packages]] +name = "aiohttp" +version = "3.13.1" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/aiohttp-3.13.1-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "e69aaef4103e1db0a89297b0325d056fd1bed2c740891eea6af22df29d5dde9e" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/aiohttp-3.13.1-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "c58b83d2efe698efbf1593952deed99b4e6b39e0f49d6b3020772dbd7166de8f" } }, +] + +[[packages]] +name = "aiosignal" +version = "1.4.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/aiosignal-1.4.0-8-py3-none-any.whl", hashes = { sha256 = "ed2c26cb3b0c8489d521688060a029e774a7508b4787d63e3e60287f61eeed60" } }] + +[[packages]] +name = "anyio" +version = "4.11.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/anyio-4.11.0-8-py3-none-any.whl", hashes = { sha256 = "35425ce0d2a2d623e30af7d0229dcc5f9a3e97f9df163dfa21c232afec14082a" } }] + +[[packages]] +name = "argon2-cffi" +version = "25.1.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/argon2_cffi-25.1.0-8-py3-none-any.whl", hashes = { sha256 = "08f7e838d6b46e3e150c706a1fd12628a640cc7a5493af14aae27b3a481fc625" } }] + +[[packages]] +name = "argon2-cffi-bindings" +version = "25.1.0" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/argon2_cffi_bindings-25.1.0-8-cp312-abi3-linux_aarch64.whl", hashes = { sha256 = "458af6cd03ac30f13e28437527029bb095bfa090dcd65c69b463ff46d15e1bcd" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/argon2_cffi_bindings-25.1.0-8-cp312-abi3-linux_x86_64.whl", hashes = { sha256 = "33392d72ff879cc98ccfa4b6519c98a85cba9c236785367d7fad66ef62331ab5" } }, +] + +[[packages]] +name = "arrow" +version = "1.3.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/arrow-1.3.0-8-py3-none-any.whl", hashes = { sha256 = "cb398119b6fe10efcffa70bbb7471d547c151398a05263ba0e1552a9990588be" } }] + +[[packages]] +name = "asttokens" +version = "3.0.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/asttokens-3.0.0-8-py3-none-any.whl", hashes = { sha256 = "71cd1f509505adf61cfb62e83f390d05760f2a1add76e9c7229f62ef65e28059" } }] + +[[packages]] +name = "async-lru" +version = "2.0.5" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/async_lru-2.0.5-8-py3-none-any.whl", hashes = { sha256 = "410e8e518985fb8ce849fe83e115f33f1d3db4d7a576fc2b7157c08fc04d35e9" } }] + +[[packages]] +name = "attrs" +version = "25.4.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/attrs-25.4.0-8-py3-none-any.whl", hashes = { sha256 = "5a1cc08bb88c20c7732b15f04b307ccca0c110eb35fb4a28013c72b3f68a703b" } }] + +[[packages]] +name = "babel" +version = "2.17.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/babel-2.17.0-8-py3-none-any.whl", hashes = { sha256 = "b9388e2d88d8ec3483e4f9644f365e2e70237b2d1233000cca08592d5fb444db" } }] + +[[packages]] +name = "beautifulsoup4" +version = "4.14.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/beautifulsoup4-4.14.2-8-py3-none-any.whl", hashes = { sha256 = "84b96cdfe59a81cddb0a77b2c697953e297309fa1038addd768bd35eded5a926" } }] + +[[packages]] +name = "bleach" +version = "6.2.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/bleach-6.2.0-8-py3-none-any.whl", hashes = { sha256 = "4d97914411cd135988468ab46718635406a345d6deb137ad0606f20a76602936" } }] + +[[packages]] +name = "certifi" +version = "2025.10.5" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/certifi-2025.10.5-8-py3-none-any.whl", hashes = { sha256 = "446369f557ba1ec0497be45bbd466075ae1858c98407cdd331607eb961e1ea7a" } }] + +[[packages]] +name = "cffi" +version = "2.0.0" +marker = "python_full_version < '3.14'" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/cffi-2.0.0-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "b1299cd730e9f0a4ef69f93c113f1b5956d470ec37199f8640511110c947157d" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/cffi-2.0.0-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "abccfc752856e08035310135e05e04b135db0b30447331b08a2e7211256f09e9" } }, +] + +[[packages]] +name = "charset-normalizer" +version = "3.4.4" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/charset_normalizer-3.4.4-8-py3-none-any.whl", hashes = { sha256 = "7ed70ac91a02e9070b375cf804522191fe78b7d5a276af53907ac5e8ec5ba8d8" } }] + +[[packages]] +name = "colorama" +version = "0.4.6" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/colorama-0.4.6-8-py2.py3-none-any.whl", hashes = { sha256 = "8db04440e6c85aef47246d23558a8aa81bb29b22fc2776528819919f2483250d" } }] + +[[packages]] +name = "comm" +version = "0.2.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/comm-0.2.3-8-py3-none-any.whl", hashes = { sha256 = "0b6fc004104320c03a1bf9f1261613fbc451ae8bb6a9d013721c0eb403d0c9eb" } }] + +[[packages]] +name = "debugpy" +version = "1.8.17" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/debugpy-1.8.17-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "adb89704005901e2f06af079ed820830f13a542e2569054c159984e27a85bd30" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/debugpy-1.8.17-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "17f88b9d8eeff81e3c4b382308dd269f8b0651ebc851534d29a33208c5a819c6" } }, +] + +[[packages]] +name = "decorator" +version = "5.2.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/decorator-5.2.1-8-py3-none-any.whl", hashes = { sha256 = "00948518ae0f9094c82f683d474ca702f4b1a4ef098d09b30a5c645de586287d" } }] + +[[packages]] +name = "defusedxml" +version = "0.7.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/defusedxml-0.7.1-8-py2.py3-none-any.whl", hashes = { sha256 = "3e34fec001869e971125507af855df9dab06bd5bd4d40a4b2955ef0b90c0821c" } }] + +[[packages]] +name = "executing" +version = "2.2.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/executing-2.2.1-8-py2.py3-none-any.whl", hashes = { sha256 = "f70f37dccebbc518bdd453620304ceb4dfc8bb0167e703b2413753416f85747b" } }] + +[[packages]] +name = "fastjsonschema" +version = "2.21.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/fastjsonschema-2.21.2-8-py3-none-any.whl", hashes = { sha256 = "404c045523a1f51a51c9c6b2c1292d3a81e7f7ed499cca49f057660850663e18" } }] + +[[packages]] +name = "fqdn" +version = "1.5.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/fqdn-1.5.1-8-py3-none-any.whl", hashes = { sha256 = "d27d850a7a03408f36678ab5b5313e776025048657c81fd0341ea5776de76650" } }] + +[[packages]] +name = "frozenlist" +version = "1.8.0" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/frozenlist-1.8.0-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "878599773633f430a14567c6a1369346c061bd85c193c93a5da16e6fcde25bde" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/frozenlist-1.8.0-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "9eb258ba0eb67e4c39e9c912aab6e82774c322d9b396f560bbfb733316ea39fe" } }, +] + +[[packages]] +name = "gitdb" +version = "4.0.12" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/gitdb-4.0.12-8-py3-none-any.whl", hashes = { sha256 = "a9bf940f82edad57d02f896d455f61a2317005e304866b34b70de4ef905a32cc" } }] + +[[packages]] +name = "gitpython" +version = "3.1.45" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/gitpython-3.1.45-8-py3-none-any.whl", hashes = { sha256 = "eb2513894e813f1cbe388c9c6b66e99d897f5ec5a4d5cb74b90f8b8122d4490d" } }] + +[[packages]] +name = "h11" +version = "0.16.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/h11-0.16.0-8-py3-none-any.whl", hashes = { sha256 = "fba81515258cd638cd279a37eb7e7cb5519ff1fec9e831f22388c1ac0a2d5b79" } }] + +[[packages]] +name = "httpcore" +version = "1.0.9" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/httpcore-1.0.9-8-py3-none-any.whl", hashes = { sha256 = "7681309a2e123b904763f96846b94d12a341166356cffd6b197049da51e4a22c" } }] + +[[packages]] +name = "httpx" +version = "0.28.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/httpx-0.28.1-8-py3-none-any.whl", hashes = { sha256 = "ef83138bcfcd94f1093487bfb2e18bb8616d496e752b6784441b2927baaea3cc" } }] + +[[packages]] +name = "idna" +version = "3.11" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/idna-3.11-8-py3-none-any.whl", hashes = { sha256 = "5a7e8ce4b9437bcf84ca0c0b1a6e35fdac09e8f6698bd5e776347facbc1e3599" } }] + +[[packages]] +name = "ipykernel" +version = "7.0.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/ipykernel-7.0.1-8-py3-none-any.whl", hashes = { sha256 = "c13292923b3599bb3f456891634aca6c89d5e0f9fb87ed38fecbd1df52e5e617" } }] + +[[packages]] +name = "ipython" +version = "9.6.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/ipython-9.6.0-8-py3-none-any.whl", hashes = { sha256 = "501b37f909d326a66e53dc07d6e915f856793adb30742f2a61ff718925b671b8" } }] + +[[packages]] +name = "ipython-pygments-lexers" +version = "1.1.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/ipython_pygments_lexers-1.1.1-8-py3-none-any.whl", hashes = { sha256 = "f493cc82ef1f75d3bdee48ce41478720aeb2acbf37e5c4188978ce2ab675ea7f" } }] + +[[packages]] +name = "isoduration" +version = "20.11.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/isoduration-20.11.0-8-py3-none-any.whl", hashes = { sha256 = "f4b1941d204b46a3a5ca0bf5afeed718171aa1ef8ca5980bcbd66dedc7728112" } }] + +[[packages]] +name = "jedi" +version = "0.19.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jedi-0.19.2-8-py2.py3-none-any.whl", hashes = { sha256 = "13d2c547bcff03daddb1e1c96668e6ef1ba006ec90ef89a923f10cd8d9a2cd56" } }] + +[[packages]] +name = "jinja2" +version = "3.1.6" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jinja2-3.1.6-8-py3-none-any.whl", hashes = { sha256 = "44862ece643b09a296408560eb88f4adc66bb0f5da5346633e91e39dc8a12857" } }] + +[[packages]] +name = "json5" +version = "0.12.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/json5-0.12.1-8-py3-none-any.whl", hashes = { sha256 = "5fc539aaa7abea4fd07e2b6055578bebf0eeee203911dfc5fd2b700bd20cfd0b" } }] + +[[packages]] +name = "jsonpointer" +version = "3.0.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jsonpointer-3.0.0-8-py2.py3-none-any.whl", hashes = { sha256 = "220b113ace952a67a872a3d2991f1b57bf687371d04356dc155038442041f747" } }] + +[[packages]] +name = "jsonschema" +version = "4.25.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jsonschema-4.25.1-8-py3-none-any.whl", hashes = { sha256 = "da86626c060580b27a67486e68d95a0bc4da43e965c84057fa5330ad5458b55c" } }] + +[[packages]] +name = "jsonschema-specifications" +version = "2025.9.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jsonschema_specifications-2025.9.1-8-py3-none-any.whl", hashes = { sha256 = "64268997c86da5a0ca49cdd20e5edd36b435655e2d1288e90e5b337b5f7805aa" } }] + +[[packages]] +name = "jupyter-client" +version = "8.6.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_client-8.6.3-8-py3-none-any.whl", hashes = { sha256 = "2fc9a4b9a9dffc34293a5e0570a85c891073ec02e345e29e90e5a968fa74ace8" } }] + +[[packages]] +name = "jupyter-core" +version = "5.9.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_core-5.9.1-8-py3-none-any.whl", hashes = { sha256 = "f9101879ff775c6e617bf80d64cbc9670605568b8b5cd89b24a5ae617dc4ef37" } }] + +[[packages]] +name = "jupyter-events" +version = "0.12.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_events-0.12.0-8-py3-none-any.whl", hashes = { sha256 = "8d1b2cc42f06d228c9cfdfec4a0b9a7c43d70aa0317174e90984a54e42df308d" } }] + +[[packages]] +name = "jupyter-lsp" +version = "2.3.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_lsp-2.3.0-8-py3-none-any.whl", hashes = { sha256 = "c943bef95d62f91f161466167f25bffe6e604789e4d2672e8288ce868e4e2ad9" } }] + +[[packages]] +name = "jupyter-server" +version = "2.17.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_server-2.17.0-8-py3-none-any.whl", hashes = { sha256 = "5f0b66e2c9abd62909b359ee9256f90d2ea0bd0454e02b65d6e48cd36f2b1023" } }] + +[[packages]] +name = "jupyter-server-mathjax" +version = "0.2.6" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_server_mathjax-0.2.6-py3-none-any.whl", hashes = { sha256 = "416389dde2010df46d5fbbb7adb087a5607111070af65a1445391040f2babb5e" } }] + +[[packages]] +name = "jupyter-server-proxy" +version = "4.4.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_server_proxy-4.4.0-8-py3-none-any.whl", hashes = { sha256 = "d369efe5beeacf5ba460a6a355c5dad9390f4d9d9750a6c9bcc46c1deed7a046" } }] + +[[packages]] +name = "jupyter-server-terminals" +version = "0.5.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_server_terminals-0.5.3-8-py3-none-any.whl", hashes = { sha256 = "d33381cb638a65ade4f5f5b1e8dbb8982194b81cd70fb3bf5b506d5448a5b33c" } }] + +[[packages]] +name = "jupyterlab" +version = "4.4.9" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyterlab-4.4.9-8-py3-none-any.whl", hashes = { sha256 = "72f8dc23cb847e48430527aba4cbcfe258a98aaa518cf0302ca5ec85295fc6ea" } }] + +[[packages]] +name = "jupyterlab-git" +version = "0.51.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyterlab_git-0.51.2-8-py3-none-any.whl", hashes = { sha256 = "d8a87a2075f4b4431b6e3095bc2e6880b2b0ec77c85a7c4d30207f74a1fd4c18" } }] + +[[packages]] +name = "jupyterlab-pygments" +version = "0.3.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyterlab_pygments-0.3.0-9-py3-none-any.whl", hashes = { sha256 = "3467784e2099b1e56615965f6b58e7b6ace6b3a1e716e4fe40852c755f13bdb6" } }] + +[[packages]] +name = "jupyterlab-server" +version = "2.27.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyterlab_server-2.27.3-8-py3-none-any.whl", hashes = { sha256 = "51ba03c6e8a29e110d2ef832cd87c177de30ad84244f48364b63fc6906e82c8a" } }] + +[[packages]] +name = "lark" +version = "1.3.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/lark-1.3.0-8-py3-none-any.whl", hashes = { sha256 = "c0e8e5fa92b9ac64faaa9d10924c99f76535cf688277dfd50057bfde2cd014fd" } }] + +[[packages]] +name = "markupsafe" +version = "3.0.3" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/markupsafe-3.0.3-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "818c75c5a7bfe710e1fab5a50689aa25f9b1b976de6a5176c9ba6d46477f0628" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/markupsafe-3.0.3-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "4d7a65e71ac7605edd4acaf1e4e55d62e15c695528be2517a0566563b0290214" } }, +] + +[[packages]] +name = "matplotlib-inline" +version = "0.1.7" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/matplotlib_inline-0.1.7-8-py3-none-any.whl", hashes = { sha256 = "f5ab739619bd3aa1d354ea682c74cd59695133db38f6d9f3f096e2adf6670243" } }] + +[[packages]] +name = "mistune" +version = "3.1.4" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/mistune-3.1.4-8-py3-none-any.whl", hashes = { sha256 = "b99af5c067e3a331d461d1bb9e727b3dd81379a71b31ee66656d4fc249aa2d63" } }] + +[[packages]] +name = "multidict" +version = "6.7.0" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/multidict-6.7.0-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "a2ecb8445dc402f5451417fbbd9355e7506a35adb1e1b2dd3ac5de599ec6e70a" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/multidict-6.7.0-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "8fdf1d51551745edda4007ce4bfd593b2b43bb7f50e1edb32bfad69471a535e1" } }, +] + +[[packages]] +name = "nbclient" +version = "0.10.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nbclient-0.10.2-8-py3-none-any.whl", hashes = { sha256 = "136290c1ca87f605c2b9b9f8282511ae46dad21f04ddc42e8569b82186a6a974" } }] + +[[packages]] +name = "nbconvert" +version = "7.16.6" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nbconvert-7.16.6-8-py3-none-any.whl", hashes = { sha256 = "cec53ae7939c1150db78e7670f038354b99aacdf8918c14632cb9c353618fe9c" } }] + +[[packages]] +name = "nbdime" +version = "4.0.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nbdime-4.0.2-8-py3-none-any.whl", hashes = { sha256 = "0d20d33c9283ee4a2a32bc3ca4f279a7fc9da1934bcc983a2dbf0463cc2a3107" } }] + +[[packages]] +name = "nbformat" +version = "5.10.4" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nbformat-5.10.4-8-py3-none-any.whl", hashes = { sha256 = "6a2cc8da344d842f06bd7aec40d87316f7a83a52d640b5a43e4514a4a29325a3" } }] + +[[packages]] +name = "nbgitpuller" +version = "1.2.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nbgitpuller-1.2.2-8-py2.py3-none-any.whl", hashes = { sha256 = "8ced33b5658258abba83eb264ec706f5127d81d80125f9e8dec380d9551ba354" } }] + +[[packages]] +name = "nest-asyncio" +version = "1.6.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nest_asyncio-1.6.0-8-py3-none-any.whl", hashes = { sha256 = "bf6bc796e039c57c80134acad2bd42f3e347e14f0810b3d6d838c066c550f859" } }] + +[[packages]] +name = "notebook-shim" +version = "0.2.4" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/notebook_shim-0.2.4-8-py3-none-any.whl", hashes = { sha256 = "ef82ab57c93cedc7f6229e21395719b8215cb5b662bceea02593c9a49198d7a4" } }] + +[[packages]] +name = "odh-jupyter-trash-cleanup" +version = "0.1.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/odh_jupyter_trash_cleanup-0.1.1-8-py3-none-any.whl", hashes = { sha256 = "0095fcc8172c78e9820b4b78c4cf3ab8832eb9dbe35bb698fbfc6d25e0d6e150" } }] + +[[packages]] +name = "packaging" +version = "25.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/packaging-25.0-8-py3-none-any.whl", hashes = { sha256 = "7d473c23d59e2ece8ba40e1995e6ab09786f16bb09e97fc4bbab783cf6c750ff" } }] + +[[packages]] +name = "pandocfilters" +version = "1.5.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pandocfilters-1.5.1-8-py2.py3-none-any.whl", hashes = { sha256 = "7c2e2aaa3f71230c3912328cfd3f57870db3d99446dc8be7e52cf747430e2e61" } }] + +[[packages]] +name = "parso" +version = "0.8.5" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/parso-0.8.5-8-py2.py3-none-any.whl", hashes = { sha256 = "51dd41d45bd53b3296e382cf515e1523fcd808ea1c1a2612f515986e77f0a4fd" } }] + +[[packages]] +name = "pexpect" +version = "4.9.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pexpect-4.9.0-8-py2.py3-none-any.whl", hashes = { sha256 = "cabcf8de55e57320396ff976aeb6053f71c9fcd9403edaf11b617a6d43c77454" } }] + +[[packages]] +name = "platformdirs" +version = "4.5.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/platformdirs-4.5.0-8-py3-none-any.whl", hashes = { sha256 = "f6fdf7d9301fd7fc3c15805deb4f8ca67c13c92d2d15d4415386784200b0b2f7" } }] + +[[packages]] +name = "prometheus-client" +version = "0.23.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/prometheus_client-0.23.1-8-py3-none-any.whl", hashes = { sha256 = "34c78d5f809cc8098a7a01996c5347be2dc3667f8c38c2bc8c7fafb3c340a61f" } }] + +[[packages]] +name = "prompt-toolkit" +version = "3.0.52" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/prompt_toolkit-3.0.52-8-py3-none-any.whl", hashes = { sha256 = "fdc2fd3ca26c3320114c38c6fbd0ea89c104aac9b47ce57bcce876d0956ccab1" } }] + +[[packages]] +name = "propcache" +version = "0.4.1" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/propcache-0.4.1-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "84fc66ac6596f7ba38f159f409c695d23a6fcaeba09d0425452e47b422743827" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/propcache-0.4.1-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "8399a22642cc045c7198f06324c5806c1a9afb1201f963173a36941f5f1d18c2" } }, +] + +[[packages]] +name = "psutil" +version = "7.1.0" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/psutil-7.1.0-9-cp36-abi3-linux_aarch64.whl", hashes = { sha256 = "f054a636be0a803a2cdc8380593fd3b4da4f7ae6e42358a7d6832bb51df60398" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/psutil-7.1.0-9-cp36-abi3-linux_x86_64.whl", hashes = { sha256 = "3a102a98e58461024392c169ba13527c94082b2b748df649db30edfe5e62ad5d" } }, +] + +[[packages]] +name = "ptyprocess" +version = "0.7.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/ptyprocess-0.7.0-8-py2.py3-none-any.whl", hashes = { sha256 = "e8a9826938b926f649b85398ebabae7b388329af7de297f23cdeea0044f37a3f" } }] + +[[packages]] +name = "pure-eval" +version = "0.2.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pure_eval-0.2.3-8-py3-none-any.whl", hashes = { sha256 = "50c3772b5e43de2b57c83ee7386f665684af256158665843dd52ac279cd9bf10" } }] + +[[packages]] +name = "pycparser" +version = "2.23" +marker = "python_full_version < '3.14' and implementation_name != 'PyPy'" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pycparser-2.23-8-py3-none-any.whl", hashes = { sha256 = "5d765f3e944d3e9ba1080558588f8e52861ffe39f01cb84c8bf9c4507c6f215b" } }] + +[[packages]] +name = "pygments" +version = "2.19.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pygments-2.19.2-8-py3-none-any.whl", hashes = { sha256 = "a412437581a9df0b86761b7e364435236594ff91aaef206a2027a4825773ca70" } }] + +[[packages]] +name = "python-dateutil" +version = "2.9.0.post0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/python_dateutil-2.9.0.post0-8-py2.py3-none-any.whl", hashes = { sha256 = "a9fe5057f8d9b853dcf5b845053f902d4e2f2ba08ecf3c9a83e887e767288895" } }] + +[[packages]] +name = "python-json-logger" +version = "4.0.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/python_json_logger-4.0.0-8-py3-none-any.whl", hashes = { sha256 = "73a96c5b5de1d5b7fb630f77b5d7a640fadf06fdefae90e348ca751ffb38532f" } }] + +[[packages]] +name = "pyyaml" +version = "6.0.3" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pyyaml-6.0.3-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "0f0c4fb803b84633b5f7464f064f4b4f09b80d468e04a243c2d09399aa2fd5f6" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pyyaml-6.0.3-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "72bd3b1a7f6bc575a139bcdf4482ed030ab8d4abc811dd21cf1d8ad5aa190df0" } }, +] + +[[packages]] +name = "pyzmq" +version = "27.1.0" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pyzmq-27.1.0-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "b850f32b6d8d49f1e33f1bd52154bd6da627996bfc31255f3b792d07009c9f9c" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pyzmq-27.1.0-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "3fda2271433f99c80726e19a364b347e314bc24bd4480980a4b3f3fd10850b9a" } }, +] + +[[packages]] +name = "referencing" +version = "0.37.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/referencing-0.37.0-8-py3-none-any.whl", hashes = { sha256 = "6b9f76d76dcca1c39233e0fab4060aeafbc6f5deff0721612d969e04eb123675" } }] + +[[packages]] +name = "requests" +version = "2.32.5" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/requests-2.32.5-8-py3-none-any.whl", hashes = { sha256 = "04dd827577c257f28f22e499f30f8889fb4dd2aa701a66b71771bb9697a85ca0" } }] + +[[packages]] +name = "rfc3339-validator" +version = "0.1.4" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/rfc3339_validator-0.1.4-8-py2.py3-none-any.whl", hashes = { sha256 = "642e557f43a43084aa3015b2bf917f8c9f18c7a1b1e2d2005458c7cd82d6db4f" } }] + +[[packages]] +name = "rfc3986-validator" +version = "0.1.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/rfc3986_validator-0.1.1-8-py2.py3-none-any.whl", hashes = { sha256 = "42bb0270115f59d967d5a8ab1739b4bb265dbe1973e0b9e8ab61151b5b9a14c6" } }] + +[[packages]] +name = "rfc3987-syntax" +version = "1.1.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/rfc3987_syntax-1.1.0-8-py3-none-any.whl", hashes = { sha256 = "a13d59945950bb59f7ee4c36ca8fa3b6ffa3e3b0e9bbcca414d9cd15370e11aa" } }] + +[[packages]] +name = "rpds-py" +version = "0.27.1" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/rpds_py-0.27.1-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "e92dba81df0c9e679a54e4b7d0b496ce3496f2147aa7355f46f57ff76e85a1b9" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/rpds_py-0.27.1-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "0422ae7bb25eedc859af6f723e7b67234d9bc6e2537d6206a93f143803f4ef29" } }, +] + +[[packages]] +name = "send2trash" +version = "1.8.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/send2trash-1.8.3-8-py3-none-any.whl", hashes = { sha256 = "68135a966f47c0a60b30cdfd350a5a789c676644f0ba69124a666f1889f401a6" } }] + +[[packages]] +name = "setuptools" +version = "80.9.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/setuptools-80.9.0-8-py3-none-any.whl", hashes = { sha256 = "c9d1294239d456d3f336548960cb2e08a991a3b8bd54cbac8bdb6fd69924b175" } }] + +[[packages]] +name = "simpervisor" +version = "1.0.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/simpervisor-1.0.0-8-py3-none-any.whl", hashes = { sha256 = "d94b38adcd2736b5f0b1d6ae540d2f56b1d877cf83c1255df1557769577af566" } }] + +[[packages]] +name = "six" +version = "1.17.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/six-1.17.0-8-py2.py3-none-any.whl", hashes = { sha256 = "3611f16cbb03bf7ce78eb1bb259f9ef1a0852f2fd62ab0e288a82a02289885aa" } }] + +[[packages]] +name = "smmap" +version = "5.0.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/smmap-5.0.2-8-py3-none-any.whl", hashes = { sha256 = "31f2ca9fb829c9ef74fb99e8471dba111fa21b270b0e3085f247f1ddfd6a23d1" } }] + +[[packages]] +name = "sniffio" +version = "1.3.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/sniffio-1.3.1-8-py3-none-any.whl", hashes = { sha256 = "861fe9d25e27d915a44b1e267e7802ff073e862671643853cc342be08e919912" } }] + +[[packages]] +name = "soupsieve" +version = "2.8" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/soupsieve-2.8-8-py3-none-any.whl", hashes = { sha256 = "c350383e0589f4d5bf597a0f31aabbd70f3ff97fdeb850e7e9390f418199d978" } }] + +[[packages]] +name = "stack-data" +version = "0.6.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/stack_data-0.6.3-8-py3-none-any.whl", hashes = { sha256 = "00201e73454dc411eac8c6ca7d5e90b875e2d996b2965ed14080ce755ef1598c" } }] + +[[packages]] +name = "terminado" +version = "0.18.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/terminado-0.18.1-8-py3-none-any.whl", hashes = { sha256 = "45978b8d0366a7a59d18da8a8d3f606d2131568252578a6252bbbaaadd27388f" } }] + +[[packages]] +name = "tinycss2" +version = "1.4.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/tinycss2-1.4.0-8-py3-none-any.whl", hashes = { sha256 = "39493ba9fdaa13259552e708b9c111bcf6dd2c97e148370648e64914cd75eb07" } }] + +[[packages]] +name = "tornado" +version = "6.5.2" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/tornado-6.5.2-8-cp39-abi3-linux_aarch64.whl", hashes = { sha256 = "c9087ff89e21f0389e5a372213a53e37d470809782ba93aa6e27e9bbc4dc6f18" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/tornado-6.5.2-8-cp39-abi3-linux_x86_64.whl", hashes = { sha256 = "9540b77721afaa55a56be9d244e480fc0b73d54b0babc7892ac4ee42e1822fde" } }, +] + +[[packages]] +name = "traitlets" +version = "5.14.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/traitlets-5.14.3-8-py3-none-any.whl", hashes = { sha256 = "c4f6eb0e5d1ed749419fcbe1f41c1dcde3c989751717c6a063b59102c41cc639" } }] + +[[packages]] +name = "types-python-dateutil" +version = "2.9.0.20251008" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/types_python_dateutil-2.9.0.20251008-8-py3-none-any.whl", hashes = { sha256 = "bf1ae5bb144efe02cbff82f87c4830b82e66febc927ff9a611654fe90a95410a" } }] + +[[packages]] +name = "typing-extensions" +version = "4.15.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/typing_extensions-4.15.0-8-py3-none-any.whl", hashes = { sha256 = "1d0e52b774a55f4cc68b17e2449eeccff8e66b3fbfae946373ae8be06897d202" } }] + +[[packages]] +name = "uri-template" +version = "1.3.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/uri_template-1.3.0-8-py3-none-any.whl", hashes = { sha256 = "4fb1fde33d50346e8cdeda0a4559ebfc7a63e63d992bb76004740dfd4f7e9021" } }] + +[[packages]] +name = "urllib3" +version = "2.5.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/urllib3-2.5.0-8-py3-none-any.whl", hashes = { sha256 = "62eab27a24e00294123c2ec3e9f227ad2a9bcbb5f5bdb1facc33880a7d998dda" } }] + +[[packages]] +name = "wcwidth" +version = "0.2.14" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/wcwidth-0.2.14-8-py3-none-any.whl", hashes = { sha256 = "4394a3482b54d6ea94dc3b19ac5c2c9192c523d5a8c61819aac84c33e3c9e6dc" } }] + +[[packages]] +name = "webcolors" +version = "24.11.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/webcolors-24.11.1-8-py3-none-any.whl", hashes = { sha256 = "bafab3a15020019faee1c4c2f6e8c0c254099473528cc5704bcb23ef68d63534" } }] + +[[packages]] +name = "webencodings" +version = "0.5.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/webencodings-0.5.1-8-py2.py3-none-any.whl", hashes = { sha256 = "bde12ec6e1a7137892465933b46dc0ac93ed1852f03f0427f4fecd2fbc6564cc" } }] + +[[packages]] +name = "websocket-client" +version = "1.9.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/websocket_client-1.9.0-8-py3-none-any.whl", hashes = { sha256 = "210b54c64b4fab5dcb8fb841f9390caf216e87ae31502dd12ac91d5bcc18ddb0" } }] + +[[packages]] +name = "wheel" +version = "0.45.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/wheel-0.45.1-8-py3-none-any.whl", hashes = { sha256 = "de09a773a3d009c9b2f8768dd6ed1c65d2b622419fc27bce1efb285fd4cb83f2" } }] + +[[packages]] +name = "yarl" +version = "1.22.0" +wheels = [ + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/yarl-1.22.0-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "64e5c3c3900c8d5717abcd28f8adbd557724342c0b758966eab1f7038ea2836d" } }, + { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/yarl-1.22.0-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "21cb00f1fc5c7345f7808987f88c6ad3809b3c8bb12b5182ea66eab409765669" } }, +] diff --git a/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml b/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml new file mode 100644 index 0000000000..ce841bc063 --- /dev/null +++ b/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml @@ -0,0 +1,562 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile --python-platform=linux jupyter/minimal/ubi9-python-3.12/pyproject.toml --output-file=jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml --python-version=3.12 +lock-version = "1.0" +created-by = "uv" +requires-python = ">=3.12" + +[[packages]] +name = "aiohappyeyeballs" +version = "2.6.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/aiohappyeyeballs-2.6.1-10-py3-none-any.whl", hashes = { sha256 = "4b4b6a1fbd0c97c0f8e6ca956c472732cd38770181200fdd454b907a86da2f45" } }] + +[[packages]] +name = "aiohttp" +version = "3.13.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/aiohttp-3.13.1-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "e1b9fce3f4e0be766b10e35e5d01ae2a0ef3c5d839c547ebec4e5e4ea77b1a19" } }] + +[[packages]] +name = "aiosignal" +version = "1.4.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/aiosignal-1.4.0-10-py3-none-any.whl", hashes = { sha256 = "7c29bde462af06651a8b5f02ef6ca2523cd4739db59e1940efc667e4a1e2523c" } }] + +[[packages]] +name = "anyio" +version = "4.11.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/anyio-4.11.0-10-py3-none-any.whl", hashes = { sha256 = "b8bc3e8d12e715d7dd3f67a14a09371d14d2c64db8d67e5049b13dc6f51b062a" } }] + +[[packages]] +name = "argon2-cffi" +version = "25.1.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/argon2_cffi-25.1.0-10-py3-none-any.whl", hashes = { sha256 = "913ae65c0d70cc73b800e16b22b9d1991ac0920f5e0a8a4243dfc7ec9f4baba8" } }] + +[[packages]] +name = "argon2-cffi-bindings" +version = "25.1.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/argon2_cffi_bindings-25.1.0-10-cp312-abi3-linux_x86_64.whl", hashes = { sha256 = "85c2befcc106932ca5d8b7ade86e108d2b9e365f5818ae64f0c6634a86863d2d" } }] + +[[packages]] +name = "arrow" +version = "1.3.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/arrow-1.3.0-10-py3-none-any.whl", hashes = { sha256 = "8bb2694062e9ec573773882a96dfaa716b34218730267e7e76006ef2eceb1864" } }] + +[[packages]] +name = "asttokens" +version = "3.0.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/asttokens-3.0.0-10-py3-none-any.whl", hashes = { sha256 = "ee080ad2e8b8931105a90b321379806beb860bd0d988791f16bda83a572ef3d2" } }] + +[[packages]] +name = "async-lru" +version = "2.0.5" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/async_lru-2.0.5-10-py3-none-any.whl", hashes = { sha256 = "4b92154cd60557b4a430f2799b5eabd3e382f3cf641e91dafb895e5e7f776270" } }] + +[[packages]] +name = "attrs" +version = "25.4.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/attrs-25.4.0-10-py3-none-any.whl", hashes = { sha256 = "e08a2da9bfa37e546a9665ea6c8e361b20e8d87398498981ae41d52faacd81f5" } }] + +[[packages]] +name = "babel" +version = "2.17.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/babel-2.17.0-10-py3-none-any.whl", hashes = { sha256 = "33ba092d26b510fba90ba1a8679fe02949823776889262f3c25b07d76422a390" } }] + +[[packages]] +name = "beautifulsoup4" +version = "4.14.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/beautifulsoup4-4.14.2-10-py3-none-any.whl", hashes = { sha256 = "ed621dd3754937b829477876993dd7702cf285516d70c297b429749d39414c84" } }] + +[[packages]] +name = "bleach" +version = "6.2.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/bleach-6.2.0-10-py3-none-any.whl", hashes = { sha256 = "ee096a950668d3b5709189611905018f4ab62c66c8a1283e879fe3335f086803" } }] + +[[packages]] +name = "certifi" +version = "2025.10.5" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/certifi-2025.10.5-10-py3-none-any.whl", hashes = { sha256 = "a5450d1f81604725c5e5343e35f8dc8a1101153c82f85db7db79a6038aa626e6" } }] + +[[packages]] +name = "cffi" +version = "2.0.0" +marker = "python_full_version < '3.14'" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/cffi-2.0.0-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "6b5a0f09ea049ce7be6baae0d811b6e8618d5b829a46e642166641bb29e99384" } }] + +[[packages]] +name = "charset-normalizer" +version = "3.4.4" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/charset_normalizer-3.4.4-10-py3-none-any.whl", hashes = { sha256 = "cd618da36a26adbc7893cd316228d5e2f46176d0ecc911fb179bda7fa0afb49f" } }] + +[[packages]] +name = "colorama" +version = "0.4.6" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/colorama-0.4.6-10-py2.py3-none-any.whl", hashes = { sha256 = "a92c6895123fbc15859d556c135fa29c51add99b80ca65e16158064046830667" } }] + +[[packages]] +name = "comm" +version = "0.2.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/comm-0.2.3-10-py3-none-any.whl", hashes = { sha256 = "1968c2e8b52e944620c3a753772eff74261ab4ae4e5c6e1bfd57b873cffac488" } }] + +[[packages]] +name = "debugpy" +version = "1.8.17" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/debugpy-1.8.17-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "b152a1c2284ba1de618a195247f99ecbcec1180aecb89e2afa704db68b368ba5" } }] + +[[packages]] +name = "decorator" +version = "5.2.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/decorator-5.2.1-10-py3-none-any.whl", hashes = { sha256 = "c5a6d4bb9d584f4f19cccd0cf81f74a078b980dc9e0f6a0dc447944b4d0f117d" } }] + +[[packages]] +name = "defusedxml" +version = "0.7.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/defusedxml-0.7.1-10-py2.py3-none-any.whl", hashes = { sha256 = "4e7ca9c9443b124215b5c866082a6bbf368d72d3f88e697f50883da4994a013e" } }] + +[[packages]] +name = "executing" +version = "2.2.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/executing-2.2.1-10-py2.py3-none-any.whl", hashes = { sha256 = "a77f91b991f83bbc8e51933479550c729a4530912a745ea7093051f1ae396c08" } }] + +[[packages]] +name = "fastjsonschema" +version = "2.21.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/fastjsonschema-2.21.2-10-py3-none-any.whl", hashes = { sha256 = "55199eecb72c2e1f3512b69acb30ad07aa246a9fc60f218649bbf1e75b919930" } }] + +[[packages]] +name = "fqdn" +version = "1.5.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/fqdn-1.5.1-10-py3-none-any.whl", hashes = { sha256 = "c8a7a278c41617aff07d234e703672704a813c84c3a358c37d0d35ad66af11a8" } }] + +[[packages]] +name = "frozenlist" +version = "1.8.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/frozenlist-1.8.0-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "24f703b97f7bcc58a45abc8ea3d0cc37de790eeb0b7df3ed662fb32862eb2642" } }] + +[[packages]] +name = "gitdb" +version = "4.0.12" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/gitdb-4.0.12-10-py3-none-any.whl", hashes = { sha256 = "7f10c587d72b63ecbfa9f9d80974d66456a46191d73583ab55c6294bb49e3fc2" } }] + +[[packages]] +name = "gitpython" +version = "3.1.45" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/gitpython-3.1.45-10-py3-none-any.whl", hashes = { sha256 = "ed0a58eac8bc783ed97f6121dbfab4504642bbb1d777284758f62fe8d90cd80e" } }] + +[[packages]] +name = "h11" +version = "0.16.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/h11-0.16.0-10-py3-none-any.whl", hashes = { sha256 = "0a63b2c6c40d9a43e912495a4ec22a08efc5f7a1ebb19a1c776b37944ad10edb" } }] + +[[packages]] +name = "httpcore" +version = "1.0.9" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/httpcore-1.0.9-10-py3-none-any.whl", hashes = { sha256 = "25af2f7d203a0cb2e38b7cd1a283f9d8b1381dc2cae4a9a0ec19015c44019faa" } }] + +[[packages]] +name = "httpx" +version = "0.28.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/httpx-0.28.1-10-py3-none-any.whl", hashes = { sha256 = "cf3ac8f1aefa8a9df9ff0ef020d0cab0009a09c35b316bad30081a693b028287" } }] + +[[packages]] +name = "idna" +version = "3.11" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/idna-3.11-10-py3-none-any.whl", hashes = { sha256 = "797548635d83b4a6af114859b2e938e0d71f2b9446a4f2ae9672b26a2ee880bb" } }] + +[[packages]] +name = "ipykernel" +version = "7.0.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/ipykernel-7.0.1-10-py3-none-any.whl", hashes = { sha256 = "279a4913ad2c3e3fbb70c7ee39e856da30bfad39d3ca6dd3f89a60997fd348cc" } }] + +[[packages]] +name = "ipython" +version = "9.6.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/ipython-9.6.0-10-py3-none-any.whl", hashes = { sha256 = "fefee2ebf8e393756dc202ad62f0c4e843dad76a634cde00e61c22c38c2068c9" } }] + +[[packages]] +name = "ipython-pygments-lexers" +version = "1.1.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/ipython_pygments_lexers-1.1.1-10-py3-none-any.whl", hashes = { sha256 = "751a738eacfa7aaa54ce7785c8012f462b14bedb68b7bd159265b71885ec7648" } }] + +[[packages]] +name = "isoduration" +version = "20.11.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/isoduration-20.11.0-10-py3-none-any.whl", hashes = { sha256 = "313dfc02c2248cddd3e1aaad74c87f92bde68f4a33bb7976a9003fab79c4ed0f" } }] + +[[packages]] +name = "jedi" +version = "0.19.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jedi-0.19.2-10-py2.py3-none-any.whl", hashes = { sha256 = "4d00ca8ce39927a4d67ebe352d440f09b607f65e3a1d205fda77636ec71a879e" } }] + +[[packages]] +name = "jinja2" +version = "3.1.6" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jinja2-3.1.6-10-py3-none-any.whl", hashes = { sha256 = "f52688f0d87d2337a216a1fab6deb6330b3fbcba07f8fb6a65c787a3a05b3f02" } }] + +[[packages]] +name = "json5" +version = "0.12.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/json5-0.12.1-10-py3-none-any.whl", hashes = { sha256 = "f2059bc3449085eebd4d52349c2776e5765f6d68b15a28889e53251424825c15" } }] + +[[packages]] +name = "jsonpointer" +version = "3.0.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jsonpointer-3.0.0-10-py2.py3-none-any.whl", hashes = { sha256 = "bfbbe158623f46ae4478872c587e4964402cc725feda0f6a74724df17072a919" } }] + +[[packages]] +name = "jsonschema" +version = "4.25.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jsonschema-4.25.1-10-py3-none-any.whl", hashes = { sha256 = "07a553a29223fc067593ae1c0e2f05715c2f2b4ccfe11507a739fd9489bd8366" } }] + +[[packages]] +name = "jsonschema-specifications" +version = "2025.9.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jsonschema_specifications-2025.9.1-10-py3-none-any.whl", hashes = { sha256 = "d9e791dc28fe485d00e121cb5fcf98aa31420c8d2054d96fd6962129a6f61170" } }] + +[[packages]] +name = "jupyter-client" +version = "8.6.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_client-8.6.3-10-py3-none-any.whl", hashes = { sha256 = "6cb6b5c6fd173a62e6c530fb6ac19eef5d65d3eb0f2e9f60d37e2734add2cc73" } }] + +[[packages]] +name = "jupyter-core" +version = "5.9.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_core-5.9.1-10-py3-none-any.whl", hashes = { sha256 = "b3b0bbe09f786809f35f9e456e133bf9a79af7d31582efa4f29f84bcb6bcfd9e" } }] + +[[packages]] +name = "jupyter-events" +version = "0.12.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_events-0.12.0-10-py3-none-any.whl", hashes = { sha256 = "31c55feb93fd923ebe1139417436de964df828d99222fb03b48d66c9ed98eb7a" } }] + +[[packages]] +name = "jupyter-lsp" +version = "2.3.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_lsp-2.3.0-10-py3-none-any.whl", hashes = { sha256 = "b21d2153b374863782164a33a47ece5560346a4d2a4b918922738ee42ee58d34" } }] + +[[packages]] +name = "jupyter-server" +version = "2.17.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_server-2.17.0-10-py3-none-any.whl", hashes = { sha256 = "893e346dfdc523c3148b8acde5c3ad3116c6b3fdcee218ee4c0a0164c5919150" } }] + +[[packages]] +name = "jupyter-server-mathjax" +version = "0.2.6" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_server_mathjax-0.2.6-py3-none-any.whl", hashes = { sha256 = "416389dde2010df46d5fbbb7adb087a5607111070af65a1445391040f2babb5e" } }] + +[[packages]] +name = "jupyter-server-proxy" +version = "4.4.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_server_proxy-4.4.0-10-py3-none-any.whl", hashes = { sha256 = "edecd75e0f8171722b67ce668a43812781e179e8d120eedb713ee16cb3fa0722" } }] + +[[packages]] +name = "jupyter-server-terminals" +version = "0.5.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_server_terminals-0.5.3-10-py3-none-any.whl", hashes = { sha256 = "881439615bb992112f5c0bcdd3de6077a335fedf7c907e74db2bb340498e9244" } }] + +[[packages]] +name = "jupyterlab" +version = "4.4.9" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyterlab-4.4.9-10-py3-none-any.whl", hashes = { sha256 = "fd7cfeb8b192fad9857dd80fefead1505914f79fcba7f91fd175445f969456c0" } }] + +[[packages]] +name = "jupyterlab-git" +version = "0.51.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyterlab_git-0.51.2-10-py3-none-any.whl", hashes = { sha256 = "02c819137a3ad75935f7925d9f29a83bc275e117eba078f07bf97d45ad30a279" } }] + +[[packages]] +name = "jupyterlab-pygments" +version = "0.3.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyterlab_pygments-0.3.0-11-py3-none-any.whl", hashes = { sha256 = "f3c20b64a0a650bc0710a8590188662d7a7089ccdf5dd127e36ad8d6b092ebfa" } }] + +[[packages]] +name = "jupyterlab-server" +version = "2.27.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyterlab_server-2.27.3-10-py3-none-any.whl", hashes = { sha256 = "e915829e5451496bdfda47f6b8db34044eee28102ce23ac1ebb5680717ea99a9" } }] + +[[packages]] +name = "lark" +version = "1.3.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/lark-1.3.0-10-py3-none-any.whl", hashes = { sha256 = "db7c291c66a9616bee5edb997dc30725d8c574cb467599748f3b0a24dce7957e" } }] + +[[packages]] +name = "markupsafe" +version = "3.0.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/markupsafe-3.0.3-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "98004de1ddc9affee64ed7f1071920df54a63157e05427f8ab2d8accdbe5ec94" } }] + +[[packages]] +name = "matplotlib-inline" +version = "0.1.7" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/matplotlib_inline-0.1.7-10-py3-none-any.whl", hashes = { sha256 = "4726020ddecddf2d43d90f6dac0ea0bb06792c8d48ff737dc870cb33402cefb5" } }] + +[[packages]] +name = "mistune" +version = "3.1.4" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/mistune-3.1.4-10-py3-none-any.whl", hashes = { sha256 = "05a73f4bd90199de04b27a03d9139ca9820fe34eb473e652905096397f979bfd" } }] + +[[packages]] +name = "multidict" +version = "6.7.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/multidict-6.7.0-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "7e9005e96fe97ab54d97628ee54fde79b83192f308cd4a090bbaa1229f257f8d" } }] + +[[packages]] +name = "nbclient" +version = "0.10.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nbclient-0.10.2-10-py3-none-any.whl", hashes = { sha256 = "fefbbbba801aac2644087f8fdfe65ba832ed2b0a528b703f83eef6dbbe82c261" } }] + +[[packages]] +name = "nbconvert" +version = "7.16.6" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nbconvert-7.16.6-10-py3-none-any.whl", hashes = { sha256 = "ac9c54d47096a5ac843bb7f12b7465cffbee4ea769db0f7294c229c7ca2ccc8c" } }] + +[[packages]] +name = "nbdime" +version = "4.0.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nbdime-4.0.2-10-py3-none-any.whl", hashes = { sha256 = "efe199ccd322e4c7426a9fbb486279be5b7a9acb023023c264c77dcfdcd9a4cc" } }] + +[[packages]] +name = "nbformat" +version = "5.10.4" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nbformat-5.10.4-10-py3-none-any.whl", hashes = { sha256 = "3986af0aee8ac00dfe5acc8267cec321e392de6b3dbb25773894d12ecc315e5b" } }] + +[[packages]] +name = "nbgitpuller" +version = "1.2.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nbgitpuller-1.2.2-10-py2.py3-none-any.whl", hashes = { sha256 = "3de18267ef1fecca0b1d90a3e4175e647c9ad6115ccc8dc763adc2440f3cda93" } }] + +[[packages]] +name = "nest-asyncio" +version = "1.6.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nest_asyncio-1.6.0-10-py3-none-any.whl", hashes = { sha256 = "a0f21996eb00941f69e8d9b5fb90aaae1090ee5ea462e6994f837827972687a7" } }] + +[[packages]] +name = "notebook-shim" +version = "0.2.4" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/notebook_shim-0.2.4-10-py3-none-any.whl", hashes = { sha256 = "551b993a097a5b9aecdde90ee9d0e11534ca0b58eb27247923b21b11c0c75e7f" } }] + +[[packages]] +name = "odh-jupyter-trash-cleanup" +version = "0.1.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/odh_jupyter_trash_cleanup-0.1.1-10-py3-none-any.whl", hashes = { sha256 = "b2317483ff4601ad3dd023b01d3a912babd6769a3f7f69447acd4dd2c33ca16d" } }] + +[[packages]] +name = "packaging" +version = "25.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/packaging-25.0-10-py3-none-any.whl", hashes = { sha256 = "099add6fcea96647be5f0671d87e63f92bf7b617c98bd6a7be2446f4bec7e8ba" } }] + +[[packages]] +name = "pandocfilters" +version = "1.5.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pandocfilters-1.5.1-10-py2.py3-none-any.whl", hashes = { sha256 = "795ec406c6165f3b4316ef3930151b12f93179fb85d6cf5349c4745ee488b572" } }] + +[[packages]] +name = "parso" +version = "0.8.5" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/parso-0.8.5-10-py2.py3-none-any.whl", hashes = { sha256 = "b5fc8213db192f5bc37bde959fa4561d8b924a0badc61171ed490e954e9e1df4" } }] + +[[packages]] +name = "pexpect" +version = "4.9.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pexpect-4.9.0-10-py2.py3-none-any.whl", hashes = { sha256 = "1c05c62419d81fecf8d36d1ea0c740d29809f28262692effcb5157d00d132153" } }] + +[[packages]] +name = "platformdirs" +version = "4.5.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/platformdirs-4.5.0-10-py3-none-any.whl", hashes = { sha256 = "f21cbea3bec64bfad58416601724c919658c353aebc3e0f11e4fcf0ac16c947f" } }] + +[[packages]] +name = "prometheus-client" +version = "0.23.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/prometheus_client-0.23.1-10-py3-none-any.whl", hashes = { sha256 = "6dd4379f4063bcb9dd22e0bc8402e243d452bc7ecbfaa49001bc6984ca5f15e1" } }] + +[[packages]] +name = "prompt-toolkit" +version = "3.0.52" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/prompt_toolkit-3.0.52-10-py3-none-any.whl", hashes = { sha256 = "4166e2d2d256416ab13c9b3d914b2f49a5022463b503c3445ee1a9da0de00453" } }] + +[[packages]] +name = "propcache" +version = "0.4.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/propcache-0.4.1-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "79b2a7836b442f64bb7984e4b04cd73e5dc3bf5789b061035245c5fe848d4585" } }] + +[[packages]] +name = "psutil" +version = "7.1.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/psutil-7.1.0-11-cp36-abi3-linux_x86_64.whl", hashes = { sha256 = "3051e89056442c83379178a84f54f248dc2cd828f5ba4fec44d7b062dbd1682e" } }] + +[[packages]] +name = "ptyprocess" +version = "0.7.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/ptyprocess-0.7.0-10-py2.py3-none-any.whl", hashes = { sha256 = "83a9f8945b3698e5465f8007cd8dd61517076d21f87ca3c698710af991df81c4" } }] + +[[packages]] +name = "pure-eval" +version = "0.2.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pure_eval-0.2.3-10-py3-none-any.whl", hashes = { sha256 = "cccae442d9d1fb303b7959fd2a0ae68ec284540880df0a551be473f13932ed69" } }] + +[[packages]] +name = "pycparser" +version = "2.23" +marker = "python_full_version < '3.14' and implementation_name != 'PyPy'" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pycparser-2.23-10-py3-none-any.whl", hashes = { sha256 = "37c69d5bf2a34d769647dddcb6931291fbf9d7e4eb87240f382525c9f45c33f3" } }] + +[[packages]] +name = "pygments" +version = "2.19.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pygments-2.19.2-10-py3-none-any.whl", hashes = { sha256 = "055ee7d2076d27e5bb3a4f645c5c67f85f9e1d29026cc5aa2106ee6132448e35" } }] + +[[packages]] +name = "python-dateutil" +version = "2.9.0.post0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/python_dateutil-2.9.0.post0-10-py2.py3-none-any.whl", hashes = { sha256 = "f863ec121b045f9439494c624e6c1bb159773bf0043b20a583606c452b266299" } }] + +[[packages]] +name = "python-json-logger" +version = "4.0.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/python_json_logger-4.0.0-10-py3-none-any.whl", hashes = { sha256 = "09cdd727cda12a6c52f4af3f1ae69eee6a5be1d4b77b331a872a6b43be94744f" } }] + +[[packages]] +name = "pyyaml" +version = "6.0.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pyyaml-6.0.3-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "0431bbf4c753792a45966b26dc0b2e4ea13deaa2abb8fa9bd33b4b0b05b61cef" } }] + +[[packages]] +name = "pyzmq" +version = "27.1.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pyzmq-27.1.0-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "2f6a776faf1399c55ba895b09e74ca188185a8fa6d438835f76aee3c9e07f557" } }] + +[[packages]] +name = "referencing" +version = "0.37.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/referencing-0.37.0-10-py3-none-any.whl", hashes = { sha256 = "12673e7119e24319279ff9fecb6362f42fb5826f1a543995d9d64bad5a72f9c9" } }] + +[[packages]] +name = "requests" +version = "2.32.5" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/requests-2.32.5-10-py3-none-any.whl", hashes = { sha256 = "557f15a3a5538f02a0395b7c8a6ac94cc04c3fd0f01b15bfd913980d4483346a" } }] + +[[packages]] +name = "rfc3339-validator" +version = "0.1.4" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/rfc3339_validator-0.1.4-10-py2.py3-none-any.whl", hashes = { sha256 = "8ef066ddc7f8b606bf0e5bea93a5c75de8cb6f470ab4a96823f5b4607f39d2db" } }] + +[[packages]] +name = "rfc3986-validator" +version = "0.1.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/rfc3986_validator-0.1.1-10-py2.py3-none-any.whl", hashes = { sha256 = "a9e42443f6946098c0a5c8b4b31cd37cfd1677ef4b5e7ada4cabc73c3401cc8c" } }] + +[[packages]] +name = "rfc3987-syntax" +version = "1.1.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/rfc3987_syntax-1.1.0-10-py3-none-any.whl", hashes = { sha256 = "2514aca7ab8f96e43239bf1eee72785ad2f01b79fb47902308f749ddbb4ba35f" } }] + +[[packages]] +name = "rpds-py" +version = "0.27.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/rpds_py-0.27.1-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "e36407b1898388ff3f0645197583729b380603995e5bc630b991d970c68e2468" } }] + +[[packages]] +name = "send2trash" +version = "1.8.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/send2trash-1.8.3-10-py3-none-any.whl", hashes = { sha256 = "acb078834c46f1fb0f4e352c057cc8bb93b8c1a97c983b625a53dded78c84248" } }] + +[[packages]] +name = "setuptools" +version = "80.9.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/setuptools-80.9.0-10-py3-none-any.whl", hashes = { sha256 = "08de7e4f4d5faf0fad68838d115213a4594045e541487ec49ddf09780d28fd21" } }] + +[[packages]] +name = "simpervisor" +version = "1.0.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/simpervisor-1.0.0-10-py3-none-any.whl", hashes = { sha256 = "f2e6216ba84f8eb91897fd37dc2b1469e7a4c171a580ffb482448fb29e51bf4a" } }] + +[[packages]] +name = "six" +version = "1.17.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/six-1.17.0-10-py2.py3-none-any.whl", hashes = { sha256 = "a45a0a812543f786c26cedf2180f5c75b99865459fdefa4591c4ef0bc65421e2" } }] + +[[packages]] +name = "smmap" +version = "5.0.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/smmap-5.0.2-10-py3-none-any.whl", hashes = { sha256 = "68db55c055a943d88635079e7da04d1f693e3beec476c3b06a7d014f1641ef23" } }] + +[[packages]] +name = "sniffio" +version = "1.3.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/sniffio-1.3.1-10-py3-none-any.whl", hashes = { sha256 = "863965143c613a30a5092ed3ecf2b7e4b2f3fdcad95e7814784021a04e9aee49" } }] + +[[packages]] +name = "soupsieve" +version = "2.8" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/soupsieve-2.8-10-py3-none-any.whl", hashes = { sha256 = "a2f7f498504e5ca7d9ce61e42c0771d6c9badd8b362dbd3673d6109e41656032" } }] + +[[packages]] +name = "stack-data" +version = "0.6.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/stack_data-0.6.3-10-py3-none-any.whl", hashes = { sha256 = "06c4a35b9556c8d032ff533cc4f3b8c0a4a56c33e7af1a30bdf7267ec84f0092" } }] + +[[packages]] +name = "terminado" +version = "0.18.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/terminado-0.18.1-10-py3-none-any.whl", hashes = { sha256 = "136b000f60844b2fda5d13b3f4fc5f67edab49798de4e21eceef4db0302abc0a" } }] + +[[packages]] +name = "tinycss2" +version = "1.4.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/tinycss2-1.4.0-10-py3-none-any.whl", hashes = { sha256 = "53dc2f979e1a263a338be2ee439f8b766fe5e484c956c23b3019bc0cf910ce2b" } }] + +[[packages]] +name = "tornado" +version = "6.5.2" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/tornado-6.5.2-10-cp39-abi3-linux_x86_64.whl", hashes = { sha256 = "c5ecf7584eaeb96ffd47c7f76c292ed3c108976393f751caf3d51c4bc47cbda8" } }] + +[[packages]] +name = "traitlets" +version = "5.14.3" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/traitlets-5.14.3-10-py3-none-any.whl", hashes = { sha256 = "f293342354bb248a34422af5cd21bb18e390a722a5fe5454c8a68e407a551f47" } }] + +[[packages]] +name = "types-python-dateutil" +version = "2.9.0.20251008" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/types_python_dateutil-2.9.0.20251008-10-py3-none-any.whl", hashes = { sha256 = "121ae818a68c7abaebe9ec79bb4736591ce9ca1836639e926e1b20cf81cb268d" } }] + +[[packages]] +name = "typing-extensions" +version = "4.15.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/typing_extensions-4.15.0-10-py3-none-any.whl", hashes = { sha256 = "627495182b5b2c860a357439d4e7655c7e88a494ca497166353db469bfe18fdf" } }] + +[[packages]] +name = "uri-template" +version = "1.3.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/uri_template-1.3.0-10-py3-none-any.whl", hashes = { sha256 = "e3ac6c8e37463b47e42a18b2d2a123401cfa3c21120bda7656703d5c98a9526a" } }] + +[[packages]] +name = "urllib3" +version = "2.5.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/urllib3-2.5.0-10-py3-none-any.whl", hashes = { sha256 = "20c16b4edcfdc25141df89d3d3749609a0bce265ddebb5d683d3d13b9f34236a" } }] + +[[packages]] +name = "wcwidth" +version = "0.2.14" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/wcwidth-0.2.14-10-py3-none-any.whl", hashes = { sha256 = "590a9cb2dbdb8f82a90d839f32314b5e82f01cab69f298e7719e207ac9f9791f" } }] + +[[packages]] +name = "webcolors" +version = "24.11.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/webcolors-24.11.1-10-py3-none-any.whl", hashes = { sha256 = "ce26473f6ab0355675c8687c5544f1e6b96fccd07efb07b1a02b42a4d47e9d05" } }] + +[[packages]] +name = "webencodings" +version = "0.5.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/webencodings-0.5.1-10-py2.py3-none-any.whl", hashes = { sha256 = "6b609dd825b159d9447f89e9c95dd5b5786ccbc0e84219449f988b8262a3c7f5" } }] + +[[packages]] +name = "websocket-client" +version = "1.9.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/websocket_client-1.9.0-10-py3-none-any.whl", hashes = { sha256 = "adebf5266c102b4983b5ebd7546a4a6ab7d83a8e25c07f741e6ce2971677c6df" } }] + +[[packages]] +name = "wheel" +version = "0.45.1" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/wheel-0.45.1-10-py3-none-any.whl", hashes = { sha256 = "c4ea71a32ea7a3eb87099ec059d51a14426296367b53c53d4b17fb96b33ec469" } }] + +[[packages]] +name = "yarl" +version = "1.22.0" +wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/yarl-1.22.0-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "74d515beefd03b03de03e67b36a64fdfeb4948cb2aa54df081526855bde76062" } }] From 4759a348e52ae150a6e23c627ce193f9600a98f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Wed, 29 Oct 2025 08:05:25 +0100 Subject: [PATCH 02/43] NO-JIRA: chore(docs/adr): begin recording architectural decisions made on this project with the help of adr-tools (#858) ``` $ brew install adr-tools $ adr init docs/architecture/decisions ``` * clarify not-using of opendatahub ADR repository and provide reasoning based on prior experience --- .adr-dir | 1 + .../0001-record-architecture-decisions.md | 24 +++++++++++++++++ docs/architecture/decisions/README.md | 27 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 .adr-dir create mode 100644 docs/architecture/decisions/0001-record-architecture-decisions.md create mode 100644 docs/architecture/decisions/README.md diff --git a/.adr-dir b/.adr-dir new file mode 100644 index 0000000000..da5cac6b77 --- /dev/null +++ b/.adr-dir @@ -0,0 +1 @@ +docs/architecture/decisions diff --git a/docs/architecture/decisions/0001-record-architecture-decisions.md b/docs/architecture/decisions/0001-record-architecture-decisions.md new file mode 100644 index 0000000000..b9b5a925f6 --- /dev/null +++ b/docs/architecture/decisions/0001-record-architecture-decisions.md @@ -0,0 +1,24 @@ +# 1. Record architecture decisions + +Date: 2025-01-18 + +## Status + +Accepted + +## Context + +We need to record the architectural decisions made on this project. + +## Decision + +We will use Architecture Decision Records, as [described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions). + +We will presently ignore the [opendatahub-io/architecture-decision-records](https://github.com/opendatahub-io/architecture-decision-records) +repository, since our ADRs are (at least initially) be internal to the notebooks project itself and also because +previous experience ([PR#91](https://github.com/opendatahub-io/architecture-decision-records/pull/91)) +shows that it is challenging to get merge approval for a PR there. + +## Consequences + +See Michael Nygard's article, linked above. For a lightweight ADR toolset, see Nat Pryce's [adr-tools](https://github.com/npryce/adr-tools). diff --git a/docs/architecture/decisions/README.md b/docs/architecture/decisions/README.md new file mode 100644 index 0000000000..9b70a482cc --- /dev/null +++ b/docs/architecture/decisions/README.md @@ -0,0 +1,27 @@ +## Getting started + +* , installation: +[Linux](https://github.com/npryce/adr-tools/blob/master/INSTALL.md#from-a-release-package-linux-macos-x), +[Homebrew](https://formulae.brew.sh/formula/adr-tools) + +```commandline +brew install adr-tools +``` + +## Start new ADR + + + +```commandline +adr new Implement as Unix shell scripts +``` + +## Initialize new ADR directory + +```commandline +adr init docs/architecture/decisions +``` + +## OpenDataHub ADRs + + From 8441b86dce58fd0b63136bf99a1995a06a864f2d Mon Sep 17 00:00:00 2001 From: Alex Fan <91211463+alexxfan@users.noreply.github.com> Date: Wed, 29 Oct 2025 07:37:03 +0000 Subject: [PATCH 03/43] RHOAIENG-37016: update push and pull pipelines and on-cel expressions for base-images cpu-py312 c9s and ubi9 (#2626) --- ...base-image-cpu-py312-c9s-pull-request.yaml | 578 +----------------- .../odh-base-image-cpu-py312-c9s-push.yaml | 573 +---------------- ...ase-image-cpu-py312-ubi9-pull-request.yaml | 578 +----------------- .../odh-base-image-cpu-py312-ubi9-push.yaml | 573 +---------------- 4 files changed, 36 insertions(+), 2266 deletions(-) diff --git a/.tekton/odh-base-image-cpu-py312-c9s-pull-request.yaml b/.tekton/odh-base-image-cpu-py312-c9s-pull-request.yaml index f29ca4edd0..72a622c2d7 100644 --- a/.tekton/odh-base-image-cpu-py312-c9s-pull-request.yaml +++ b/.tekton/odh-base-image-cpu-py312-c9s-pull-request.yaml @@ -8,8 +8,9 @@ metadata: build.appstudio.redhat.com/target_branch: '{{target_branch}}' pipelinesascode.tekton.dev/cancel-in-progress: "true" pipelinesascode.tekton.dev/max-keep-runs: "3" - pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch - == "main" + pipelinesascode.tekton.dev/on-comment: ^/kfbuild\s+(all|odh\-base\-image\-cpu\-py312\-c9s|base\-images/cpu/c9s\-python\-3\.12) + pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch == "main" && ( "base-images/cpu/c9s-python-3.12/**".pathChanged() || ".tekton/odh-base-image-cpu-py312-c9s-pull-request.yaml".pathChanged() ) + && body.repository.full_name == "opendatahub-io/notebooks" creationTimestamp: null labels: appstudio.openshift.io/application: opendatahub-release @@ -18,6 +19,8 @@ metadata: name: odh-base-image-cpu-py312-c9s-on-pull-request namespace: open-data-hub-tenant spec: + timeouts: + pipeline: 3h params: - name: git-url value: '{{source_url}}' @@ -31,571 +34,12 @@ spec: value: base-images/cpu/c9s-python-3.12/Dockerfile.cpu - name: path-context value: . - pipelineSpec: - description: | - This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. - - _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. - This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ - params: - - description: Source Repository URL - name: git-url - type: string - - default: "" - description: Revision of the Source Repository - name: revision - type: string - - description: Fully Qualified Output Image - name: output-image - type: string - - default: . - description: Path to the source code of an application's component from where - to build image. - name: path-context - type: string - - default: Dockerfile - description: Path to the Dockerfile inside the context specified by parameter - path-context - name: dockerfile - type: string - - default: "false" - description: Force rebuild image - name: rebuild - type: string - - default: "false" - description: Skip checks against built image - name: skip-checks - type: string - - default: "false" - description: Execute the build with network isolation - name: hermetic - type: string - - default: "" - description: Build dependencies to be prefetched - name: prefetch-input - type: string - - default: "" - description: Image tag expiration time, time values could be something like - 1h, 2d, 3w for hours, days, and weeks, respectively. - name: image-expires-after - type: string - - default: "false" - description: Build a source image. - name: build-source-image - type: string - - default: "false" - description: Add built image into an OCI image index - name: build-image-index - type: string - - default: docker - description: The format for the resulting image's mediaType. Valid values are - oci or docker. - name: buildah-format - type: string - - default: [] - description: Array of --build-arg values ("arg=value" strings) for buildah - name: build-args - type: array - - default: "" - description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file - name: build-args-file - type: string - - default: "false" - description: Whether to enable privileged mode, should be used only with remote - VMs - name: privileged-nested - type: string - results: - - description: "" - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - description: "" - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - description: "" - name: CHAINS-GIT_URL - value: $(tasks.clone-repository.results.url) - - description: "" - name: CHAINS-GIT_COMMIT - value: $(tasks.clone-repository.results.commit) - tasks: - - name: init - params: - - name: image-url - value: $(params.output-image) - - name: rebuild - value: $(params.rebuild) - - name: skip-checks - value: $(params.skip-checks) - taskRef: - params: - - name: name - value: init - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 - - name: kind - value: task - resolver: bundles - - name: clone-repository - params: - - name: url - value: $(params.git-url) - - name: revision - value: $(params.revision) - - name: ociStorage - value: $(params.output-image).git - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - init - taskRef: - params: - - name: name - value: git-clone-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:bb2f8f1edec47faa08c1929f2ffc6748f3a96af9644e6c40000081c6ff3ec894 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - workspaces: - - name: basic-auth - workspace: git-auth - - name: prefetch-dependencies - params: - - name: input - value: $(params.prefetch-input) - - name: SOURCE_ARTIFACT - value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) - - name: ociStorage - value: $(params.output-image).prefetch - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - clone-repository - taskRef: - params: - - name: name - value: prefetch-dependencies-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:0503f9313dfe70e4defda88a7226ec91a74af42198dccfa3280397d965aa16d6 - - name: kind - value: task - resolver: bundles - workspaces: - - name: git-basic-auth - workspace: git-auth - - name: netrc - workspace: netrc - - name: build-container - params: - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: PRIVILEGED_NESTED - value: $(params.privileged-nested) - - name: SOURCE_URL - value: $(tasks.clone-repository.results.url) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - prefetch-dependencies - taskRef: - params: - - name: name - value: buildah-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:b990178b6bf21c353e1567fe1a66d1472f7f4a862f003cf8d5b31d1caa3c43d6 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-image-index - params: - - name: IMAGE - value: $(params.output-image) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: ALWAYS_BUILD_INDEX - value: $(params.build-image-index) - - name: IMAGES - value: - - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - runAfter: - - build-container - taskRef: - params: - - name: name - value: build-image-index - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:d94cad7f41be61074dd21c7dff26dab9217c3435a16f62813c1cb8382dd9aae6 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-source-image - params: - - name: BINARY_IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: BINARY_IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: source-build-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:5f9069a07a6dc16aae7a05adf49d2b6792815f3fabd116377578860743f4e0ec - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - input: $(params.build-source-image) - operator: in - values: - - "true" - - name: deprecated-base-image-check - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: deprecated-image-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clair-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clair-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: ecosystem-cert-preflight-checks - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: ecosystem-cert-preflight-checks - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-snyk-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-snyk-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clamav-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clamav-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-coverity-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - coverity-availability-check - taskRef: - params: - - name: name - value: sast-coverity-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - input: $(tasks.coverity-availability-check.results.STATUS) - operator: in - values: - - success - - name: coverity-availability-check - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: coverity-availability-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:36bcf1531b85c2c7d7b4382bc0a9c61b0501e2e54e84991b11b225bdec0e5928 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-shell-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-shell-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-unicode-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-unicode-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: apply-tags - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: apply-tags - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:f44be1bf0262471f2f503f5e19da5f0628dcaf968c86272a2ad6b4871e708448 - - name: kind - value: task - resolver: bundles - - name: push-dockerfile - params: - - name: IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: push-dockerfile-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:738e6e2108bee5b50309a37b54bc1adf8433ac63598dbb6830d6cb4ac65d9de6 - - name: kind - value: task - resolver: bundles - - name: rpms-signature-scan - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: rpms-signature-scan - - name: bundle - value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:3d9fbf2c0a732f736b050c293380b63c8c72ab38d0ef79fcf9d1b7d8fcd25efb - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - workspaces: - - name: git-auth - optional: true - - name: netrc - optional: true + - name: build-platforms + value: + - linux/x86_64 + - linux/arm64 + pipelineRef: + name: multiarch-pull-request-pipeline taskRunTemplate: serviceAccountName: build-pipeline-odh-base-image-cpu-py312-c9s workspaces: diff --git a/.tekton/odh-base-image-cpu-py312-c9s-push.yaml b/.tekton/odh-base-image-cpu-py312-c9s-push.yaml index 309c548499..be74bbe112 100644 --- a/.tekton/odh-base-image-cpu-py312-c9s-push.yaml +++ b/.tekton/odh-base-image-cpu-py312-c9s-push.yaml @@ -8,7 +8,7 @@ metadata: pipelinesascode.tekton.dev/cancel-in-progress: "false" pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "push" && target_branch - == "main" + == "main" && ( "base-images/cpu/c9s-python-3.12/**".pathChanged() || ".tekton/odh-base-image-cpu-py312-c9s-push.yaml".pathChanged() ) creationTimestamp: null labels: appstudio.openshift.io/application: opendatahub-release @@ -28,571 +28,12 @@ spec: value: base-images/cpu/c9s-python-3.12/Dockerfile.cpu - name: path-context value: . - pipelineSpec: - description: | - This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. - - _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. - This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ - params: - - description: Source Repository URL - name: git-url - type: string - - default: "" - description: Revision of the Source Repository - name: revision - type: string - - description: Fully Qualified Output Image - name: output-image - type: string - - default: . - description: Path to the source code of an application's component from where - to build image. - name: path-context - type: string - - default: Dockerfile - description: Path to the Dockerfile inside the context specified by parameter - path-context - name: dockerfile - type: string - - default: "false" - description: Force rebuild image - name: rebuild - type: string - - default: "false" - description: Skip checks against built image - name: skip-checks - type: string - - default: "false" - description: Execute the build with network isolation - name: hermetic - type: string - - default: "" - description: Build dependencies to be prefetched - name: prefetch-input - type: string - - default: "" - description: Image tag expiration time, time values could be something like - 1h, 2d, 3w for hours, days, and weeks, respectively. - name: image-expires-after - type: string - - default: "false" - description: Build a source image. - name: build-source-image - type: string - - default: "false" - description: Add built image into an OCI image index - name: build-image-index - type: string - - default: docker - description: The format for the resulting image's mediaType. Valid values are - oci or docker. - name: buildah-format - type: string - - default: [] - description: Array of --build-arg values ("arg=value" strings) for buildah - name: build-args - type: array - - default: "" - description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file - name: build-args-file - type: string - - default: "false" - description: Whether to enable privileged mode, should be used only with remote - VMs - name: privileged-nested - type: string - results: - - description: "" - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - description: "" - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - description: "" - name: CHAINS-GIT_URL - value: $(tasks.clone-repository.results.url) - - description: "" - name: CHAINS-GIT_COMMIT - value: $(tasks.clone-repository.results.commit) - tasks: - - name: init - params: - - name: image-url - value: $(params.output-image) - - name: rebuild - value: $(params.rebuild) - - name: skip-checks - value: $(params.skip-checks) - taskRef: - params: - - name: name - value: init - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 - - name: kind - value: task - resolver: bundles - - name: clone-repository - params: - - name: url - value: $(params.git-url) - - name: revision - value: $(params.revision) - - name: ociStorage - value: $(params.output-image).git - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - init - taskRef: - params: - - name: name - value: git-clone-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:bb2f8f1edec47faa08c1929f2ffc6748f3a96af9644e6c40000081c6ff3ec894 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - workspaces: - - name: basic-auth - workspace: git-auth - - name: prefetch-dependencies - params: - - name: input - value: $(params.prefetch-input) - - name: SOURCE_ARTIFACT - value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) - - name: ociStorage - value: $(params.output-image).prefetch - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - clone-repository - taskRef: - params: - - name: name - value: prefetch-dependencies-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:0503f9313dfe70e4defda88a7226ec91a74af42198dccfa3280397d965aa16d6 - - name: kind - value: task - resolver: bundles - workspaces: - - name: git-basic-auth - workspace: git-auth - - name: netrc - workspace: netrc - - name: build-container - params: - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: PRIVILEGED_NESTED - value: $(params.privileged-nested) - - name: SOURCE_URL - value: $(tasks.clone-repository.results.url) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - prefetch-dependencies - taskRef: - params: - - name: name - value: buildah-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:b990178b6bf21c353e1567fe1a66d1472f7f4a862f003cf8d5b31d1caa3c43d6 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-image-index - params: - - name: IMAGE - value: $(params.output-image) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: ALWAYS_BUILD_INDEX - value: $(params.build-image-index) - - name: IMAGES - value: - - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - runAfter: - - build-container - taskRef: - params: - - name: name - value: build-image-index - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:d94cad7f41be61074dd21c7dff26dab9217c3435a16f62813c1cb8382dd9aae6 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-source-image - params: - - name: BINARY_IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: BINARY_IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: source-build-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:5f9069a07a6dc16aae7a05adf49d2b6792815f3fabd116377578860743f4e0ec - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - input: $(params.build-source-image) - operator: in - values: - - "true" - - name: deprecated-base-image-check - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: deprecated-image-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clair-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clair-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: ecosystem-cert-preflight-checks - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: ecosystem-cert-preflight-checks - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-snyk-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-snyk-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clamav-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clamav-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-coverity-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - coverity-availability-check - taskRef: - params: - - name: name - value: sast-coverity-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - input: $(tasks.coverity-availability-check.results.STATUS) - operator: in - values: - - success - - name: coverity-availability-check - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: coverity-availability-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:36bcf1531b85c2c7d7b4382bc0a9c61b0501e2e54e84991b11b225bdec0e5928 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-shell-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-shell-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-unicode-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-unicode-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: apply-tags - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: apply-tags - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:f44be1bf0262471f2f503f5e19da5f0628dcaf968c86272a2ad6b4871e708448 - - name: kind - value: task - resolver: bundles - - name: push-dockerfile - params: - - name: IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: push-dockerfile-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:738e6e2108bee5b50309a37b54bc1adf8433ac63598dbb6830d6cb4ac65d9de6 - - name: kind - value: task - resolver: bundles - - name: rpms-signature-scan - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: rpms-signature-scan - - name: bundle - value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:3d9fbf2c0a732f736b050c293380b63c8c72ab38d0ef79fcf9d1b7d8fcd25efb - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - workspaces: - - name: git-auth - optional: true - - name: netrc - optional: true + - name: build-platforms + value: + - linux/x86_64 + - linux/arm64 + pipelineRef: + name: multiarch-push-pipeline taskRunTemplate: serviceAccountName: build-pipeline-odh-base-image-cpu-py312-c9s workspaces: diff --git a/.tekton/odh-base-image-cpu-py312-ubi9-pull-request.yaml b/.tekton/odh-base-image-cpu-py312-ubi9-pull-request.yaml index b034e58f7a..866d260a21 100644 --- a/.tekton/odh-base-image-cpu-py312-ubi9-pull-request.yaml +++ b/.tekton/odh-base-image-cpu-py312-ubi9-pull-request.yaml @@ -8,8 +8,9 @@ metadata: build.appstudio.redhat.com/target_branch: '{{target_branch}}' pipelinesascode.tekton.dev/cancel-in-progress: "true" pipelinesascode.tekton.dev/max-keep-runs: "3" - pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch - == "main" + pipelinesascode.tekton.dev/on-comment: ^/kfbuild\s+(all|odh\-base\-image\-cpu\-py312\-ubi9|base\-images/cpu/ubi9\-python\-3\.12) + pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch == "main" && ( "base-images/cpu/ubi9-python-3.12/**".pathChanged() || ".tekton/odh-base-image-cpu-py312-ubi9-pull-request.yaml".pathChanged() ) + && body.repository.full_name == "opendatahub-io/notebooks" creationTimestamp: null labels: appstudio.openshift.io/application: opendatahub-release @@ -18,6 +19,8 @@ metadata: name: odh-base-image-cpu-py312-ubi9-on-pull-request namespace: open-data-hub-tenant spec: + timeouts: + pipeline: 3h params: - name: git-url value: '{{source_url}}' @@ -31,571 +34,12 @@ spec: value: base-images/cpu/ubi9-python-3.12/Dockerfile.cpu - name: path-context value: . - pipelineSpec: - description: | - This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. - - _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. - This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ - params: - - description: Source Repository URL - name: git-url - type: string - - default: "" - description: Revision of the Source Repository - name: revision - type: string - - description: Fully Qualified Output Image - name: output-image - type: string - - default: . - description: Path to the source code of an application's component from where - to build image. - name: path-context - type: string - - default: Dockerfile - description: Path to the Dockerfile inside the context specified by parameter - path-context - name: dockerfile - type: string - - default: "false" - description: Force rebuild image - name: rebuild - type: string - - default: "false" - description: Skip checks against built image - name: skip-checks - type: string - - default: "false" - description: Execute the build with network isolation - name: hermetic - type: string - - default: "" - description: Build dependencies to be prefetched - name: prefetch-input - type: string - - default: "" - description: Image tag expiration time, time values could be something like - 1h, 2d, 3w for hours, days, and weeks, respectively. - name: image-expires-after - type: string - - default: "false" - description: Build a source image. - name: build-source-image - type: string - - default: "false" - description: Add built image into an OCI image index - name: build-image-index - type: string - - default: docker - description: The format for the resulting image's mediaType. Valid values are - oci or docker. - name: buildah-format - type: string - - default: [] - description: Array of --build-arg values ("arg=value" strings) for buildah - name: build-args - type: array - - default: "" - description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file - name: build-args-file - type: string - - default: "false" - description: Whether to enable privileged mode, should be used only with remote - VMs - name: privileged-nested - type: string - results: - - description: "" - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - description: "" - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - description: "" - name: CHAINS-GIT_URL - value: $(tasks.clone-repository.results.url) - - description: "" - name: CHAINS-GIT_COMMIT - value: $(tasks.clone-repository.results.commit) - tasks: - - name: init - params: - - name: image-url - value: $(params.output-image) - - name: rebuild - value: $(params.rebuild) - - name: skip-checks - value: $(params.skip-checks) - taskRef: - params: - - name: name - value: init - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 - - name: kind - value: task - resolver: bundles - - name: clone-repository - params: - - name: url - value: $(params.git-url) - - name: revision - value: $(params.revision) - - name: ociStorage - value: $(params.output-image).git - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - init - taskRef: - params: - - name: name - value: git-clone-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:bb2f8f1edec47faa08c1929f2ffc6748f3a96af9644e6c40000081c6ff3ec894 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - workspaces: - - name: basic-auth - workspace: git-auth - - name: prefetch-dependencies - params: - - name: input - value: $(params.prefetch-input) - - name: SOURCE_ARTIFACT - value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) - - name: ociStorage - value: $(params.output-image).prefetch - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - clone-repository - taskRef: - params: - - name: name - value: prefetch-dependencies-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:0503f9313dfe70e4defda88a7226ec91a74af42198dccfa3280397d965aa16d6 - - name: kind - value: task - resolver: bundles - workspaces: - - name: git-basic-auth - workspace: git-auth - - name: netrc - workspace: netrc - - name: build-container - params: - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: PRIVILEGED_NESTED - value: $(params.privileged-nested) - - name: SOURCE_URL - value: $(tasks.clone-repository.results.url) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - prefetch-dependencies - taskRef: - params: - - name: name - value: buildah-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:b990178b6bf21c353e1567fe1a66d1472f7f4a862f003cf8d5b31d1caa3c43d6 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-image-index - params: - - name: IMAGE - value: $(params.output-image) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: ALWAYS_BUILD_INDEX - value: $(params.build-image-index) - - name: IMAGES - value: - - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - runAfter: - - build-container - taskRef: - params: - - name: name - value: build-image-index - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:d94cad7f41be61074dd21c7dff26dab9217c3435a16f62813c1cb8382dd9aae6 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-source-image - params: - - name: BINARY_IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: BINARY_IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: source-build-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:5f9069a07a6dc16aae7a05adf49d2b6792815f3fabd116377578860743f4e0ec - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - input: $(params.build-source-image) - operator: in - values: - - "true" - - name: deprecated-base-image-check - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: deprecated-image-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clair-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clair-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: ecosystem-cert-preflight-checks - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: ecosystem-cert-preflight-checks - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-snyk-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-snyk-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clamav-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clamav-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-coverity-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - coverity-availability-check - taskRef: - params: - - name: name - value: sast-coverity-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - input: $(tasks.coverity-availability-check.results.STATUS) - operator: in - values: - - success - - name: coverity-availability-check - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: coverity-availability-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:36bcf1531b85c2c7d7b4382bc0a9c61b0501e2e54e84991b11b225bdec0e5928 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-shell-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-shell-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-unicode-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-unicode-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: apply-tags - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: apply-tags - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:f44be1bf0262471f2f503f5e19da5f0628dcaf968c86272a2ad6b4871e708448 - - name: kind - value: task - resolver: bundles - - name: push-dockerfile - params: - - name: IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: push-dockerfile-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:738e6e2108bee5b50309a37b54bc1adf8433ac63598dbb6830d6cb4ac65d9de6 - - name: kind - value: task - resolver: bundles - - name: rpms-signature-scan - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: rpms-signature-scan - - name: bundle - value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:3d9fbf2c0a732f736b050c293380b63c8c72ab38d0ef79fcf9d1b7d8fcd25efb - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - workspaces: - - name: git-auth - optional: true - - name: netrc - optional: true + - name: build-platforms + value: + - linux/x86_64 + - linux/arm64 + pipelineRef: + name: multiarch-pull-request-pipeline taskRunTemplate: serviceAccountName: build-pipeline-odh-base-image-cpu-py312-ubi9 workspaces: diff --git a/.tekton/odh-base-image-cpu-py312-ubi9-push.yaml b/.tekton/odh-base-image-cpu-py312-ubi9-push.yaml index 76b3860cc7..999638eb5b 100644 --- a/.tekton/odh-base-image-cpu-py312-ubi9-push.yaml +++ b/.tekton/odh-base-image-cpu-py312-ubi9-push.yaml @@ -8,7 +8,7 @@ metadata: pipelinesascode.tekton.dev/cancel-in-progress: "false" pipelinesascode.tekton.dev/max-keep-runs: "3" pipelinesascode.tekton.dev/on-cel-expression: event == "push" && target_branch - == "main" + == "main" && ( "base-images/cpu/ubi9-python-3.12/**".pathChanged() || ".tekton/odh-base-image-cpu-py312-ubi9-push.yaml".pathChanged() ) creationTimestamp: null labels: appstudio.openshift.io/application: opendatahub-release @@ -28,571 +28,12 @@ spec: value: base-images/cpu/ubi9-python-3.12/Dockerfile.cpu - name: path-context value: . - pipelineSpec: - description: | - This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. - - _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. - This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ - params: - - description: Source Repository URL - name: git-url - type: string - - default: "" - description: Revision of the Source Repository - name: revision - type: string - - description: Fully Qualified Output Image - name: output-image - type: string - - default: . - description: Path to the source code of an application's component from where - to build image. - name: path-context - type: string - - default: Dockerfile - description: Path to the Dockerfile inside the context specified by parameter - path-context - name: dockerfile - type: string - - default: "false" - description: Force rebuild image - name: rebuild - type: string - - default: "false" - description: Skip checks against built image - name: skip-checks - type: string - - default: "false" - description: Execute the build with network isolation - name: hermetic - type: string - - default: "" - description: Build dependencies to be prefetched - name: prefetch-input - type: string - - default: "" - description: Image tag expiration time, time values could be something like - 1h, 2d, 3w for hours, days, and weeks, respectively. - name: image-expires-after - type: string - - default: "false" - description: Build a source image. - name: build-source-image - type: string - - default: "false" - description: Add built image into an OCI image index - name: build-image-index - type: string - - default: docker - description: The format for the resulting image's mediaType. Valid values are - oci or docker. - name: buildah-format - type: string - - default: [] - description: Array of --build-arg values ("arg=value" strings) for buildah - name: build-args - type: array - - default: "" - description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file - name: build-args-file - type: string - - default: "false" - description: Whether to enable privileged mode, should be used only with remote - VMs - name: privileged-nested - type: string - results: - - description: "" - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - description: "" - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - description: "" - name: CHAINS-GIT_URL - value: $(tasks.clone-repository.results.url) - - description: "" - name: CHAINS-GIT_COMMIT - value: $(tasks.clone-repository.results.commit) - tasks: - - name: init - params: - - name: image-url - value: $(params.output-image) - - name: rebuild - value: $(params.rebuild) - - name: skip-checks - value: $(params.skip-checks) - taskRef: - params: - - name: name - value: init - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 - - name: kind - value: task - resolver: bundles - - name: clone-repository - params: - - name: url - value: $(params.git-url) - - name: revision - value: $(params.revision) - - name: ociStorage - value: $(params.output-image).git - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - init - taskRef: - params: - - name: name - value: git-clone-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:bb2f8f1edec47faa08c1929f2ffc6748f3a96af9644e6c40000081c6ff3ec894 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - workspaces: - - name: basic-auth - workspace: git-auth - - name: prefetch-dependencies - params: - - name: input - value: $(params.prefetch-input) - - name: SOURCE_ARTIFACT - value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) - - name: ociStorage - value: $(params.output-image).prefetch - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - clone-repository - taskRef: - params: - - name: name - value: prefetch-dependencies-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:0503f9313dfe70e4defda88a7226ec91a74af42198dccfa3280397d965aa16d6 - - name: kind - value: task - resolver: bundles - workspaces: - - name: git-basic-auth - workspace: git-auth - - name: netrc - workspace: netrc - - name: build-container - params: - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: PRIVILEGED_NESTED - value: $(params.privileged-nested) - - name: SOURCE_URL - value: $(tasks.clone-repository.results.url) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - prefetch-dependencies - taskRef: - params: - - name: name - value: buildah-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:b990178b6bf21c353e1567fe1a66d1472f7f4a862f003cf8d5b31d1caa3c43d6 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-image-index - params: - - name: IMAGE - value: $(params.output-image) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: ALWAYS_BUILD_INDEX - value: $(params.build-image-index) - - name: IMAGES - value: - - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - runAfter: - - build-container - taskRef: - params: - - name: name - value: build-image-index - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:d94cad7f41be61074dd21c7dff26dab9217c3435a16f62813c1cb8382dd9aae6 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-source-image - params: - - name: BINARY_IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: BINARY_IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: source-build-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:5f9069a07a6dc16aae7a05adf49d2b6792815f3fabd116377578860743f4e0ec - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - input: $(params.build-source-image) - operator: in - values: - - "true" - - name: deprecated-base-image-check - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: deprecated-image-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clair-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clair-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: ecosystem-cert-preflight-checks - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: ecosystem-cert-preflight-checks - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-snyk-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-snyk-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clamav-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clamav-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-coverity-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - coverity-availability-check - taskRef: - params: - - name: name - value: sast-coverity-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - input: $(tasks.coverity-availability-check.results.STATUS) - operator: in - values: - - success - - name: coverity-availability-check - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: coverity-availability-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:36bcf1531b85c2c7d7b4382bc0a9c61b0501e2e54e84991b11b225bdec0e5928 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-shell-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-shell-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-unicode-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-unicode-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: apply-tags - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: apply-tags - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:f44be1bf0262471f2f503f5e19da5f0628dcaf968c86272a2ad6b4871e708448 - - name: kind - value: task - resolver: bundles - - name: push-dockerfile - params: - - name: IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: push-dockerfile-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:738e6e2108bee5b50309a37b54bc1adf8433ac63598dbb6830d6cb4ac65d9de6 - - name: kind - value: task - resolver: bundles - - name: rpms-signature-scan - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: rpms-signature-scan - - name: bundle - value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:3d9fbf2c0a732f736b050c293380b63c8c72ab38d0ef79fcf9d1b7d8fcd25efb - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - workspaces: - - name: git-auth - optional: true - - name: netrc - optional: true + - name: build-platforms + value: + - linux/x86_64 + - linux/arm64 + pipelineRef: + name: multiarch-push-pipeline taskRunTemplate: serviceAccountName: build-pipeline-odh-base-image-cpu-py312-ubi9 workspaces: From 731c89f50926c51cf8afe857705a7a3ad4d9872e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Fri, 31 Oct 2025 10:51:00 +0100 Subject: [PATCH 04/43] NO-JIRA: chore(docs/adr): document onboarding onto all possible test execution platforms for evaluation (#2627) Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- ...ible-test-execution-platforms-available.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/architecture/decisions/0002-onboard-onto-all-possible-test-execution-platforms-available.md diff --git a/docs/architecture/decisions/0002-onboard-onto-all-possible-test-execution-platforms-available.md b/docs/architecture/decisions/0002-onboard-onto-all-possible-test-execution-platforms-available.md new file mode 100644 index 0000000000..7519a4a4e3 --- /dev/null +++ b/docs/architecture/decisions/0002-onboard-onto-all-possible-test-execution-platforms-available.md @@ -0,0 +1,37 @@ +# 2. Onboard onto all possible test execution platforms available + +Date: 2025-10-29 + +## Status + +Accepted + +## Context + +We as the Notebooks team need to be responsible for the test execution on our code. +To do that, we need to explore options available and decide which ones to use. + +## Decision + +We will onboard and create some quick-start-style tests on all platforms available to us. +This will provide us with sufficient knowledge to talk to Red Hat DevTestOps team on equal footing about what we actually need. + +### Execution platforms to consider for onboarding + +* OpenShift CI (already onboarded) +* GitHub Actions (already onboarded) +* Konflux [E2E test execution](https://developers.redhat.com/articles/2024/10/28/ephemeral-openshift-clusters-konflux-ci-using-cluster-service-operator) +* Travis CI Partner Queue +* Packit.dev +* Testing-Farm.io nested virtualization +* +* Hydra trigger such as /test-e2e that will run something on Red Hat internal CI +* Machine under @jiridanek's desk in Brno +* Virtual machines under our management on ITUP.scale platform in Red Hat + +## Consequences + +This is related to [E2E Testing Platform Evaluation - Periodic Review #1389](https://github.com/opendatahub-io/notebooks/issues/1389). + +We'll need to maintain the test execution platforms we choose to use. +We'll need to eventually offboard from the platforms we decide not to use, to avoid confusion. From 8f2780b59b31c6dad626089770cb04b7406c264a Mon Sep 17 00:00:00 2001 From: atheo89 Date: Tue, 4 Nov 2025 14:22:53 +0100 Subject: [PATCH 05/43] Revert "Lock rocm and cuda minimal packages from internal aipcc index and set it available on runtime" This reverts commit 1899c394a9824e668fe23fd23ca245ba641881cf. --- Makefile | 24 - .../ubi9-python-3.12/Dockerfile.konflux.cuda | 7 +- .../ubi9-python-3.12/Dockerfile.konflux.rocm | 7 +- .../minimal/ubi9-python-3.12/cuda-pip.conf | 8 - .../minimal/ubi9-python-3.12/rocm-pip.conf | 8 - .../ubi9-python-3.12/uv.lock/pylock.cuda.toml | 604 ------------------ .../ubi9-python-3.12/uv.lock/pylock.rocm.toml | 562 ---------------- 7 files changed, 4 insertions(+), 1216 deletions(-) delete mode 100644 jupyter/minimal/ubi9-python-3.12/cuda-pip.conf delete mode 100644 jupyter/minimal/ubi9-python-3.12/rocm-pip.conf delete mode 100644 jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml delete mode 100644 jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml diff --git a/Makefile b/Makefile index b729bd33ad..44f59b4f93 100644 --- a/Makefile +++ b/Makefile @@ -517,27 +517,3 @@ test: @echo "Running quick static tests" uv run pytest -m 'not buildonlytest' @./scripts/check_dockerfile_alignment.sh - - -#This is temporary lock on the final implementation that will covers all the folders should apply smart logic for the locks -CPU_INDEX=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.0/cpu-ubi9/simple/ -CUDA_INDEX=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.0/cuda-ubi9/simple/ -ROCM_INDEX=https://console.redhat.com/api/pypi/public-rhai/rhoai/3.0/rocm-ubi9/simple/ - -lock-cuda: - uv pip compile \ - --python-platform=linux \ - jupyter/minimal/ubi9-python-3.12/pyproject.toml \ - --index-url=$(CUDA_INDEX) \ - --output-file=jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml \ - --python-version=3.12 - - -lock-rocm: - uv pip compile \ - --python-platform=linux \ - jupyter/minimal/ubi9-python-3.12/pyproject.toml \ - --index-url=$(ROCM_INDEX) \ - --output-file=jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml \ - --python-version=3.12 - diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda index 5449430961..3c741d9715 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda @@ -79,16 +79,13 @@ ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" USER 1001 -COPY ${MINIMAL_SOURCE_CODE}/uv.lock/pylock.cuda.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ - -# Makes available the internal python package index from aipcc on the container runtime -COPY ${MINIMAL_SOURCE_CODE}/cuda-pip.conf /etc/pip.conf +COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ # Install Python dependencies from requirements.txt file RUN echo "Installing softwares and packages" && \ # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.cuda.toml && \ + uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ # Disable announcement plugin of jupyterlab \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm index 36716c1a7e..0dfa9b3db8 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm @@ -67,16 +67,13 @@ ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" USER 1001 -COPY ${MINIMAL_SOURCE_CODE}/uv.lock/pylock.rocm.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ - -# Makes available the internal python package index from aipcc on the container runtime -COPY ${MINIMAL_SOURCE_CODE}/rocm-pip.conf /etc/pip.conf +COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ # Install Python dependencies from Pipfile.lock file RUN echo "Installing softwares and packages" && \ # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.rocm.toml && \ + uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ # Disable announcement plugin of jupyterlab \ jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ # Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \ diff --git a/jupyter/minimal/ubi9-python-3.12/cuda-pip.conf b/jupyter/minimal/ubi9-python-3.12/cuda-pip.conf deleted file mode 100644 index 3ba153d5b6..0000000000 --- a/jupyter/minimal/ubi9-python-3.12/cuda-pip.conf +++ /dev/null @@ -1,8 +0,0 @@ -[global] -index-url = https://console.redhat.com/api/pypi/public-rhai/rhoai/3.0/cuda-ubi9/simple/ - -# Optional fallback (if you *do* want PyPI as backup) -extra-index-url = https://pypi.org/simple/ - -[install] -trusted-host = console.redhat.com diff --git a/jupyter/minimal/ubi9-python-3.12/rocm-pip.conf b/jupyter/minimal/ubi9-python-3.12/rocm-pip.conf deleted file mode 100644 index 3ba153d5b6..0000000000 --- a/jupyter/minimal/ubi9-python-3.12/rocm-pip.conf +++ /dev/null @@ -1,8 +0,0 @@ -[global] -index-url = https://console.redhat.com/api/pypi/public-rhai/rhoai/3.0/cuda-ubi9/simple/ - -# Optional fallback (if you *do* want PyPI as backup) -extra-index-url = https://pypi.org/simple/ - -[install] -trusted-host = console.redhat.com diff --git a/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml b/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml deleted file mode 100644 index 6fad6083b4..0000000000 --- a/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml +++ /dev/null @@ -1,604 +0,0 @@ -# This file was autogenerated by uv via the following command: -# uv pip compile --python-platform=linux jupyter/minimal/ubi9-python-3.12/pyproject.toml --output-file=jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.cuda.toml --python-version=3.12 -lock-version = "1.0" -created-by = "uv" -requires-python = ">=3.12" - -[[packages]] -name = "aiohappyeyeballs" -version = "2.6.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/aiohappyeyeballs-2.6.1-8-py3-none-any.whl", hashes = { sha256 = "a8d5b4252b213865e06ca787f505f8955959aceae8230864e99002d5f9c97253" } }] - -[[packages]] -name = "aiohttp" -version = "3.13.1" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/aiohttp-3.13.1-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "e69aaef4103e1db0a89297b0325d056fd1bed2c740891eea6af22df29d5dde9e" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/aiohttp-3.13.1-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "c58b83d2efe698efbf1593952deed99b4e6b39e0f49d6b3020772dbd7166de8f" } }, -] - -[[packages]] -name = "aiosignal" -version = "1.4.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/aiosignal-1.4.0-8-py3-none-any.whl", hashes = { sha256 = "ed2c26cb3b0c8489d521688060a029e774a7508b4787d63e3e60287f61eeed60" } }] - -[[packages]] -name = "anyio" -version = "4.11.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/anyio-4.11.0-8-py3-none-any.whl", hashes = { sha256 = "35425ce0d2a2d623e30af7d0229dcc5f9a3e97f9df163dfa21c232afec14082a" } }] - -[[packages]] -name = "argon2-cffi" -version = "25.1.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/argon2_cffi-25.1.0-8-py3-none-any.whl", hashes = { sha256 = "08f7e838d6b46e3e150c706a1fd12628a640cc7a5493af14aae27b3a481fc625" } }] - -[[packages]] -name = "argon2-cffi-bindings" -version = "25.1.0" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/argon2_cffi_bindings-25.1.0-8-cp312-abi3-linux_aarch64.whl", hashes = { sha256 = "458af6cd03ac30f13e28437527029bb095bfa090dcd65c69b463ff46d15e1bcd" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/argon2_cffi_bindings-25.1.0-8-cp312-abi3-linux_x86_64.whl", hashes = { sha256 = "33392d72ff879cc98ccfa4b6519c98a85cba9c236785367d7fad66ef62331ab5" } }, -] - -[[packages]] -name = "arrow" -version = "1.3.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/arrow-1.3.0-8-py3-none-any.whl", hashes = { sha256 = "cb398119b6fe10efcffa70bbb7471d547c151398a05263ba0e1552a9990588be" } }] - -[[packages]] -name = "asttokens" -version = "3.0.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/asttokens-3.0.0-8-py3-none-any.whl", hashes = { sha256 = "71cd1f509505adf61cfb62e83f390d05760f2a1add76e9c7229f62ef65e28059" } }] - -[[packages]] -name = "async-lru" -version = "2.0.5" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/async_lru-2.0.5-8-py3-none-any.whl", hashes = { sha256 = "410e8e518985fb8ce849fe83e115f33f1d3db4d7a576fc2b7157c08fc04d35e9" } }] - -[[packages]] -name = "attrs" -version = "25.4.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/attrs-25.4.0-8-py3-none-any.whl", hashes = { sha256 = "5a1cc08bb88c20c7732b15f04b307ccca0c110eb35fb4a28013c72b3f68a703b" } }] - -[[packages]] -name = "babel" -version = "2.17.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/babel-2.17.0-8-py3-none-any.whl", hashes = { sha256 = "b9388e2d88d8ec3483e4f9644f365e2e70237b2d1233000cca08592d5fb444db" } }] - -[[packages]] -name = "beautifulsoup4" -version = "4.14.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/beautifulsoup4-4.14.2-8-py3-none-any.whl", hashes = { sha256 = "84b96cdfe59a81cddb0a77b2c697953e297309fa1038addd768bd35eded5a926" } }] - -[[packages]] -name = "bleach" -version = "6.2.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/bleach-6.2.0-8-py3-none-any.whl", hashes = { sha256 = "4d97914411cd135988468ab46718635406a345d6deb137ad0606f20a76602936" } }] - -[[packages]] -name = "certifi" -version = "2025.10.5" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/certifi-2025.10.5-8-py3-none-any.whl", hashes = { sha256 = "446369f557ba1ec0497be45bbd466075ae1858c98407cdd331607eb961e1ea7a" } }] - -[[packages]] -name = "cffi" -version = "2.0.0" -marker = "python_full_version < '3.14'" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/cffi-2.0.0-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "b1299cd730e9f0a4ef69f93c113f1b5956d470ec37199f8640511110c947157d" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/cffi-2.0.0-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "abccfc752856e08035310135e05e04b135db0b30447331b08a2e7211256f09e9" } }, -] - -[[packages]] -name = "charset-normalizer" -version = "3.4.4" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/charset_normalizer-3.4.4-8-py3-none-any.whl", hashes = { sha256 = "7ed70ac91a02e9070b375cf804522191fe78b7d5a276af53907ac5e8ec5ba8d8" } }] - -[[packages]] -name = "colorama" -version = "0.4.6" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/colorama-0.4.6-8-py2.py3-none-any.whl", hashes = { sha256 = "8db04440e6c85aef47246d23558a8aa81bb29b22fc2776528819919f2483250d" } }] - -[[packages]] -name = "comm" -version = "0.2.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/comm-0.2.3-8-py3-none-any.whl", hashes = { sha256 = "0b6fc004104320c03a1bf9f1261613fbc451ae8bb6a9d013721c0eb403d0c9eb" } }] - -[[packages]] -name = "debugpy" -version = "1.8.17" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/debugpy-1.8.17-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "adb89704005901e2f06af079ed820830f13a542e2569054c159984e27a85bd30" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/debugpy-1.8.17-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "17f88b9d8eeff81e3c4b382308dd269f8b0651ebc851534d29a33208c5a819c6" } }, -] - -[[packages]] -name = "decorator" -version = "5.2.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/decorator-5.2.1-8-py3-none-any.whl", hashes = { sha256 = "00948518ae0f9094c82f683d474ca702f4b1a4ef098d09b30a5c645de586287d" } }] - -[[packages]] -name = "defusedxml" -version = "0.7.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/defusedxml-0.7.1-8-py2.py3-none-any.whl", hashes = { sha256 = "3e34fec001869e971125507af855df9dab06bd5bd4d40a4b2955ef0b90c0821c" } }] - -[[packages]] -name = "executing" -version = "2.2.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/executing-2.2.1-8-py2.py3-none-any.whl", hashes = { sha256 = "f70f37dccebbc518bdd453620304ceb4dfc8bb0167e703b2413753416f85747b" } }] - -[[packages]] -name = "fastjsonschema" -version = "2.21.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/fastjsonschema-2.21.2-8-py3-none-any.whl", hashes = { sha256 = "404c045523a1f51a51c9c6b2c1292d3a81e7f7ed499cca49f057660850663e18" } }] - -[[packages]] -name = "fqdn" -version = "1.5.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/fqdn-1.5.1-8-py3-none-any.whl", hashes = { sha256 = "d27d850a7a03408f36678ab5b5313e776025048657c81fd0341ea5776de76650" } }] - -[[packages]] -name = "frozenlist" -version = "1.8.0" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/frozenlist-1.8.0-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "878599773633f430a14567c6a1369346c061bd85c193c93a5da16e6fcde25bde" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/frozenlist-1.8.0-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "9eb258ba0eb67e4c39e9c912aab6e82774c322d9b396f560bbfb733316ea39fe" } }, -] - -[[packages]] -name = "gitdb" -version = "4.0.12" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/gitdb-4.0.12-8-py3-none-any.whl", hashes = { sha256 = "a9bf940f82edad57d02f896d455f61a2317005e304866b34b70de4ef905a32cc" } }] - -[[packages]] -name = "gitpython" -version = "3.1.45" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/gitpython-3.1.45-8-py3-none-any.whl", hashes = { sha256 = "eb2513894e813f1cbe388c9c6b66e99d897f5ec5a4d5cb74b90f8b8122d4490d" } }] - -[[packages]] -name = "h11" -version = "0.16.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/h11-0.16.0-8-py3-none-any.whl", hashes = { sha256 = "fba81515258cd638cd279a37eb7e7cb5519ff1fec9e831f22388c1ac0a2d5b79" } }] - -[[packages]] -name = "httpcore" -version = "1.0.9" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/httpcore-1.0.9-8-py3-none-any.whl", hashes = { sha256 = "7681309a2e123b904763f96846b94d12a341166356cffd6b197049da51e4a22c" } }] - -[[packages]] -name = "httpx" -version = "0.28.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/httpx-0.28.1-8-py3-none-any.whl", hashes = { sha256 = "ef83138bcfcd94f1093487bfb2e18bb8616d496e752b6784441b2927baaea3cc" } }] - -[[packages]] -name = "idna" -version = "3.11" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/idna-3.11-8-py3-none-any.whl", hashes = { sha256 = "5a7e8ce4b9437bcf84ca0c0b1a6e35fdac09e8f6698bd5e776347facbc1e3599" } }] - -[[packages]] -name = "ipykernel" -version = "7.0.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/ipykernel-7.0.1-8-py3-none-any.whl", hashes = { sha256 = "c13292923b3599bb3f456891634aca6c89d5e0f9fb87ed38fecbd1df52e5e617" } }] - -[[packages]] -name = "ipython" -version = "9.6.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/ipython-9.6.0-8-py3-none-any.whl", hashes = { sha256 = "501b37f909d326a66e53dc07d6e915f856793adb30742f2a61ff718925b671b8" } }] - -[[packages]] -name = "ipython-pygments-lexers" -version = "1.1.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/ipython_pygments_lexers-1.1.1-8-py3-none-any.whl", hashes = { sha256 = "f493cc82ef1f75d3bdee48ce41478720aeb2acbf37e5c4188978ce2ab675ea7f" } }] - -[[packages]] -name = "isoduration" -version = "20.11.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/isoduration-20.11.0-8-py3-none-any.whl", hashes = { sha256 = "f4b1941d204b46a3a5ca0bf5afeed718171aa1ef8ca5980bcbd66dedc7728112" } }] - -[[packages]] -name = "jedi" -version = "0.19.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jedi-0.19.2-8-py2.py3-none-any.whl", hashes = { sha256 = "13d2c547bcff03daddb1e1c96668e6ef1ba006ec90ef89a923f10cd8d9a2cd56" } }] - -[[packages]] -name = "jinja2" -version = "3.1.6" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jinja2-3.1.6-8-py3-none-any.whl", hashes = { sha256 = "44862ece643b09a296408560eb88f4adc66bb0f5da5346633e91e39dc8a12857" } }] - -[[packages]] -name = "json5" -version = "0.12.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/json5-0.12.1-8-py3-none-any.whl", hashes = { sha256 = "5fc539aaa7abea4fd07e2b6055578bebf0eeee203911dfc5fd2b700bd20cfd0b" } }] - -[[packages]] -name = "jsonpointer" -version = "3.0.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jsonpointer-3.0.0-8-py2.py3-none-any.whl", hashes = { sha256 = "220b113ace952a67a872a3d2991f1b57bf687371d04356dc155038442041f747" } }] - -[[packages]] -name = "jsonschema" -version = "4.25.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jsonschema-4.25.1-8-py3-none-any.whl", hashes = { sha256 = "da86626c060580b27a67486e68d95a0bc4da43e965c84057fa5330ad5458b55c" } }] - -[[packages]] -name = "jsonschema-specifications" -version = "2025.9.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jsonschema_specifications-2025.9.1-8-py3-none-any.whl", hashes = { sha256 = "64268997c86da5a0ca49cdd20e5edd36b435655e2d1288e90e5b337b5f7805aa" } }] - -[[packages]] -name = "jupyter-client" -version = "8.6.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_client-8.6.3-8-py3-none-any.whl", hashes = { sha256 = "2fc9a4b9a9dffc34293a5e0570a85c891073ec02e345e29e90e5a968fa74ace8" } }] - -[[packages]] -name = "jupyter-core" -version = "5.9.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_core-5.9.1-8-py3-none-any.whl", hashes = { sha256 = "f9101879ff775c6e617bf80d64cbc9670605568b8b5cd89b24a5ae617dc4ef37" } }] - -[[packages]] -name = "jupyter-events" -version = "0.12.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_events-0.12.0-8-py3-none-any.whl", hashes = { sha256 = "8d1b2cc42f06d228c9cfdfec4a0b9a7c43d70aa0317174e90984a54e42df308d" } }] - -[[packages]] -name = "jupyter-lsp" -version = "2.3.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_lsp-2.3.0-8-py3-none-any.whl", hashes = { sha256 = "c943bef95d62f91f161466167f25bffe6e604789e4d2672e8288ce868e4e2ad9" } }] - -[[packages]] -name = "jupyter-server" -version = "2.17.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_server-2.17.0-8-py3-none-any.whl", hashes = { sha256 = "5f0b66e2c9abd62909b359ee9256f90d2ea0bd0454e02b65d6e48cd36f2b1023" } }] - -[[packages]] -name = "jupyter-server-mathjax" -version = "0.2.6" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_server_mathjax-0.2.6-py3-none-any.whl", hashes = { sha256 = "416389dde2010df46d5fbbb7adb087a5607111070af65a1445391040f2babb5e" } }] - -[[packages]] -name = "jupyter-server-proxy" -version = "4.4.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_server_proxy-4.4.0-8-py3-none-any.whl", hashes = { sha256 = "d369efe5beeacf5ba460a6a355c5dad9390f4d9d9750a6c9bcc46c1deed7a046" } }] - -[[packages]] -name = "jupyter-server-terminals" -version = "0.5.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyter_server_terminals-0.5.3-8-py3-none-any.whl", hashes = { sha256 = "d33381cb638a65ade4f5f5b1e8dbb8982194b81cd70fb3bf5b506d5448a5b33c" } }] - -[[packages]] -name = "jupyterlab" -version = "4.4.9" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyterlab-4.4.9-8-py3-none-any.whl", hashes = { sha256 = "72f8dc23cb847e48430527aba4cbcfe258a98aaa518cf0302ca5ec85295fc6ea" } }] - -[[packages]] -name = "jupyterlab-git" -version = "0.51.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyterlab_git-0.51.2-8-py3-none-any.whl", hashes = { sha256 = "d8a87a2075f4b4431b6e3095bc2e6880b2b0ec77c85a7c4d30207f74a1fd4c18" } }] - -[[packages]] -name = "jupyterlab-pygments" -version = "0.3.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyterlab_pygments-0.3.0-9-py3-none-any.whl", hashes = { sha256 = "3467784e2099b1e56615965f6b58e7b6ace6b3a1e716e4fe40852c755f13bdb6" } }] - -[[packages]] -name = "jupyterlab-server" -version = "2.27.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/jupyterlab_server-2.27.3-8-py3-none-any.whl", hashes = { sha256 = "51ba03c6e8a29e110d2ef832cd87c177de30ad84244f48364b63fc6906e82c8a" } }] - -[[packages]] -name = "lark" -version = "1.3.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/lark-1.3.0-8-py3-none-any.whl", hashes = { sha256 = "c0e8e5fa92b9ac64faaa9d10924c99f76535cf688277dfd50057bfde2cd014fd" } }] - -[[packages]] -name = "markupsafe" -version = "3.0.3" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/markupsafe-3.0.3-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "818c75c5a7bfe710e1fab5a50689aa25f9b1b976de6a5176c9ba6d46477f0628" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/markupsafe-3.0.3-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "4d7a65e71ac7605edd4acaf1e4e55d62e15c695528be2517a0566563b0290214" } }, -] - -[[packages]] -name = "matplotlib-inline" -version = "0.1.7" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/matplotlib_inline-0.1.7-8-py3-none-any.whl", hashes = { sha256 = "f5ab739619bd3aa1d354ea682c74cd59695133db38f6d9f3f096e2adf6670243" } }] - -[[packages]] -name = "mistune" -version = "3.1.4" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/mistune-3.1.4-8-py3-none-any.whl", hashes = { sha256 = "b99af5c067e3a331d461d1bb9e727b3dd81379a71b31ee66656d4fc249aa2d63" } }] - -[[packages]] -name = "multidict" -version = "6.7.0" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/multidict-6.7.0-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "a2ecb8445dc402f5451417fbbd9355e7506a35adb1e1b2dd3ac5de599ec6e70a" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/multidict-6.7.0-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "8fdf1d51551745edda4007ce4bfd593b2b43bb7f50e1edb32bfad69471a535e1" } }, -] - -[[packages]] -name = "nbclient" -version = "0.10.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nbclient-0.10.2-8-py3-none-any.whl", hashes = { sha256 = "136290c1ca87f605c2b9b9f8282511ae46dad21f04ddc42e8569b82186a6a974" } }] - -[[packages]] -name = "nbconvert" -version = "7.16.6" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nbconvert-7.16.6-8-py3-none-any.whl", hashes = { sha256 = "cec53ae7939c1150db78e7670f038354b99aacdf8918c14632cb9c353618fe9c" } }] - -[[packages]] -name = "nbdime" -version = "4.0.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nbdime-4.0.2-8-py3-none-any.whl", hashes = { sha256 = "0d20d33c9283ee4a2a32bc3ca4f279a7fc9da1934bcc983a2dbf0463cc2a3107" } }] - -[[packages]] -name = "nbformat" -version = "5.10.4" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nbformat-5.10.4-8-py3-none-any.whl", hashes = { sha256 = "6a2cc8da344d842f06bd7aec40d87316f7a83a52d640b5a43e4514a4a29325a3" } }] - -[[packages]] -name = "nbgitpuller" -version = "1.2.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nbgitpuller-1.2.2-8-py2.py3-none-any.whl", hashes = { sha256 = "8ced33b5658258abba83eb264ec706f5127d81d80125f9e8dec380d9551ba354" } }] - -[[packages]] -name = "nest-asyncio" -version = "1.6.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/nest_asyncio-1.6.0-8-py3-none-any.whl", hashes = { sha256 = "bf6bc796e039c57c80134acad2bd42f3e347e14f0810b3d6d838c066c550f859" } }] - -[[packages]] -name = "notebook-shim" -version = "0.2.4" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/notebook_shim-0.2.4-8-py3-none-any.whl", hashes = { sha256 = "ef82ab57c93cedc7f6229e21395719b8215cb5b662bceea02593c9a49198d7a4" } }] - -[[packages]] -name = "odh-jupyter-trash-cleanup" -version = "0.1.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/odh_jupyter_trash_cleanup-0.1.1-8-py3-none-any.whl", hashes = { sha256 = "0095fcc8172c78e9820b4b78c4cf3ab8832eb9dbe35bb698fbfc6d25e0d6e150" } }] - -[[packages]] -name = "packaging" -version = "25.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/packaging-25.0-8-py3-none-any.whl", hashes = { sha256 = "7d473c23d59e2ece8ba40e1995e6ab09786f16bb09e97fc4bbab783cf6c750ff" } }] - -[[packages]] -name = "pandocfilters" -version = "1.5.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pandocfilters-1.5.1-8-py2.py3-none-any.whl", hashes = { sha256 = "7c2e2aaa3f71230c3912328cfd3f57870db3d99446dc8be7e52cf747430e2e61" } }] - -[[packages]] -name = "parso" -version = "0.8.5" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/parso-0.8.5-8-py2.py3-none-any.whl", hashes = { sha256 = "51dd41d45bd53b3296e382cf515e1523fcd808ea1c1a2612f515986e77f0a4fd" } }] - -[[packages]] -name = "pexpect" -version = "4.9.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pexpect-4.9.0-8-py2.py3-none-any.whl", hashes = { sha256 = "cabcf8de55e57320396ff976aeb6053f71c9fcd9403edaf11b617a6d43c77454" } }] - -[[packages]] -name = "platformdirs" -version = "4.5.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/platformdirs-4.5.0-8-py3-none-any.whl", hashes = { sha256 = "f6fdf7d9301fd7fc3c15805deb4f8ca67c13c92d2d15d4415386784200b0b2f7" } }] - -[[packages]] -name = "prometheus-client" -version = "0.23.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/prometheus_client-0.23.1-8-py3-none-any.whl", hashes = { sha256 = "34c78d5f809cc8098a7a01996c5347be2dc3667f8c38c2bc8c7fafb3c340a61f" } }] - -[[packages]] -name = "prompt-toolkit" -version = "3.0.52" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/prompt_toolkit-3.0.52-8-py3-none-any.whl", hashes = { sha256 = "fdc2fd3ca26c3320114c38c6fbd0ea89c104aac9b47ce57bcce876d0956ccab1" } }] - -[[packages]] -name = "propcache" -version = "0.4.1" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/propcache-0.4.1-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "84fc66ac6596f7ba38f159f409c695d23a6fcaeba09d0425452e47b422743827" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/propcache-0.4.1-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "8399a22642cc045c7198f06324c5806c1a9afb1201f963173a36941f5f1d18c2" } }, -] - -[[packages]] -name = "psutil" -version = "7.1.0" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/psutil-7.1.0-9-cp36-abi3-linux_aarch64.whl", hashes = { sha256 = "f054a636be0a803a2cdc8380593fd3b4da4f7ae6e42358a7d6832bb51df60398" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/psutil-7.1.0-9-cp36-abi3-linux_x86_64.whl", hashes = { sha256 = "3a102a98e58461024392c169ba13527c94082b2b748df649db30edfe5e62ad5d" } }, -] - -[[packages]] -name = "ptyprocess" -version = "0.7.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/ptyprocess-0.7.0-8-py2.py3-none-any.whl", hashes = { sha256 = "e8a9826938b926f649b85398ebabae7b388329af7de297f23cdeea0044f37a3f" } }] - -[[packages]] -name = "pure-eval" -version = "0.2.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pure_eval-0.2.3-8-py3-none-any.whl", hashes = { sha256 = "50c3772b5e43de2b57c83ee7386f665684af256158665843dd52ac279cd9bf10" } }] - -[[packages]] -name = "pycparser" -version = "2.23" -marker = "python_full_version < '3.14' and implementation_name != 'PyPy'" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pycparser-2.23-8-py3-none-any.whl", hashes = { sha256 = "5d765f3e944d3e9ba1080558588f8e52861ffe39f01cb84c8bf9c4507c6f215b" } }] - -[[packages]] -name = "pygments" -version = "2.19.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pygments-2.19.2-8-py3-none-any.whl", hashes = { sha256 = "a412437581a9df0b86761b7e364435236594ff91aaef206a2027a4825773ca70" } }] - -[[packages]] -name = "python-dateutil" -version = "2.9.0.post0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/python_dateutil-2.9.0.post0-8-py2.py3-none-any.whl", hashes = { sha256 = "a9fe5057f8d9b853dcf5b845053f902d4e2f2ba08ecf3c9a83e887e767288895" } }] - -[[packages]] -name = "python-json-logger" -version = "4.0.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/python_json_logger-4.0.0-8-py3-none-any.whl", hashes = { sha256 = "73a96c5b5de1d5b7fb630f77b5d7a640fadf06fdefae90e348ca751ffb38532f" } }] - -[[packages]] -name = "pyyaml" -version = "6.0.3" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pyyaml-6.0.3-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "0f0c4fb803b84633b5f7464f064f4b4f09b80d468e04a243c2d09399aa2fd5f6" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pyyaml-6.0.3-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "72bd3b1a7f6bc575a139bcdf4482ed030ab8d4abc811dd21cf1d8ad5aa190df0" } }, -] - -[[packages]] -name = "pyzmq" -version = "27.1.0" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pyzmq-27.1.0-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "b850f32b6d8d49f1e33f1bd52154bd6da627996bfc31255f3b792d07009c9f9c" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/pyzmq-27.1.0-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "3fda2271433f99c80726e19a364b347e314bc24bd4480980a4b3f3fd10850b9a" } }, -] - -[[packages]] -name = "referencing" -version = "0.37.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/referencing-0.37.0-8-py3-none-any.whl", hashes = { sha256 = "6b9f76d76dcca1c39233e0fab4060aeafbc6f5deff0721612d969e04eb123675" } }] - -[[packages]] -name = "requests" -version = "2.32.5" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/requests-2.32.5-8-py3-none-any.whl", hashes = { sha256 = "04dd827577c257f28f22e499f30f8889fb4dd2aa701a66b71771bb9697a85ca0" } }] - -[[packages]] -name = "rfc3339-validator" -version = "0.1.4" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/rfc3339_validator-0.1.4-8-py2.py3-none-any.whl", hashes = { sha256 = "642e557f43a43084aa3015b2bf917f8c9f18c7a1b1e2d2005458c7cd82d6db4f" } }] - -[[packages]] -name = "rfc3986-validator" -version = "0.1.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/rfc3986_validator-0.1.1-8-py2.py3-none-any.whl", hashes = { sha256 = "42bb0270115f59d967d5a8ab1739b4bb265dbe1973e0b9e8ab61151b5b9a14c6" } }] - -[[packages]] -name = "rfc3987-syntax" -version = "1.1.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/rfc3987_syntax-1.1.0-8-py3-none-any.whl", hashes = { sha256 = "a13d59945950bb59f7ee4c36ca8fa3b6ffa3e3b0e9bbcca414d9cd15370e11aa" } }] - -[[packages]] -name = "rpds-py" -version = "0.27.1" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/rpds_py-0.27.1-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "e92dba81df0c9e679a54e4b7d0b496ce3496f2147aa7355f46f57ff76e85a1b9" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/rpds_py-0.27.1-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "0422ae7bb25eedc859af6f723e7b67234d9bc6e2537d6206a93f143803f4ef29" } }, -] - -[[packages]] -name = "send2trash" -version = "1.8.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/send2trash-1.8.3-8-py3-none-any.whl", hashes = { sha256 = "68135a966f47c0a60b30cdfd350a5a789c676644f0ba69124a666f1889f401a6" } }] - -[[packages]] -name = "setuptools" -version = "80.9.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/setuptools-80.9.0-8-py3-none-any.whl", hashes = { sha256 = "c9d1294239d456d3f336548960cb2e08a991a3b8bd54cbac8bdb6fd69924b175" } }] - -[[packages]] -name = "simpervisor" -version = "1.0.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/simpervisor-1.0.0-8-py3-none-any.whl", hashes = { sha256 = "d94b38adcd2736b5f0b1d6ae540d2f56b1d877cf83c1255df1557769577af566" } }] - -[[packages]] -name = "six" -version = "1.17.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/six-1.17.0-8-py2.py3-none-any.whl", hashes = { sha256 = "3611f16cbb03bf7ce78eb1bb259f9ef1a0852f2fd62ab0e288a82a02289885aa" } }] - -[[packages]] -name = "smmap" -version = "5.0.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/smmap-5.0.2-8-py3-none-any.whl", hashes = { sha256 = "31f2ca9fb829c9ef74fb99e8471dba111fa21b270b0e3085f247f1ddfd6a23d1" } }] - -[[packages]] -name = "sniffio" -version = "1.3.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/sniffio-1.3.1-8-py3-none-any.whl", hashes = { sha256 = "861fe9d25e27d915a44b1e267e7802ff073e862671643853cc342be08e919912" } }] - -[[packages]] -name = "soupsieve" -version = "2.8" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/soupsieve-2.8-8-py3-none-any.whl", hashes = { sha256 = "c350383e0589f4d5bf597a0f31aabbd70f3ff97fdeb850e7e9390f418199d978" } }] - -[[packages]] -name = "stack-data" -version = "0.6.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/stack_data-0.6.3-8-py3-none-any.whl", hashes = { sha256 = "00201e73454dc411eac8c6ca7d5e90b875e2d996b2965ed14080ce755ef1598c" } }] - -[[packages]] -name = "terminado" -version = "0.18.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/terminado-0.18.1-8-py3-none-any.whl", hashes = { sha256 = "45978b8d0366a7a59d18da8a8d3f606d2131568252578a6252bbbaaadd27388f" } }] - -[[packages]] -name = "tinycss2" -version = "1.4.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/tinycss2-1.4.0-8-py3-none-any.whl", hashes = { sha256 = "39493ba9fdaa13259552e708b9c111bcf6dd2c97e148370648e64914cd75eb07" } }] - -[[packages]] -name = "tornado" -version = "6.5.2" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/tornado-6.5.2-8-cp39-abi3-linux_aarch64.whl", hashes = { sha256 = "c9087ff89e21f0389e5a372213a53e37d470809782ba93aa6e27e9bbc4dc6f18" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/tornado-6.5.2-8-cp39-abi3-linux_x86_64.whl", hashes = { sha256 = "9540b77721afaa55a56be9d244e480fc0b73d54b0babc7892ac4ee42e1822fde" } }, -] - -[[packages]] -name = "traitlets" -version = "5.14.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/traitlets-5.14.3-8-py3-none-any.whl", hashes = { sha256 = "c4f6eb0e5d1ed749419fcbe1f41c1dcde3c989751717c6a063b59102c41cc639" } }] - -[[packages]] -name = "types-python-dateutil" -version = "2.9.0.20251008" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/types_python_dateutil-2.9.0.20251008-8-py3-none-any.whl", hashes = { sha256 = "bf1ae5bb144efe02cbff82f87c4830b82e66febc927ff9a611654fe90a95410a" } }] - -[[packages]] -name = "typing-extensions" -version = "4.15.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/typing_extensions-4.15.0-8-py3-none-any.whl", hashes = { sha256 = "1d0e52b774a55f4cc68b17e2449eeccff8e66b3fbfae946373ae8be06897d202" } }] - -[[packages]] -name = "uri-template" -version = "1.3.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/uri_template-1.3.0-8-py3-none-any.whl", hashes = { sha256 = "4fb1fde33d50346e8cdeda0a4559ebfc7a63e63d992bb76004740dfd4f7e9021" } }] - -[[packages]] -name = "urllib3" -version = "2.5.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/urllib3-2.5.0-8-py3-none-any.whl", hashes = { sha256 = "62eab27a24e00294123c2ec3e9f227ad2a9bcbb5f5bdb1facc33880a7d998dda" } }] - -[[packages]] -name = "wcwidth" -version = "0.2.14" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/wcwidth-0.2.14-8-py3-none-any.whl", hashes = { sha256 = "4394a3482b54d6ea94dc3b19ac5c2c9192c523d5a8c61819aac84c33e3c9e6dc" } }] - -[[packages]] -name = "webcolors" -version = "24.11.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/webcolors-24.11.1-8-py3-none-any.whl", hashes = { sha256 = "bafab3a15020019faee1c4c2f6e8c0c254099473528cc5704bcb23ef68d63534" } }] - -[[packages]] -name = "webencodings" -version = "0.5.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/webencodings-0.5.1-8-py2.py3-none-any.whl", hashes = { sha256 = "bde12ec6e1a7137892465933b46dc0ac93ed1852f03f0427f4fecd2fbc6564cc" } }] - -[[packages]] -name = "websocket-client" -version = "1.9.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/websocket_client-1.9.0-8-py3-none-any.whl", hashes = { sha256 = "210b54c64b4fab5dcb8fb841f9390caf216e87ae31502dd12ac91d5bcc18ddb0" } }] - -[[packages]] -name = "wheel" -version = "0.45.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/wheel-0.45.1-8-py3-none-any.whl", hashes = { sha256 = "de09a773a3d009c9b2f8768dd6ed1c65d2b622419fc27bce1efb285fd4cb83f2" } }] - -[[packages]] -name = "yarl" -version = "1.22.0" -wheels = [ - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/yarl-1.22.0-8-cp312-cp312-linux_aarch64.whl", hashes = { sha256 = "64e5c3c3900c8d5717abcd28f8adbd557724342c0b758966eab1f7038ea2836d" } }, - { url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/cuda-ubi9/yarl-1.22.0-8-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "21cb00f1fc5c7345f7808987f88c6ad3809b3c8bb12b5182ea66eab409765669" } }, -] diff --git a/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml b/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml deleted file mode 100644 index ce841bc063..0000000000 --- a/jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml +++ /dev/null @@ -1,562 +0,0 @@ -# This file was autogenerated by uv via the following command: -# uv pip compile --python-platform=linux jupyter/minimal/ubi9-python-3.12/pyproject.toml --output-file=jupyter/minimal/ubi9-python-3.12/uv.lock/pylock.rocm.toml --python-version=3.12 -lock-version = "1.0" -created-by = "uv" -requires-python = ">=3.12" - -[[packages]] -name = "aiohappyeyeballs" -version = "2.6.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/aiohappyeyeballs-2.6.1-10-py3-none-any.whl", hashes = { sha256 = "4b4b6a1fbd0c97c0f8e6ca956c472732cd38770181200fdd454b907a86da2f45" } }] - -[[packages]] -name = "aiohttp" -version = "3.13.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/aiohttp-3.13.1-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "e1b9fce3f4e0be766b10e35e5d01ae2a0ef3c5d839c547ebec4e5e4ea77b1a19" } }] - -[[packages]] -name = "aiosignal" -version = "1.4.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/aiosignal-1.4.0-10-py3-none-any.whl", hashes = { sha256 = "7c29bde462af06651a8b5f02ef6ca2523cd4739db59e1940efc667e4a1e2523c" } }] - -[[packages]] -name = "anyio" -version = "4.11.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/anyio-4.11.0-10-py3-none-any.whl", hashes = { sha256 = "b8bc3e8d12e715d7dd3f67a14a09371d14d2c64db8d67e5049b13dc6f51b062a" } }] - -[[packages]] -name = "argon2-cffi" -version = "25.1.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/argon2_cffi-25.1.0-10-py3-none-any.whl", hashes = { sha256 = "913ae65c0d70cc73b800e16b22b9d1991ac0920f5e0a8a4243dfc7ec9f4baba8" } }] - -[[packages]] -name = "argon2-cffi-bindings" -version = "25.1.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/argon2_cffi_bindings-25.1.0-10-cp312-abi3-linux_x86_64.whl", hashes = { sha256 = "85c2befcc106932ca5d8b7ade86e108d2b9e365f5818ae64f0c6634a86863d2d" } }] - -[[packages]] -name = "arrow" -version = "1.3.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/arrow-1.3.0-10-py3-none-any.whl", hashes = { sha256 = "8bb2694062e9ec573773882a96dfaa716b34218730267e7e76006ef2eceb1864" } }] - -[[packages]] -name = "asttokens" -version = "3.0.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/asttokens-3.0.0-10-py3-none-any.whl", hashes = { sha256 = "ee080ad2e8b8931105a90b321379806beb860bd0d988791f16bda83a572ef3d2" } }] - -[[packages]] -name = "async-lru" -version = "2.0.5" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/async_lru-2.0.5-10-py3-none-any.whl", hashes = { sha256 = "4b92154cd60557b4a430f2799b5eabd3e382f3cf641e91dafb895e5e7f776270" } }] - -[[packages]] -name = "attrs" -version = "25.4.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/attrs-25.4.0-10-py3-none-any.whl", hashes = { sha256 = "e08a2da9bfa37e546a9665ea6c8e361b20e8d87398498981ae41d52faacd81f5" } }] - -[[packages]] -name = "babel" -version = "2.17.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/babel-2.17.0-10-py3-none-any.whl", hashes = { sha256 = "33ba092d26b510fba90ba1a8679fe02949823776889262f3c25b07d76422a390" } }] - -[[packages]] -name = "beautifulsoup4" -version = "4.14.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/beautifulsoup4-4.14.2-10-py3-none-any.whl", hashes = { sha256 = "ed621dd3754937b829477876993dd7702cf285516d70c297b429749d39414c84" } }] - -[[packages]] -name = "bleach" -version = "6.2.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/bleach-6.2.0-10-py3-none-any.whl", hashes = { sha256 = "ee096a950668d3b5709189611905018f4ab62c66c8a1283e879fe3335f086803" } }] - -[[packages]] -name = "certifi" -version = "2025.10.5" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/certifi-2025.10.5-10-py3-none-any.whl", hashes = { sha256 = "a5450d1f81604725c5e5343e35f8dc8a1101153c82f85db7db79a6038aa626e6" } }] - -[[packages]] -name = "cffi" -version = "2.0.0" -marker = "python_full_version < '3.14'" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/cffi-2.0.0-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "6b5a0f09ea049ce7be6baae0d811b6e8618d5b829a46e642166641bb29e99384" } }] - -[[packages]] -name = "charset-normalizer" -version = "3.4.4" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/charset_normalizer-3.4.4-10-py3-none-any.whl", hashes = { sha256 = "cd618da36a26adbc7893cd316228d5e2f46176d0ecc911fb179bda7fa0afb49f" } }] - -[[packages]] -name = "colorama" -version = "0.4.6" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/colorama-0.4.6-10-py2.py3-none-any.whl", hashes = { sha256 = "a92c6895123fbc15859d556c135fa29c51add99b80ca65e16158064046830667" } }] - -[[packages]] -name = "comm" -version = "0.2.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/comm-0.2.3-10-py3-none-any.whl", hashes = { sha256 = "1968c2e8b52e944620c3a753772eff74261ab4ae4e5c6e1bfd57b873cffac488" } }] - -[[packages]] -name = "debugpy" -version = "1.8.17" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/debugpy-1.8.17-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "b152a1c2284ba1de618a195247f99ecbcec1180aecb89e2afa704db68b368ba5" } }] - -[[packages]] -name = "decorator" -version = "5.2.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/decorator-5.2.1-10-py3-none-any.whl", hashes = { sha256 = "c5a6d4bb9d584f4f19cccd0cf81f74a078b980dc9e0f6a0dc447944b4d0f117d" } }] - -[[packages]] -name = "defusedxml" -version = "0.7.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/defusedxml-0.7.1-10-py2.py3-none-any.whl", hashes = { sha256 = "4e7ca9c9443b124215b5c866082a6bbf368d72d3f88e697f50883da4994a013e" } }] - -[[packages]] -name = "executing" -version = "2.2.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/executing-2.2.1-10-py2.py3-none-any.whl", hashes = { sha256 = "a77f91b991f83bbc8e51933479550c729a4530912a745ea7093051f1ae396c08" } }] - -[[packages]] -name = "fastjsonschema" -version = "2.21.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/fastjsonschema-2.21.2-10-py3-none-any.whl", hashes = { sha256 = "55199eecb72c2e1f3512b69acb30ad07aa246a9fc60f218649bbf1e75b919930" } }] - -[[packages]] -name = "fqdn" -version = "1.5.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/fqdn-1.5.1-10-py3-none-any.whl", hashes = { sha256 = "c8a7a278c41617aff07d234e703672704a813c84c3a358c37d0d35ad66af11a8" } }] - -[[packages]] -name = "frozenlist" -version = "1.8.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/frozenlist-1.8.0-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "24f703b97f7bcc58a45abc8ea3d0cc37de790eeb0b7df3ed662fb32862eb2642" } }] - -[[packages]] -name = "gitdb" -version = "4.0.12" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/gitdb-4.0.12-10-py3-none-any.whl", hashes = { sha256 = "7f10c587d72b63ecbfa9f9d80974d66456a46191d73583ab55c6294bb49e3fc2" } }] - -[[packages]] -name = "gitpython" -version = "3.1.45" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/gitpython-3.1.45-10-py3-none-any.whl", hashes = { sha256 = "ed0a58eac8bc783ed97f6121dbfab4504642bbb1d777284758f62fe8d90cd80e" } }] - -[[packages]] -name = "h11" -version = "0.16.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/h11-0.16.0-10-py3-none-any.whl", hashes = { sha256 = "0a63b2c6c40d9a43e912495a4ec22a08efc5f7a1ebb19a1c776b37944ad10edb" } }] - -[[packages]] -name = "httpcore" -version = "1.0.9" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/httpcore-1.0.9-10-py3-none-any.whl", hashes = { sha256 = "25af2f7d203a0cb2e38b7cd1a283f9d8b1381dc2cae4a9a0ec19015c44019faa" } }] - -[[packages]] -name = "httpx" -version = "0.28.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/httpx-0.28.1-10-py3-none-any.whl", hashes = { sha256 = "cf3ac8f1aefa8a9df9ff0ef020d0cab0009a09c35b316bad30081a693b028287" } }] - -[[packages]] -name = "idna" -version = "3.11" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/idna-3.11-10-py3-none-any.whl", hashes = { sha256 = "797548635d83b4a6af114859b2e938e0d71f2b9446a4f2ae9672b26a2ee880bb" } }] - -[[packages]] -name = "ipykernel" -version = "7.0.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/ipykernel-7.0.1-10-py3-none-any.whl", hashes = { sha256 = "279a4913ad2c3e3fbb70c7ee39e856da30bfad39d3ca6dd3f89a60997fd348cc" } }] - -[[packages]] -name = "ipython" -version = "9.6.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/ipython-9.6.0-10-py3-none-any.whl", hashes = { sha256 = "fefee2ebf8e393756dc202ad62f0c4e843dad76a634cde00e61c22c38c2068c9" } }] - -[[packages]] -name = "ipython-pygments-lexers" -version = "1.1.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/ipython_pygments_lexers-1.1.1-10-py3-none-any.whl", hashes = { sha256 = "751a738eacfa7aaa54ce7785c8012f462b14bedb68b7bd159265b71885ec7648" } }] - -[[packages]] -name = "isoduration" -version = "20.11.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/isoduration-20.11.0-10-py3-none-any.whl", hashes = { sha256 = "313dfc02c2248cddd3e1aaad74c87f92bde68f4a33bb7976a9003fab79c4ed0f" } }] - -[[packages]] -name = "jedi" -version = "0.19.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jedi-0.19.2-10-py2.py3-none-any.whl", hashes = { sha256 = "4d00ca8ce39927a4d67ebe352d440f09b607f65e3a1d205fda77636ec71a879e" } }] - -[[packages]] -name = "jinja2" -version = "3.1.6" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jinja2-3.1.6-10-py3-none-any.whl", hashes = { sha256 = "f52688f0d87d2337a216a1fab6deb6330b3fbcba07f8fb6a65c787a3a05b3f02" } }] - -[[packages]] -name = "json5" -version = "0.12.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/json5-0.12.1-10-py3-none-any.whl", hashes = { sha256 = "f2059bc3449085eebd4d52349c2776e5765f6d68b15a28889e53251424825c15" } }] - -[[packages]] -name = "jsonpointer" -version = "3.0.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jsonpointer-3.0.0-10-py2.py3-none-any.whl", hashes = { sha256 = "bfbbe158623f46ae4478872c587e4964402cc725feda0f6a74724df17072a919" } }] - -[[packages]] -name = "jsonschema" -version = "4.25.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jsonschema-4.25.1-10-py3-none-any.whl", hashes = { sha256 = "07a553a29223fc067593ae1c0e2f05715c2f2b4ccfe11507a739fd9489bd8366" } }] - -[[packages]] -name = "jsonschema-specifications" -version = "2025.9.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jsonschema_specifications-2025.9.1-10-py3-none-any.whl", hashes = { sha256 = "d9e791dc28fe485d00e121cb5fcf98aa31420c8d2054d96fd6962129a6f61170" } }] - -[[packages]] -name = "jupyter-client" -version = "8.6.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_client-8.6.3-10-py3-none-any.whl", hashes = { sha256 = "6cb6b5c6fd173a62e6c530fb6ac19eef5d65d3eb0f2e9f60d37e2734add2cc73" } }] - -[[packages]] -name = "jupyter-core" -version = "5.9.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_core-5.9.1-10-py3-none-any.whl", hashes = { sha256 = "b3b0bbe09f786809f35f9e456e133bf9a79af7d31582efa4f29f84bcb6bcfd9e" } }] - -[[packages]] -name = "jupyter-events" -version = "0.12.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_events-0.12.0-10-py3-none-any.whl", hashes = { sha256 = "31c55feb93fd923ebe1139417436de964df828d99222fb03b48d66c9ed98eb7a" } }] - -[[packages]] -name = "jupyter-lsp" -version = "2.3.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_lsp-2.3.0-10-py3-none-any.whl", hashes = { sha256 = "b21d2153b374863782164a33a47ece5560346a4d2a4b918922738ee42ee58d34" } }] - -[[packages]] -name = "jupyter-server" -version = "2.17.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_server-2.17.0-10-py3-none-any.whl", hashes = { sha256 = "893e346dfdc523c3148b8acde5c3ad3116c6b3fdcee218ee4c0a0164c5919150" } }] - -[[packages]] -name = "jupyter-server-mathjax" -version = "0.2.6" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_server_mathjax-0.2.6-py3-none-any.whl", hashes = { sha256 = "416389dde2010df46d5fbbb7adb087a5607111070af65a1445391040f2babb5e" } }] - -[[packages]] -name = "jupyter-server-proxy" -version = "4.4.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_server_proxy-4.4.0-10-py3-none-any.whl", hashes = { sha256 = "edecd75e0f8171722b67ce668a43812781e179e8d120eedb713ee16cb3fa0722" } }] - -[[packages]] -name = "jupyter-server-terminals" -version = "0.5.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyter_server_terminals-0.5.3-10-py3-none-any.whl", hashes = { sha256 = "881439615bb992112f5c0bcdd3de6077a335fedf7c907e74db2bb340498e9244" } }] - -[[packages]] -name = "jupyterlab" -version = "4.4.9" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyterlab-4.4.9-10-py3-none-any.whl", hashes = { sha256 = "fd7cfeb8b192fad9857dd80fefead1505914f79fcba7f91fd175445f969456c0" } }] - -[[packages]] -name = "jupyterlab-git" -version = "0.51.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyterlab_git-0.51.2-10-py3-none-any.whl", hashes = { sha256 = "02c819137a3ad75935f7925d9f29a83bc275e117eba078f07bf97d45ad30a279" } }] - -[[packages]] -name = "jupyterlab-pygments" -version = "0.3.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyterlab_pygments-0.3.0-11-py3-none-any.whl", hashes = { sha256 = "f3c20b64a0a650bc0710a8590188662d7a7089ccdf5dd127e36ad8d6b092ebfa" } }] - -[[packages]] -name = "jupyterlab-server" -version = "2.27.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/jupyterlab_server-2.27.3-10-py3-none-any.whl", hashes = { sha256 = "e915829e5451496bdfda47f6b8db34044eee28102ce23ac1ebb5680717ea99a9" } }] - -[[packages]] -name = "lark" -version = "1.3.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/lark-1.3.0-10-py3-none-any.whl", hashes = { sha256 = "db7c291c66a9616bee5edb997dc30725d8c574cb467599748f3b0a24dce7957e" } }] - -[[packages]] -name = "markupsafe" -version = "3.0.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/markupsafe-3.0.3-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "98004de1ddc9affee64ed7f1071920df54a63157e05427f8ab2d8accdbe5ec94" } }] - -[[packages]] -name = "matplotlib-inline" -version = "0.1.7" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/matplotlib_inline-0.1.7-10-py3-none-any.whl", hashes = { sha256 = "4726020ddecddf2d43d90f6dac0ea0bb06792c8d48ff737dc870cb33402cefb5" } }] - -[[packages]] -name = "mistune" -version = "3.1.4" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/mistune-3.1.4-10-py3-none-any.whl", hashes = { sha256 = "05a73f4bd90199de04b27a03d9139ca9820fe34eb473e652905096397f979bfd" } }] - -[[packages]] -name = "multidict" -version = "6.7.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/multidict-6.7.0-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "7e9005e96fe97ab54d97628ee54fde79b83192f308cd4a090bbaa1229f257f8d" } }] - -[[packages]] -name = "nbclient" -version = "0.10.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nbclient-0.10.2-10-py3-none-any.whl", hashes = { sha256 = "fefbbbba801aac2644087f8fdfe65ba832ed2b0a528b703f83eef6dbbe82c261" } }] - -[[packages]] -name = "nbconvert" -version = "7.16.6" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nbconvert-7.16.6-10-py3-none-any.whl", hashes = { sha256 = "ac9c54d47096a5ac843bb7f12b7465cffbee4ea769db0f7294c229c7ca2ccc8c" } }] - -[[packages]] -name = "nbdime" -version = "4.0.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nbdime-4.0.2-10-py3-none-any.whl", hashes = { sha256 = "efe199ccd322e4c7426a9fbb486279be5b7a9acb023023c264c77dcfdcd9a4cc" } }] - -[[packages]] -name = "nbformat" -version = "5.10.4" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nbformat-5.10.4-10-py3-none-any.whl", hashes = { sha256 = "3986af0aee8ac00dfe5acc8267cec321e392de6b3dbb25773894d12ecc315e5b" } }] - -[[packages]] -name = "nbgitpuller" -version = "1.2.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nbgitpuller-1.2.2-10-py2.py3-none-any.whl", hashes = { sha256 = "3de18267ef1fecca0b1d90a3e4175e647c9ad6115ccc8dc763adc2440f3cda93" } }] - -[[packages]] -name = "nest-asyncio" -version = "1.6.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/nest_asyncio-1.6.0-10-py3-none-any.whl", hashes = { sha256 = "a0f21996eb00941f69e8d9b5fb90aaae1090ee5ea462e6994f837827972687a7" } }] - -[[packages]] -name = "notebook-shim" -version = "0.2.4" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/notebook_shim-0.2.4-10-py3-none-any.whl", hashes = { sha256 = "551b993a097a5b9aecdde90ee9d0e11534ca0b58eb27247923b21b11c0c75e7f" } }] - -[[packages]] -name = "odh-jupyter-trash-cleanup" -version = "0.1.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/odh_jupyter_trash_cleanup-0.1.1-10-py3-none-any.whl", hashes = { sha256 = "b2317483ff4601ad3dd023b01d3a912babd6769a3f7f69447acd4dd2c33ca16d" } }] - -[[packages]] -name = "packaging" -version = "25.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/packaging-25.0-10-py3-none-any.whl", hashes = { sha256 = "099add6fcea96647be5f0671d87e63f92bf7b617c98bd6a7be2446f4bec7e8ba" } }] - -[[packages]] -name = "pandocfilters" -version = "1.5.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pandocfilters-1.5.1-10-py2.py3-none-any.whl", hashes = { sha256 = "795ec406c6165f3b4316ef3930151b12f93179fb85d6cf5349c4745ee488b572" } }] - -[[packages]] -name = "parso" -version = "0.8.5" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/parso-0.8.5-10-py2.py3-none-any.whl", hashes = { sha256 = "b5fc8213db192f5bc37bde959fa4561d8b924a0badc61171ed490e954e9e1df4" } }] - -[[packages]] -name = "pexpect" -version = "4.9.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pexpect-4.9.0-10-py2.py3-none-any.whl", hashes = { sha256 = "1c05c62419d81fecf8d36d1ea0c740d29809f28262692effcb5157d00d132153" } }] - -[[packages]] -name = "platformdirs" -version = "4.5.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/platformdirs-4.5.0-10-py3-none-any.whl", hashes = { sha256 = "f21cbea3bec64bfad58416601724c919658c353aebc3e0f11e4fcf0ac16c947f" } }] - -[[packages]] -name = "prometheus-client" -version = "0.23.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/prometheus_client-0.23.1-10-py3-none-any.whl", hashes = { sha256 = "6dd4379f4063bcb9dd22e0bc8402e243d452bc7ecbfaa49001bc6984ca5f15e1" } }] - -[[packages]] -name = "prompt-toolkit" -version = "3.0.52" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/prompt_toolkit-3.0.52-10-py3-none-any.whl", hashes = { sha256 = "4166e2d2d256416ab13c9b3d914b2f49a5022463b503c3445ee1a9da0de00453" } }] - -[[packages]] -name = "propcache" -version = "0.4.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/propcache-0.4.1-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "79b2a7836b442f64bb7984e4b04cd73e5dc3bf5789b061035245c5fe848d4585" } }] - -[[packages]] -name = "psutil" -version = "7.1.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/psutil-7.1.0-11-cp36-abi3-linux_x86_64.whl", hashes = { sha256 = "3051e89056442c83379178a84f54f248dc2cd828f5ba4fec44d7b062dbd1682e" } }] - -[[packages]] -name = "ptyprocess" -version = "0.7.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/ptyprocess-0.7.0-10-py2.py3-none-any.whl", hashes = { sha256 = "83a9f8945b3698e5465f8007cd8dd61517076d21f87ca3c698710af991df81c4" } }] - -[[packages]] -name = "pure-eval" -version = "0.2.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pure_eval-0.2.3-10-py3-none-any.whl", hashes = { sha256 = "cccae442d9d1fb303b7959fd2a0ae68ec284540880df0a551be473f13932ed69" } }] - -[[packages]] -name = "pycparser" -version = "2.23" -marker = "python_full_version < '3.14' and implementation_name != 'PyPy'" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pycparser-2.23-10-py3-none-any.whl", hashes = { sha256 = "37c69d5bf2a34d769647dddcb6931291fbf9d7e4eb87240f382525c9f45c33f3" } }] - -[[packages]] -name = "pygments" -version = "2.19.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pygments-2.19.2-10-py3-none-any.whl", hashes = { sha256 = "055ee7d2076d27e5bb3a4f645c5c67f85f9e1d29026cc5aa2106ee6132448e35" } }] - -[[packages]] -name = "python-dateutil" -version = "2.9.0.post0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/python_dateutil-2.9.0.post0-10-py2.py3-none-any.whl", hashes = { sha256 = "f863ec121b045f9439494c624e6c1bb159773bf0043b20a583606c452b266299" } }] - -[[packages]] -name = "python-json-logger" -version = "4.0.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/python_json_logger-4.0.0-10-py3-none-any.whl", hashes = { sha256 = "09cdd727cda12a6c52f4af3f1ae69eee6a5be1d4b77b331a872a6b43be94744f" } }] - -[[packages]] -name = "pyyaml" -version = "6.0.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pyyaml-6.0.3-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "0431bbf4c753792a45966b26dc0b2e4ea13deaa2abb8fa9bd33b4b0b05b61cef" } }] - -[[packages]] -name = "pyzmq" -version = "27.1.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/pyzmq-27.1.0-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "2f6a776faf1399c55ba895b09e74ca188185a8fa6d438835f76aee3c9e07f557" } }] - -[[packages]] -name = "referencing" -version = "0.37.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/referencing-0.37.0-10-py3-none-any.whl", hashes = { sha256 = "12673e7119e24319279ff9fecb6362f42fb5826f1a543995d9d64bad5a72f9c9" } }] - -[[packages]] -name = "requests" -version = "2.32.5" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/requests-2.32.5-10-py3-none-any.whl", hashes = { sha256 = "557f15a3a5538f02a0395b7c8a6ac94cc04c3fd0f01b15bfd913980d4483346a" } }] - -[[packages]] -name = "rfc3339-validator" -version = "0.1.4" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/rfc3339_validator-0.1.4-10-py2.py3-none-any.whl", hashes = { sha256 = "8ef066ddc7f8b606bf0e5bea93a5c75de8cb6f470ab4a96823f5b4607f39d2db" } }] - -[[packages]] -name = "rfc3986-validator" -version = "0.1.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/rfc3986_validator-0.1.1-10-py2.py3-none-any.whl", hashes = { sha256 = "a9e42443f6946098c0a5c8b4b31cd37cfd1677ef4b5e7ada4cabc73c3401cc8c" } }] - -[[packages]] -name = "rfc3987-syntax" -version = "1.1.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/rfc3987_syntax-1.1.0-10-py3-none-any.whl", hashes = { sha256 = "2514aca7ab8f96e43239bf1eee72785ad2f01b79fb47902308f749ddbb4ba35f" } }] - -[[packages]] -name = "rpds-py" -version = "0.27.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/rpds_py-0.27.1-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "e36407b1898388ff3f0645197583729b380603995e5bc630b991d970c68e2468" } }] - -[[packages]] -name = "send2trash" -version = "1.8.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/send2trash-1.8.3-10-py3-none-any.whl", hashes = { sha256 = "acb078834c46f1fb0f4e352c057cc8bb93b8c1a97c983b625a53dded78c84248" } }] - -[[packages]] -name = "setuptools" -version = "80.9.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/setuptools-80.9.0-10-py3-none-any.whl", hashes = { sha256 = "08de7e4f4d5faf0fad68838d115213a4594045e541487ec49ddf09780d28fd21" } }] - -[[packages]] -name = "simpervisor" -version = "1.0.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/simpervisor-1.0.0-10-py3-none-any.whl", hashes = { sha256 = "f2e6216ba84f8eb91897fd37dc2b1469e7a4c171a580ffb482448fb29e51bf4a" } }] - -[[packages]] -name = "six" -version = "1.17.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/six-1.17.0-10-py2.py3-none-any.whl", hashes = { sha256 = "a45a0a812543f786c26cedf2180f5c75b99865459fdefa4591c4ef0bc65421e2" } }] - -[[packages]] -name = "smmap" -version = "5.0.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/smmap-5.0.2-10-py3-none-any.whl", hashes = { sha256 = "68db55c055a943d88635079e7da04d1f693e3beec476c3b06a7d014f1641ef23" } }] - -[[packages]] -name = "sniffio" -version = "1.3.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/sniffio-1.3.1-10-py3-none-any.whl", hashes = { sha256 = "863965143c613a30a5092ed3ecf2b7e4b2f3fdcad95e7814784021a04e9aee49" } }] - -[[packages]] -name = "soupsieve" -version = "2.8" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/soupsieve-2.8-10-py3-none-any.whl", hashes = { sha256 = "a2f7f498504e5ca7d9ce61e42c0771d6c9badd8b362dbd3673d6109e41656032" } }] - -[[packages]] -name = "stack-data" -version = "0.6.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/stack_data-0.6.3-10-py3-none-any.whl", hashes = { sha256 = "06c4a35b9556c8d032ff533cc4f3b8c0a4a56c33e7af1a30bdf7267ec84f0092" } }] - -[[packages]] -name = "terminado" -version = "0.18.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/terminado-0.18.1-10-py3-none-any.whl", hashes = { sha256 = "136b000f60844b2fda5d13b3f4fc5f67edab49798de4e21eceef4db0302abc0a" } }] - -[[packages]] -name = "tinycss2" -version = "1.4.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/tinycss2-1.4.0-10-py3-none-any.whl", hashes = { sha256 = "53dc2f979e1a263a338be2ee439f8b766fe5e484c956c23b3019bc0cf910ce2b" } }] - -[[packages]] -name = "tornado" -version = "6.5.2" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/tornado-6.5.2-10-cp39-abi3-linux_x86_64.whl", hashes = { sha256 = "c5ecf7584eaeb96ffd47c7f76c292ed3c108976393f751caf3d51c4bc47cbda8" } }] - -[[packages]] -name = "traitlets" -version = "5.14.3" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/traitlets-5.14.3-10-py3-none-any.whl", hashes = { sha256 = "f293342354bb248a34422af5cd21bb18e390a722a5fe5454c8a68e407a551f47" } }] - -[[packages]] -name = "types-python-dateutil" -version = "2.9.0.20251008" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/types_python_dateutil-2.9.0.20251008-10-py3-none-any.whl", hashes = { sha256 = "121ae818a68c7abaebe9ec79bb4736591ce9ca1836639e926e1b20cf81cb268d" } }] - -[[packages]] -name = "typing-extensions" -version = "4.15.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/typing_extensions-4.15.0-10-py3-none-any.whl", hashes = { sha256 = "627495182b5b2c860a357439d4e7655c7e88a494ca497166353db469bfe18fdf" } }] - -[[packages]] -name = "uri-template" -version = "1.3.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/uri_template-1.3.0-10-py3-none-any.whl", hashes = { sha256 = "e3ac6c8e37463b47e42a18b2d2a123401cfa3c21120bda7656703d5c98a9526a" } }] - -[[packages]] -name = "urllib3" -version = "2.5.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/urllib3-2.5.0-10-py3-none-any.whl", hashes = { sha256 = "20c16b4edcfdc25141df89d3d3749609a0bce265ddebb5d683d3d13b9f34236a" } }] - -[[packages]] -name = "wcwidth" -version = "0.2.14" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/wcwidth-0.2.14-10-py3-none-any.whl", hashes = { sha256 = "590a9cb2dbdb8f82a90d839f32314b5e82f01cab69f298e7719e207ac9f9791f" } }] - -[[packages]] -name = "webcolors" -version = "24.11.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/webcolors-24.11.1-10-py3-none-any.whl", hashes = { sha256 = "ce26473f6ab0355675c8687c5544f1e6b96fccd07efb07b1a02b42a4d47e9d05" } }] - -[[packages]] -name = "webencodings" -version = "0.5.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/webencodings-0.5.1-10-py2.py3-none-any.whl", hashes = { sha256 = "6b609dd825b159d9447f89e9c95dd5b5786ccbc0e84219449f988b8262a3c7f5" } }] - -[[packages]] -name = "websocket-client" -version = "1.9.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/websocket_client-1.9.0-10-py3-none-any.whl", hashes = { sha256 = "adebf5266c102b4983b5ebd7546a4a6ab7d83a8e25c07f741e6ce2971677c6df" } }] - -[[packages]] -name = "wheel" -version = "0.45.1" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/wheel-0.45.1-10-py3-none-any.whl", hashes = { sha256 = "c4ea71a32ea7a3eb87099ec059d51a14426296367b53c53d4b17fb96b33ec469" } }] - -[[packages]] -name = "yarl" -version = "1.22.0" -wheels = [{ url = "https://console.redhat.com/api/pulp-content/public-rhai/rhoai/3.0/rocm-ubi9/yarl-1.22.0-10-cp312-cp312-linux_x86_64.whl", hashes = { sha256 = "74d515beefd03b03de03e67b36a64fdfeb4948cb2aa54df081526855bde76062" } }] From 7c7e9a7642b9355269b7b9eafc16dbd3ec789db7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Thu, 6 Nov 2025 13:22:51 +0100 Subject: [PATCH 06/43] NO-JIRA: refactor(Dockerfile.cpu): wrap multiple RUN commands with bash for improved readability and error handling (#2645) --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- codeserver/ubi9-python-3.12/Dockerfile.cpu | 192 +++++++++++------- .../ubi9-python-3.12/Dockerfile.cpu | 20 +- .../minimal/ubi9-python-3.12/Dockerfile.cpu | 21 +- .../minimal/ubi9-python-3.12/Dockerfile.cuda | 21 +- .../minimal/ubi9-python-3.12/Dockerfile.rocm | 21 +- .../ubi9-python-3.12/Dockerfile.cuda | 21 +- .../pytorch/ubi9-python-3.12/Dockerfile.cuda | 21 +- .../pytorch/ubi9-python-3.12/Dockerfile.rocm | 21 +- .../ubi9-python-3.12/Dockerfile.rocm | 21 +- .../ubi9-python-3.12/Dockerfile.cuda | 21 +- .../trustyai/ubi9-python-3.12/Dockerfile.cpu | 21 +- rstudio/c9s-python-3.12/Dockerfile.cpu | 8 +- rstudio/c9s-python-3.12/Dockerfile.cuda | 8 +- rstudio/rhel9-python-3.12/Dockerfile.cpu | 8 +- rstudio/rhel9-python-3.12/Dockerfile.cuda | 8 +- .../ubi9-python-3.12/Dockerfile.cpu | 20 +- .../minimal/ubi9-python-3.12/Dockerfile.cpu | 20 +- .../ubi9-python-3.12/Dockerfile.cuda | 20 +- .../pytorch/ubi9-python-3.12/Dockerfile.cuda | 20 +- .../ubi9-python-3.12/Dockerfile.rocm | 20 +- .../ubi9-python-3.12/Dockerfile.rocm | 20 +- .../ubi9-python-3.12/Dockerfile.cuda | 20 +- scripts/dockerfile_fragments.py | 32 ++- 23 files changed, 410 insertions(+), 195 deletions(-) diff --git a/codeserver/ubi9-python-3.12/Dockerfile.cpu b/codeserver/ubi9-python-3.12/Dockerfile.cpu index b8b6d00d3e..51cc5d302b 100644 --- a/codeserver/ubi9-python-3.12/Dockerfile.cpu +++ b/codeserver/ubi9-python-3.12/Dockerfile.cpu @@ -55,13 +55,15 @@ COPY ${CODESERVER_SOURCE_CODE}/devel_env_setup.sh ./ # Important: Since HOME & USER for the python-312 has been changed, # we need to ensure the same cache directory is mounted in # the final stage with the necessary permissions to consume from cache -RUN --mount=type=cache,target=/root/.cache/uv \ - pip install --no-cache-dir uv && \ - # the devel script is ppc64le and s390x specific - sets up build-time dependencies - source ./devel_env_setup.sh && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - UV_LINK_MODE=copy uv pip install --strict --no-deps --refresh --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +RUN --mount=type=cache,target=/root/.cache/uv /bin/bash <<'EOF' +set -Eeuxo pipefail +pip install --no-cache-dir uv +# the devel script is ppc64le and s390x specific - sets up build-time dependencies +source ./devel_env_setup.sh +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +UV_LINK_MODE=copy uv pip install --strict --no-deps --refresh --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +EOF # dummy file to make image build wait for this stage RUN touch /tmp/control @@ -85,19 +87,29 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y tar perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/dnf +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y tar perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/dnf +EOF # (ARCH-ppc64le): since wheels are compiled from source, we need shared libs available at runtime -RUN --mount=type=cache,from=whl-cache,source=/root/OpenBLAS,target=/OpenBlas,rw \ - bash -c ' \ - if [[ $(uname -m) == "ppc64le" ]]; then \ - PREFIX=/usr/ make install -C /OpenBlas; \ - fi ' +RUN --mount=type=cache,from=whl-cache,source=/root/OpenBLAS,target=/OpenBlas,rw /bin/bash <<'EOF' +set -Eeuxo pipefail +if [[ $(uname -m) == "ppc64le" ]]; then + PREFIX=/usr/ make install -C /OpenBlas +fi +EOF # Other apps and tools installed as default user USER 1001 @@ -107,10 +119,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end #################### @@ -157,21 +173,28 @@ COPY --from=rpm-base /tmp/control /dev/null # Install code-server # Note: Use cache mounts, bind mounts fail on konflux # https://redhat-internal.slack.com/archives/C04PZ7H0VA8/p1755628065772589?thread_ts=1755597929.335999&cid=C04PZ7H0VA8 -RUN --mount=type=cache,from=rpm-base,source=/tmp/,target=/code-server-rpm/,rw \ - # EXPLANATION: dnf installation produces an "unsigned rpm" error from Konflux (Conforma) - # since we're building rpm from source, we will simply unpack it over / - # dnf install -y "/code-server-rpm/code-server-${CODESERVER_VERSION/v/}-${TARGETARCH}.rpm" - # dnf -y clean all --enablerepo='*' - dnf install -y cpio && dnf -y clean all && \ - cd / && rpm2cpio "/code-server-rpm/code-server-${CODESERVER_VERSION/v/}-${TARGETARCH}.rpm" | cpio -idmv +RUN --mount=type=cache,from=rpm-base,source=/tmp/,target=/code-server-rpm/,rw /bin/bash <<'EOF' +set -Eeuxo pipefail +# EXPLANATION: dnf installation produces an "unsigned rpm" error from Konflux (Conforma) +# since we're building rpm from source, we will simply unpack it over / +# dnf install -y "/code-server-rpm/code-server-${CODESERVER_VERSION/v/}-${TARGETARCH}.rpm" +# dnf -y clean all --enablerepo='*' +dnf install -y cpio +dnf -y clean all +cd / +rpm2cpio "/code-server-rpm/code-server-${CODESERVER_VERSION/v/}-${TARGETARCH}.rpm" | cpio -idmv +EOF COPY --chown=1001:0 ${CODESERVER_SOURCE_CODE}/utils utils/ # Create and intall the extensions though build-time on a temporary directory. Later this directory will copied on the `/opt/app-root/src/.local/share/code-server/extensions` via run-code-server.sh file when it starts up. # https://coder.com/docs/code-server/FAQ#how-do-i-install-an-extension -RUN mkdir -p /opt/app-root/extensions-temp && \ - code-server --install-extension /opt/app-root/bin/utils/ms-python.python-2025.14.0.vsix --extensions-dir /opt/app-root/extensions-temp && \ - code-server --install-extension /opt/app-root/bin/utils/ms-toolsai.jupyter-2025.8.0.vsix --extensions-dir /opt/app-root/extensions-temp +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +mkdir -p /opt/app-root/extensions-temp +code-server --install-extension /opt/app-root/bin/utils/ms-python.python-2025.14.0.vsix --extensions-dir /opt/app-root/extensions-temp +code-server --install-extension /opt/app-root/bin/utils/ms-toolsai.jupyter-2025.8.0.vsix --extensions-dir /opt/app-root/extensions-temp +EOF # Install NGINX to proxy code-server and pass probes check ENV APP_ROOT=/opt/app-root @@ -188,10 +211,13 @@ ENV NGINX_CONFIGURATION_PATH=${APP_ROOT}/etc/nginx.d \ NGINX_PERL_MODULE_PATH=${APP_ROOT}/etc/perl # Modules does not exist -RUN INSTALL_PKGS="bind-utils nginx nginx-mod-stream nginx-mod-http-perl httpd" && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - dnf -y clean all --enablerepo='*' +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +INSTALL_PKGS="bind-utils nginx nginx-mod-stream nginx-mod-http-perl httpd" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +rpm -V $INSTALL_PKGS +dnf -y clean all --enablerepo='*' +EOF # Configure httpd for CGI processing COPY --chown=1001:0 ${CODESERVER_SOURCE_CODE}/httpd/httpd.conf /etc/httpd/conf/httpd.conf @@ -216,34 +242,37 @@ COPY ${CODESERVER_SOURCE_CODE}/nginx/api/ /opt/app-root/api/ # UID=1001 && GID=0 # UID=&& GID=0 # UID=1001 && GID= -RUN sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/api/ && \ - mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - mkdir -p ${NGINX_LOG_PATH} && \ - mkdir -p ${NGINX_PERL_MODULE_PATH} && \ - # Create httpd directories and set permissions - mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chown -R 1001:0 ${NGINX_CONF_PATH} && \ - chown -R 1001:0 ${NGINX_APP_ROOT}/etc && \ - chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chown -R 1001:0 /var/lib/nginx /var/log/nginx /run && \ - chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chmod ug+rw ${NGINX_CONF_PATH} && \ - chmod -R ug+rwX ${NGINX_APP_ROOT}/etc && \ - chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run && \ - chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - # Make CGI script executable - chmod +x /opt/app-root/api/kernels/access.cgi && \ - rpm-file-permissions && \ - # Ensure the temporary directory and target directory have the correct permissions - mkdir -p /opt/app-root/src/.local/share/code-server/extensions && \ - mkdir -p /opt/app-root/src/.local/share/code-server/coder-logs && \ - chown -R 1001:0 /opt/app-root/src/.local/share/code-server && \ - chown -R 1001:0 /opt/app-root/extensions-temp && \ - chown -R 1001:0 /opt/app-root/src/.config/code-server +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ +mkdir -p ${NGINX_APP_ROOT}/api/ +mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +mkdir -p ${NGINX_LOG_PATH} +mkdir -p ${NGINX_PERL_MODULE_PATH} +# Create httpd directories and set permissions +mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs +chown -R 1001:0 ${NGINX_CONF_PATH} +chown -R 1001:0 ${NGINX_APP_ROOT}/etc +chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chown -R 1001:0 /var/lib/nginx /var/log/nginx /run +chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs +chmod ug+rw ${NGINX_CONF_PATH} +chmod -R ug+rwX ${NGINX_APP_ROOT}/etc +chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run +chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs +# Make CGI script executable +chmod +x /opt/app-root/api/kernels/access.cgi +rpm-file-permissions +# Ensure the temporary directory and target directory have the correct permissions +mkdir -p /opt/app-root/src/.local/share/code-server/extensions +mkdir -p /opt/app-root/src/.local/share/code-server/coder-logs +chown -R 1001:0 /opt/app-root/src/.local/share/code-server +chown -R 1001:0 /opt/app-root/extensions-temp +chown -R 1001:0 /opt/app-root/src/.config/code-server +EOF # Launcher COPY --chown=1001:0 ${CODESERVER_SOURCE_CODE}/run-code-server.sh ${CODESERVER_SOURCE_CODE}/run-nginx.sh ./ @@ -261,28 +290,35 @@ COPY --from=whl-cache /tmp/control /dev/null # Install packages and cleanup # (ARCH-ppc64le): install packages (eg. pyarrow) that need to be built from source repository on ppc64le RUN --mount=type=cache,target=/root/.cache/uv \ - --mount=type=cache,from=whl-cache,source=/wheelsdir/,target=/wheelsdir/,rw \ - bash -c ' \ - if [[ $(uname -m) == "ppc64le" ]] || [[ $(uname -m) == "s390x" ]]; then \ - uv pip install /wheelsdir/*.whl; \ - fi ' + --mount=type=cache,from=whl-cache,source=/wheelsdir/,target=/wheelsdir/,rw /bin/bash <<'EOF' +set -Eeuxo pipefail +if [[ $(uname -m) == "ppc64le" ]] || [[ $(uname -m) == "s390x" ]]; then + uv pip install /wheelsdir/*.whl +fi +EOF + # install packages as USER 0 (this will allow us to consume uv cache) -RUN --mount=type=cache,target=/root/.cache/uv \ - echo "Installing softwares and packages" && \ - # we can ensure wheels are consumed from the cache only by restricting internet access for uv install with '--offline' flag - # TODO(jdanek): seen some builds fail on GitHub Actions with --offline and see no need to limit ourselves to the cache, will remove this - UV_LINK_MODE=copy uv pip install --cache-dir /root/.cache/uv --requirements=./pylock.toml && \ - # Note: debugpy wheel availabe on pypi (in uv cache) is none-any but bundles amd64.so files - # Build debugpy from source instead - UV_LINK_MODE=copy uv pip install --no-cache git+https://github.com/microsoft/debugpy.git@v$(grep -A1 '\"debugpy\"' ./pylock.toml | grep -Eo '\b[0-9\.]+\b') && \ - # change ownership to default user (all packages were installed as root and has root:root ownership \ - chown -R 1001:0 /opt/app-root +RUN --mount=type=cache,target=/root/.cache/uv /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# we can ensure wheels are consumed from the cache only by restricting internet access for uv install with '--offline' flag +# TODO(jdanek): seen some builds fail on GitHub Actions with --offline and see no need to limit ourselves to the cache, will remove this +UV_LINK_MODE=copy uv pip install --cache-dir /root/.cache/uv --requirements=./pylock.toml +# Note: debugpy wheel availabe on pypi (in uv cache) is none-any but bundles amd64.so files +# Build debugpy from source instead +UV_LINK_MODE=copy uv pip install --no-cache git+https://github.com/microsoft/debugpy.git@v$(grep -A1 '\"debugpy\"' ./pylock.toml | grep -Eo '\b[0-9\.]+\b') +# change ownership to default user (all packages were installed as root and has root:root ownership +chown -R 1001:0 /opt/app-root +EOF USER 1001 # Fix permissions to support pip in Openshift environments -RUN chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu b/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu index f527392d80..ab8868f176 100644 --- a/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu +++ b/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu @@ -53,8 +53,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -107,10 +111,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ############################## diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu index 3b0030be1c..cfc196e818 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu @@ -25,8 +25,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -40,10 +44,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end #################### @@ -73,6 +81,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda index aed3dd4822..d78513a88e 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda @@ -27,8 +27,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -42,10 +46,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### @@ -75,6 +83,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm b/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm index 00255d72d6..b02c6f7dc4 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm @@ -25,8 +25,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -40,10 +44,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################## @@ -73,6 +81,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 diff --git a/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda b/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda index cebc26885d..696cf004b5 100644 --- a/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda @@ -40,8 +40,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -55,10 +59,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### @@ -80,6 +88,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 diff --git a/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda b/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda index 6beb3cc6d0..e4023a7993 100644 --- a/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda @@ -40,8 +40,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -55,10 +59,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### @@ -80,6 +88,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 diff --git a/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm b/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm index 7984893c0e..83c0410c96 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm @@ -38,8 +38,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -53,10 +57,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################## @@ -78,6 +86,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm b/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm index 8e11eff47f..066f60b86a 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm @@ -38,8 +38,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -53,10 +57,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################## @@ -76,6 +84,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 diff --git a/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda b/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda index e8d67e0ff8..c6bc85886a 100644 --- a/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda @@ -40,8 +40,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -55,10 +59,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### @@ -80,6 +88,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 diff --git a/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu b/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu index 734d5274d3..f4451879c7 100644 --- a/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu +++ b/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu @@ -61,8 +61,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -76,10 +80,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end #################### @@ -100,6 +108,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 diff --git a/rstudio/c9s-python-3.12/Dockerfile.cpu b/rstudio/c9s-python-3.12/Dockerfile.cpu index eb86a071c5..686c045f21 100644 --- a/rstudio/c9s-python-3.12/Dockerfile.cpu +++ b/rstudio/c9s-python-3.12/Dockerfile.cpu @@ -23,8 +23,12 @@ USER root # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages diff --git a/rstudio/c9s-python-3.12/Dockerfile.cuda b/rstudio/c9s-python-3.12/Dockerfile.cuda index 94c66e8344..caeb2a4a7b 100644 --- a/rstudio/c9s-python-3.12/Dockerfile.cuda +++ b/rstudio/c9s-python-3.12/Dockerfile.cuda @@ -19,8 +19,12 @@ USER root # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cpu b/rstudio/rhel9-python-3.12/Dockerfile.cpu index 47f16929bd..97b036ffb5 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cpu +++ b/rstudio/rhel9-python-3.12/Dockerfile.cpu @@ -27,8 +27,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cuda b/rstudio/rhel9-python-3.12/Dockerfile.cuda index 6e6c73c9ce..e37158f26e 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cuda +++ b/rstudio/rhel9-python-3.12/Dockerfile.cuda @@ -27,8 +27,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages diff --git a/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu b/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu index d651d151b3..30910d3d6d 100644 --- a/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu +++ b/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu @@ -29,8 +29,12 @@ ARG TARGETARCH # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -103,10 +107,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ############################## diff --git a/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu b/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu index 05b9383fc8..d1416b47ac 100644 --- a/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu +++ b/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu @@ -25,8 +25,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -47,10 +51,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end #################### diff --git a/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda b/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda index f437345d2a..ecda8b70e3 100644 --- a/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda +++ b/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda @@ -27,8 +27,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -42,10 +46,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### diff --git a/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda b/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda index 457d168a1d..17dc8d6faf 100644 --- a/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda +++ b/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda @@ -27,8 +27,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -42,10 +46,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### diff --git a/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm b/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm index ccc03acf56..781688d9fa 100644 --- a/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm +++ b/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm @@ -25,8 +25,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -40,10 +44,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################## diff --git a/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm b/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm index 916dfe7d7b..4547435b72 100644 --- a/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm +++ b/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm @@ -25,8 +25,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -40,10 +44,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ########################### diff --git a/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda b/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda index dbc463b84b..0160123ad7 100644 --- a/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda +++ b/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda @@ -29,8 +29,12 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages @@ -44,10 +48,14 @@ RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ############################ diff --git a/scripts/dockerfile_fragments.py b/scripts/dockerfile_fragments.py index e2b39829bb..868d9fa383 100755 --- a/scripts/dockerfile_fragments.py +++ b/scripts/dockerfile_fragments.py @@ -27,8 +27,12 @@ def main(): # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest - RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y + RUN /bin/bash <<'EOF' + set -Eeuxo pipefail + dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 + dnf clean all -y + EOF + """), prefix="upgrade first to avoid fixable vulnerabilities", ) @@ -43,10 +47,14 @@ def main(): blockinfile( dockerfile, textwrap.dedent(r""" - 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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz + RUN /bin/bash <<'EOF' + set -Eeuxo pipefail + 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 + tar -xzvf /tmp/openshift-client-linux.tar.gz oc + rm -f /tmp/openshift-client-linux.tar.gz + EOF + """), prefix="Install the oc client", ) @@ -91,7 +99,10 @@ def blockinfile(filename: str | os.PathLike, contents: str, prefix: str | None = lines = original_lines[:] # NOTE: textwrap.dedent() with raw strings leaves leading and trailing newline - new_contents = contents.strip("\n").splitlines(keepends=True) + # we want to preserve the trailing one because HEREDOC has to have an empty trailing line for hadolint + new_contents = contents.lstrip("\n").splitlines(keepends=True) + if new_contents and new_contents[-1] == "\n": + new_contents = new_contents[:-1] if begin == end == -1: # add at the end if no markers found lines.append(f"\n{begin_marker}\n") @@ -126,6 +137,13 @@ def test_adding_new_block(self, fs: FakeFilesystem): assert fs.get_object("/config.txt").contents == "hello\nworld\n# begin\nkey=value\n# end\n" + def test_lastnewline_removal(self, fs: FakeFilesystem): + fs.create_file("/config.txt", contents="hello\nworld") + + blockinfile("/config.txt", "key=value\n\n") + + assert fs.get_object("/config.txt").contents == "hello\nworld\n# begin\nkey=value\n\n# end\n" + def test_updating_value_in_block(self, fs: FakeFilesystem): fs.create_file("/config.txt", contents="hello\nworld\n# begin\nkey=value1\n# end\n") From f738fa728ae140d9abc5db28038e4bbf4b439410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Thu, 6 Nov 2025 16:57:17 +0100 Subject: [PATCH 07/43] NO-JIRA: refactor(jupyter/datascience/Dockerfile.cpu): wrap multiple RUN commands with bash for consistency, readability, and improved error handling (#2647) --- .../ubi9-python-3.12/Dockerfile.cpu | 244 ++++++++++-------- 1 file changed, 131 insertions(+), 113 deletions(-) diff --git a/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu b/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu index ab8868f176..2902d381a7 100644 --- a/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu +++ b/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu @@ -19,19 +19,22 @@ ARG TARGETARCH # Keep s390x special-case from original (create dummy binary) but # include explicit curl/unzip steps from the delta for non-s390x. -RUN arch="${TARGETARCH:-$(uname -m)}" && \ - arch=$(echo "$arch" | cut -d- -f1) && \ - if [ "$arch" = "s390x" ]; then \ - echo "Skipping mongocli build for ${arch}, creating dummy binary"; \ - mkdir -p /tmp && printf '#!/bin/sh\necho "mongocli not supported on s390x"\n' > /tmp/mongocli && \ - chmod +x /tmp/mongocli; \ - else \ - echo "Building mongocli for ${arch}"; \ - curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip && \ - unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip && \ - cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux GOARCH=${arch} GO111MODULE=on go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +arch="${TARGETARCH:-$(uname -m)}" +arch=$(echo "$arch" | cut -d- -f1) +if [ "$arch" = "s390x" ]; then + echo "Skipping mongocli build for ${arch}, creating dummy binary" + mkdir -p /tmp && printf '#!/bin/sh\necho "mongocli not supported on s390x"\n' > /tmp/mongocli + chmod +x /tmp/mongocli +else + echo "Building mongocli for ${arch}" + curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip + unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip + cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ + CGO_ENABLED=1 GOOS=linux GOARCH=${arch} GO111MODULE=on go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +fi +EOF #################### # cpu-base # @@ -62,16 +65,19 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN --mount=type=cache,target=/var/cache/dnf \ - echo "Building for architecture: ${TARGETARCH}" && \ - if [ "$TARGETARCH" = "s390x" ]; then \ - PACKAGES="perl mesa-libGL skopeo gcc gcc-c++ make openssl-devel autoconf automake libtool cmake python3-devel pybind11-devel openblas-devel unixODBC-devel"; \ - else \ - PACKAGES="perl mesa-libGL skopeo"; \ - fi && \ - echo "Installing: $PACKAGES" && \ - dnf install -y $PACKAGES && \ - dnf clean all && rm -rf /var/cache/yum +RUN --mount=type=cache,target=/var/cache/dnf /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Building for architecture: ${TARGETARCH}" +if [ "$TARGETARCH" = "s390x" ]; then + PACKAGES="perl mesa-libGL skopeo gcc gcc-c++ make openssl-devel autoconf automake libtool cmake python3-devel pybind11-devel openblas-devel unixODBC-devel" +else + PACKAGES="perl mesa-libGL skopeo" +fi +echo "Installing: $PACKAGES" +dnf install -y $PACKAGES +dnf clean all +rm -rf /var/cache/yum +EOF RUN /bin/bash <<'EOF' set -Eeuxo pipefail @@ -134,55 +140,57 @@ WORKDIR /tmp/build-wheels # Build pyarrow on ppc64le and s390x RUN --mount=type=cache,target=/root/.cache/pip \ - --mount=type=cache,target=/root/.cache/dnf \ - if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then \ - # Install build dependencies (shared for pyarrow and onnx) - dnf install -y cmake make gcc-c++ pybind11-devel wget && \ - dnf clean all && \ - # Build and collect pyarrow wheel - git clone --depth 1 --branch "apache-arrow-17.0.0" https://github.com/apache/arrow.git && \ - cd arrow/cpp && \ - mkdir release && cd release && \ - ARROW_S3_FLAG="" && \ - if [ "$TARGETARCH" != "s390x" ]; then ARROW_S3_FLAG="-DARROW_S3=ON"; fi && \ - cmake -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DARROW_PYTHON=ON \ - -DARROW_PARQUET=ON \ - -DARROW_ORC=ON \ - -DARROW_FILESYSTEM=ON \ - -DARROW_JSON=ON \ - -DARROW_CSV=ON \ - -DARROW_DATASET=ON \ - -DARROW_DEPENDENCY_SOURCE=BUNDLED \ - -DARROW_WITH_LZ4=OFF \ - -DARROW_WITH_ZSTD=OFF \ - -DARROW_WITH_SNAPPY=OFF \ - ${ARROW_S3_FLAG} \ - -DARROW_SUBSTRAIT=ON \ - -DARROW_BUILD_TESTS=OFF \ - -DARROW_BUILD_BENCHMARKS=OFF \ - .. && \ - make -j$(nproc) VERBOSE=1 && \ - make install -j$(nproc) && \ - cd ../../python && \ - pip install --no-cache-dir -r requirements-build.txt && \ - PYARROW_WITH_PARQUET=1 \ - PYARROW_WITH_DATASET=1 \ - PYARROW_WITH_FILESYSTEM=1 \ - PYARROW_WITH_JSON=1 \ - PYARROW_WITH_CSV=1 \ - PYARROW_PARALLEL=$(nproc) \ - python setup.py build_ext --build-type=release --bundle-arrow-cpp bdist_wheel && \ - mkdir -p /tmp/wheels && \ - cp dist/pyarrow-*.whl /tmp/wheels/ && \ - chmod -R 777 /tmp/wheels && \ - # Ensure wheels directory exists and has content - ls -la /tmp/wheels/; \ - else \ - # Create empty wheels directory for non-s390x - mkdir -p /tmp/wheels; \ - fi + --mount=type=cache,target=/root/.cache/dnf /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then + # Install build dependencies (shared for pyarrow and onnx) + dnf install -y cmake make gcc-c++ pybind11-devel wget + dnf clean all + # Build and collect pyarrow wheel + git clone --depth 1 --branch "apache-arrow-17.0.0" https://github.com/apache/arrow.git + cd arrow/cpp + mkdir release && cd release + ARROW_S3_FLAG="" + if [ "$TARGETARCH" != "s390x" ]; then ARROW_S3_FLAG="-DARROW_S3=ON"; fi + cmake -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DARROW_PYTHON=ON \ + -DARROW_PARQUET=ON \ + -DARROW_ORC=ON \ + -DARROW_FILESYSTEM=ON \ + -DARROW_JSON=ON \ + -DARROW_CSV=ON \ + -DARROW_DATASET=ON \ + -DARROW_DEPENDENCY_SOURCE=BUNDLED \ + -DARROW_WITH_LZ4=OFF \ + -DARROW_WITH_ZSTD=OFF \ + -DARROW_WITH_SNAPPY=OFF \ + ${ARROW_S3_FLAG} \ + -DARROW_SUBSTRAIT=ON \ + -DARROW_BUILD_TESTS=OFF \ + -DARROW_BUILD_BENCHMARKS=OFF \ + .. + make -j$(nproc) VERBOSE=1 + make install -j$(nproc) + cd ../../python + pip install --no-cache-dir -r requirements-build.txt + PYARROW_WITH_PARQUET=1 \ + PYARROW_WITH_DATASET=1 \ + PYARROW_WITH_FILESYSTEM=1 \ + PYARROW_WITH_JSON=1 \ + PYARROW_WITH_CSV=1 \ + PYARROW_PARALLEL=$(nproc) \ + python setup.py build_ext --build-type=release --bundle-arrow-cpp bdist_wheel + mkdir -p /tmp/wheels + cp dist/pyarrow-*.whl /tmp/wheels/ + chmod -R 777 /tmp/wheels + # Ensure wheels directory exists and has content + ls -la /tmp/wheels/ +else + # Create empty wheels directory for non-s390x + mkdir -p /tmp/wheels +fi +EOF ####################################################### # common-builder (for Power-only) @@ -264,6 +272,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 @@ -299,8 +308,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC unixODBC-devel postgresql git-lfs libsndfile libxcrypt-compat && \ - dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC unixODBC-devel postgresql git-lfs libsndfile libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -312,11 +325,14 @@ ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ # Copy wheels from build stage (ppc64le and s390x only) COPY --from=pyarrow-builder /tmp/wheels /tmp/wheels -RUN if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then \ - pip install --no-cache-dir /tmp/wheels/*.whl; \ -else \ - echo "Skipping wheel install for $TARGETARCH"; \ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then + pip install --no-cache-dir /tmp/wheels/*.whl +else + echo "Skipping wheel install for $TARGETARCH" fi +EOF # Copy OpenBLAS,ONNX wheels for Power COPY --from=openblas-builder /root/OpenBLAS-${OPENBLAS_VERSION} /openblas @@ -359,41 +375,43 @@ COPY ${DATASCIENCE_SOURCE_CODE}/pylock.toml ./ # Copy Elyra setup to utils so that it's sourced at startup COPY ${DATASCIENCE_SOURCE_CODE}/setup-elyra.sh ${DATASCIENCE_SOURCE_CODE}/utils ./utils/ -RUN --mount=type=cache,target=/root/.cache/pip \ - echo "Installing software and packages" && \ +RUN --mount=type=cache,target=/root/.cache/pip /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing software and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then + # We need special flags and environment variables when building packages + GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ + CFLAGS="-O3" CXXFLAGS="-O3" \ + uv pip install --strict --no-deps --no-cache --no-config --no-progress \ + --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match \ + --requirements=./pylock.toml +else # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then \ - # We need special flags and environment variables when building packages - GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ - CFLAGS="-O3" CXXFLAGS="-O3" \ - uv pip install --strict --no-deps --no-cache --no-config --no-progress \ - --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match \ - --requirements=./pylock.toml; \ - else \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress \ - --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match \ - --requirements=./pylock.toml; \ - fi && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - mkdir /opt/app-root/pipeline-runtimes && \ - # 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 && \ - # copy jupyter configuration - install -D -m 0644 /opt/app-root/bin/utils/jupyter_server_config.py \ - /opt/app-root/etc/jupyter/jupyter_server_config.py && \ - # Disable announcement plugin of jupyterlab \ - jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ - # Apply JupyterLab addons \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P + # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. + uv pip install --strict --no-deps --no-cache --no-config --no-progress \ + --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match \ + --requirements=./pylock.toml +fi +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +mkdir /opt/app-root/pipeline-runtimes +# 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 +# copy jupyter configuration +install -D -m 0644 /opt/app-root/bin/utils/jupyter_server_config.py \ + /opt/app-root/etc/jupyter/jupyter_server_config.py +# Disable announcement plugin of jupyterlab +jupyter labextension disable "@jupyterlab/apputils-extension:announcements" +# Apply JupyterLab addons +/opt/app-root/bin/utils/addons/apply.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src From a7d55bd83d0630ffed6a15ab57eb8ebeeb6d5f4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Thu, 6 Nov 2025 18:36:31 +0100 Subject: [PATCH 08/43] NO-JIRA: chore(pylock): rerun `gmake refresh-pipfilelock-files` since the GHA action for periodic refresh is now broken (#2651) --- codeserver/ubi9-python-3.12/pylock.toml | 12 ++++++++++++ jupyter/datascience/ubi9-python-3.12/pylock.toml | 12 ++++++++++++ .../ubi9-python-3.12/pylock.toml | 12 ++++++++++++ jupyter/pytorch/ubi9-python-3.12/pylock.toml | 12 ++++++++++++ jupyter/rocm/pytorch/ubi9-python-3.12/pylock.toml | 12 ++++++++++++ jupyter/tensorflow/ubi9-python-3.12/pylock.toml | 12 ++++++++++++ runtimes/datascience/ubi9-python-3.12/pylock.toml | 12 ++++++++++++ .../ubi9-python-3.12/pylock.toml | 12 ++++++++++++ runtimes/pytorch/ubi9-python-3.12/pylock.toml | 12 ++++++++++++ runtimes/rocm-pytorch/ubi9-python-3.12/pylock.toml | 12 ++++++++++++ runtimes/tensorflow/ubi9-python-3.12/pylock.toml | 12 ++++++++++++ 11 files changed, 132 insertions(+) diff --git a/codeserver/ubi9-python-3.12/pylock.toml b/codeserver/ubi9-python-3.12/pylock.toml index 923bd6f13b..27902cafb0 100644 --- a/codeserver/ubi9-python-3.12/pylock.toml +++ b/codeserver/ubi9-python-3.12/pylock.toml @@ -441,6 +441,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:23Z, size = 584358, hashes = { sha256 = "c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d" } }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:37Z, size = 1113550, hashes = { sha256 = "9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5" } }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:20Z, size = 1137126, hashes = { sha256 = "8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f" } }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:04Z, size = 1544904, hashes = { sha256 = "f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7" } }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:08Z, size = 1611228, hashes = { sha256 = "af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8" } }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", upload-time = 2025-08-07T13:50:00Z, size = 298654, hashes = { sha256 = "73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c" } }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:41Z, size = 272305, hashes = { sha256 = "96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2" } }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:55Z, size = 632472, hashes = { sha256 = "1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246" } }, @@ -450,6 +452,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:25Z, size = 587684, hashes = { sha256 = "2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8" } }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:38Z, size = 1116647, hashes = { sha256 = "1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52" } }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:21Z, size = 1142073, hashes = { sha256 = "55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa" } }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:11Z, size = 1548385, hashes = { sha256 = "c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c" } }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:12Z, size = 1613329, hashes = { sha256 = "03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5" } }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", upload-time = 2025-08-07T13:44:12Z, size = 299100, hashes = { sha256 = "9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9" } }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:45Z, size = 274079, hashes = { sha256 = "3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd" } }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:56Z, size = 640997, hashes = { sha256 = "ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb" } }, @@ -459,6 +463,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:28Z, size = 607586, hashes = { sha256 = "3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0" } }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:39Z, size = 1123281, hashes = { sha256 = "abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0" } }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:22Z, size = 1151142, hashes = { sha256 = "20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f" } }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:15Z, size = 1564846, hashes = { sha256 = "ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0" } }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:17Z, size = 1633814, hashes = { sha256 = "326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d" } }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", upload-time = 2025-08-07T13:38:53Z, size = 299899, hashes = { sha256 = "a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02" } }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:50Z, size = 272814, hashes = { sha256 = "1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31" } }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:57Z, size = 641073, hashes = { sha256 = "cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945" } }, @@ -468,6 +474,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:31Z, size = 610497, hashes = { sha256 = "23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671" } }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:41Z, size = 1121662, hashes = { sha256 = "00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b" } }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:24Z, size = 1149210, hashes = { sha256 = "d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae" } }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:19Z, size = 1564759, hashes = { sha256 = "6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b" } }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:21Z, size = 1634288, hashes = { sha256 = "ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929" } }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", upload-time = 2025-08-07T13:24:38Z, size = 299685, hashes = { sha256 = "554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b" } }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:08Z, size = 273586, hashes = { sha256 = "49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0" } }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:59Z, size = 686346, hashes = { sha256 = "299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f" } }, @@ -475,6 +483,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-08-07T13:53:17Z, size = 694659, hashes = { sha256 = "b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1" } }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-08-07T13:18:34Z, size = 695355, hashes = { sha256 = "061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735" } }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:33Z, size = 657512, hashes = { sha256 = "44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337" } }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:23Z, size = 1612508, hashes = { sha256 = "2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269" } }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:25Z, size = 1680760, hashes = { sha256 = "015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681" } }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", upload-time = 2025-08-07T13:32:27Z, size = 303425, hashes = { sha256 = "e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01" } }, { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:16Z, size = 269859, hashes = { sha256 = "b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c" } }, { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:43:01Z, size = 627610, hashes = { sha256 = "27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d" } }, @@ -484,6 +494,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:35Z, size = 582817, hashes = { sha256 = "c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df" } }, { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:42Z, size = 1111985, hashes = { sha256 = "b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594" } }, { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:26Z, size = 1136137, hashes = { sha256 = "81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98" } }, + { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:27Z, size = 1542941, hashes = { sha256 = "28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10" } }, + { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:29Z, size = 1609685, hashes = { sha256 = "52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be" } }, { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", upload-time = 2025-08-07T14:02:20Z, size = 281400, hashes = { sha256 = "65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b" } }, { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", upload-time = 2025-08-07T13:56:34Z, size = 298533, hashes = { sha256 = "d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb" } }, ] diff --git a/jupyter/datascience/ubi9-python-3.12/pylock.toml b/jupyter/datascience/ubi9-python-3.12/pylock.toml index 192c1e4b86..88b9558759 100644 --- a/jupyter/datascience/ubi9-python-3.12/pylock.toml +++ b/jupyter/datascience/ubi9-python-3.12/pylock.toml @@ -1152,6 +1152,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:23Z, size = 584358, hashes = { sha256 = "c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d" } }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:37Z, size = 1113550, hashes = { sha256 = "9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5" } }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:20Z, size = 1137126, hashes = { sha256 = "8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f" } }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:04Z, size = 1544904, hashes = { sha256 = "f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7" } }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:08Z, size = 1611228, hashes = { sha256 = "af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8" } }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", upload-time = 2025-08-07T13:50:00Z, size = 298654, hashes = { sha256 = "73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c" } }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:41Z, size = 272305, hashes = { sha256 = "96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2" } }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:55Z, size = 632472, hashes = { sha256 = "1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246" } }, @@ -1161,6 +1163,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:25Z, size = 587684, hashes = { sha256 = "2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8" } }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:38Z, size = 1116647, hashes = { sha256 = "1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52" } }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:21Z, size = 1142073, hashes = { sha256 = "55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa" } }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:11Z, size = 1548385, hashes = { sha256 = "c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c" } }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:12Z, size = 1613329, hashes = { sha256 = "03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5" } }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", upload-time = 2025-08-07T13:44:12Z, size = 299100, hashes = { sha256 = "9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9" } }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:45Z, size = 274079, hashes = { sha256 = "3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd" } }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:56Z, size = 640997, hashes = { sha256 = "ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb" } }, @@ -1170,6 +1174,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:28Z, size = 607586, hashes = { sha256 = "3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0" } }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:39Z, size = 1123281, hashes = { sha256 = "abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0" } }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:22Z, size = 1151142, hashes = { sha256 = "20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f" } }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:15Z, size = 1564846, hashes = { sha256 = "ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0" } }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:17Z, size = 1633814, hashes = { sha256 = "326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d" } }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", upload-time = 2025-08-07T13:38:53Z, size = 299899, hashes = { sha256 = "a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02" } }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:50Z, size = 272814, hashes = { sha256 = "1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31" } }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:57Z, size = 641073, hashes = { sha256 = "cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945" } }, @@ -1179,6 +1185,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:31Z, size = 610497, hashes = { sha256 = "23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671" } }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:41Z, size = 1121662, hashes = { sha256 = "00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b" } }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:24Z, size = 1149210, hashes = { sha256 = "d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae" } }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:19Z, size = 1564759, hashes = { sha256 = "6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b" } }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:21Z, size = 1634288, hashes = { sha256 = "ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929" } }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", upload-time = 2025-08-07T13:24:38Z, size = 299685, hashes = { sha256 = "554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b" } }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:08Z, size = 273586, hashes = { sha256 = "49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0" } }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:59Z, size = 686346, hashes = { sha256 = "299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f" } }, @@ -1186,6 +1194,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-08-07T13:53:17Z, size = 694659, hashes = { sha256 = "b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1" } }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-08-07T13:18:34Z, size = 695355, hashes = { sha256 = "061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735" } }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:33Z, size = 657512, hashes = { sha256 = "44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337" } }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:23Z, size = 1612508, hashes = { sha256 = "2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269" } }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:25Z, size = 1680760, hashes = { sha256 = "015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681" } }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", upload-time = 2025-08-07T13:32:27Z, size = 303425, hashes = { sha256 = "e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01" } }, { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:16Z, size = 269859, hashes = { sha256 = "b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c" } }, { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:43:01Z, size = 627610, hashes = { sha256 = "27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d" } }, @@ -1195,6 +1205,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:35Z, size = 582817, hashes = { sha256 = "c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df" } }, { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:42Z, size = 1111985, hashes = { sha256 = "b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594" } }, { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:26Z, size = 1136137, hashes = { sha256 = "81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98" } }, + { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:27Z, size = 1542941, hashes = { sha256 = "28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10" } }, + { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:29Z, size = 1609685, hashes = { sha256 = "52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be" } }, { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", upload-time = 2025-08-07T14:02:20Z, size = 281400, hashes = { sha256 = "65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b" } }, { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", upload-time = 2025-08-07T13:56:34Z, size = 298533, hashes = { sha256 = "d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb" } }, ] diff --git a/jupyter/pytorch+llmcompressor/ubi9-python-3.12/pylock.toml b/jupyter/pytorch+llmcompressor/ubi9-python-3.12/pylock.toml index f5506bb570..022a1c3511 100644 --- a/jupyter/pytorch+llmcompressor/ubi9-python-3.12/pylock.toml +++ b/jupyter/pytorch+llmcompressor/ubi9-python-3.12/pylock.toml @@ -1117,6 +1117,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:23Z, size = 584358, hashes = { sha256 = "c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d" } }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:37Z, size = 1113550, hashes = { sha256 = "9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5" } }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:20Z, size = 1137126, hashes = { sha256 = "8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f" } }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:04Z, size = 1544904, hashes = { sha256 = "f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7" } }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:08Z, size = 1611228, hashes = { sha256 = "af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8" } }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", upload-time = 2025-08-07T13:50:00Z, size = 298654, hashes = { sha256 = "73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c" } }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:41Z, size = 272305, hashes = { sha256 = "96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2" } }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:55Z, size = 632472, hashes = { sha256 = "1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246" } }, @@ -1126,6 +1128,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:25Z, size = 587684, hashes = { sha256 = "2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8" } }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:38Z, size = 1116647, hashes = { sha256 = "1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52" } }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:21Z, size = 1142073, hashes = { sha256 = "55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa" } }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:11Z, size = 1548385, hashes = { sha256 = "c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c" } }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:12Z, size = 1613329, hashes = { sha256 = "03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5" } }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", upload-time = 2025-08-07T13:44:12Z, size = 299100, hashes = { sha256 = "9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9" } }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:45Z, size = 274079, hashes = { sha256 = "3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd" } }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:56Z, size = 640997, hashes = { sha256 = "ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb" } }, @@ -1135,6 +1139,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:28Z, size = 607586, hashes = { sha256 = "3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0" } }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:39Z, size = 1123281, hashes = { sha256 = "abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0" } }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:22Z, size = 1151142, hashes = { sha256 = "20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f" } }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:15Z, size = 1564846, hashes = { sha256 = "ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0" } }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:17Z, size = 1633814, hashes = { sha256 = "326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d" } }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", upload-time = 2025-08-07T13:38:53Z, size = 299899, hashes = { sha256 = "a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02" } }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:50Z, size = 272814, hashes = { sha256 = "1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31" } }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:57Z, size = 641073, hashes = { sha256 = "cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945" } }, @@ -1144,6 +1150,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:31Z, size = 610497, hashes = { sha256 = "23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671" } }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:41Z, size = 1121662, hashes = { sha256 = "00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b" } }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:24Z, size = 1149210, hashes = { sha256 = "d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae" } }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:19Z, size = 1564759, hashes = { sha256 = "6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b" } }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:21Z, size = 1634288, hashes = { sha256 = "ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929" } }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", upload-time = 2025-08-07T13:24:38Z, size = 299685, hashes = { sha256 = "554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b" } }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:08Z, size = 273586, hashes = { sha256 = "49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0" } }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:59Z, size = 686346, hashes = { sha256 = "299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f" } }, @@ -1151,6 +1159,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-08-07T13:53:17Z, size = 694659, hashes = { sha256 = "b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1" } }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-08-07T13:18:34Z, size = 695355, hashes = { sha256 = "061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735" } }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:33Z, size = 657512, hashes = { sha256 = "44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337" } }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:23Z, size = 1612508, hashes = { sha256 = "2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269" } }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:25Z, size = 1680760, hashes = { sha256 = "015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681" } }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", upload-time = 2025-08-07T13:32:27Z, size = 303425, hashes = { sha256 = "e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01" } }, { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:16Z, size = 269859, hashes = { sha256 = "b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c" } }, { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:43:01Z, size = 627610, hashes = { sha256 = "27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d" } }, @@ -1160,6 +1170,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:35Z, size = 582817, hashes = { sha256 = "c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df" } }, { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:42Z, size = 1111985, hashes = { sha256 = "b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594" } }, { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:26Z, size = 1136137, hashes = { sha256 = "81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98" } }, + { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:27Z, size = 1542941, hashes = { sha256 = "28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10" } }, + { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:29Z, size = 1609685, hashes = { sha256 = "52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be" } }, { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", upload-time = 2025-08-07T14:02:20Z, size = 281400, hashes = { sha256 = "65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b" } }, { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", upload-time = 2025-08-07T13:56:34Z, size = 298533, hashes = { sha256 = "d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb" } }, ] diff --git a/jupyter/pytorch/ubi9-python-3.12/pylock.toml b/jupyter/pytorch/ubi9-python-3.12/pylock.toml index 01384b5907..4f421705e6 100644 --- a/jupyter/pytorch/ubi9-python-3.12/pylock.toml +++ b/jupyter/pytorch/ubi9-python-3.12/pylock.toml @@ -1152,6 +1152,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:23Z, size = 584358, hashes = { sha256 = "c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d" } }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:37Z, size = 1113550, hashes = { sha256 = "9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5" } }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:20Z, size = 1137126, hashes = { sha256 = "8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f" } }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:04Z, size = 1544904, hashes = { sha256 = "f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7" } }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:08Z, size = 1611228, hashes = { sha256 = "af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8" } }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", upload-time = 2025-08-07T13:50:00Z, size = 298654, hashes = { sha256 = "73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c" } }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:41Z, size = 272305, hashes = { sha256 = "96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2" } }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:55Z, size = 632472, hashes = { sha256 = "1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246" } }, @@ -1161,6 +1163,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:25Z, size = 587684, hashes = { sha256 = "2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8" } }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:38Z, size = 1116647, hashes = { sha256 = "1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52" } }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:21Z, size = 1142073, hashes = { sha256 = "55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa" } }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:11Z, size = 1548385, hashes = { sha256 = "c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c" } }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:12Z, size = 1613329, hashes = { sha256 = "03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5" } }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", upload-time = 2025-08-07T13:44:12Z, size = 299100, hashes = { sha256 = "9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9" } }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:45Z, size = 274079, hashes = { sha256 = "3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd" } }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:56Z, size = 640997, hashes = { sha256 = "ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb" } }, @@ -1170,6 +1174,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:28Z, size = 607586, hashes = { sha256 = "3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0" } }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:39Z, size = 1123281, hashes = { sha256 = "abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0" } }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:22Z, size = 1151142, hashes = { sha256 = "20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f" } }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:15Z, size = 1564846, hashes = { sha256 = "ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0" } }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:17Z, size = 1633814, hashes = { sha256 = "326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d" } }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", upload-time = 2025-08-07T13:38:53Z, size = 299899, hashes = { sha256 = "a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02" } }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:50Z, size = 272814, hashes = { sha256 = "1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31" } }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:57Z, size = 641073, hashes = { sha256 = "cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945" } }, @@ -1179,6 +1185,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:31Z, size = 610497, hashes = { sha256 = "23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671" } }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:41Z, size = 1121662, hashes = { sha256 = "00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b" } }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:24Z, size = 1149210, hashes = { sha256 = "d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae" } }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:19Z, size = 1564759, hashes = { sha256 = "6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b" } }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:21Z, size = 1634288, hashes = { sha256 = "ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929" } }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", upload-time = 2025-08-07T13:24:38Z, size = 299685, hashes = { sha256 = "554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b" } }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:08Z, size = 273586, hashes = { sha256 = "49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0" } }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:59Z, size = 686346, hashes = { sha256 = "299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f" } }, @@ -1186,6 +1194,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-08-07T13:53:17Z, size = 694659, hashes = { sha256 = "b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1" } }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-08-07T13:18:34Z, size = 695355, hashes = { sha256 = "061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735" } }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:33Z, size = 657512, hashes = { sha256 = "44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337" } }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:23Z, size = 1612508, hashes = { sha256 = "2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269" } }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:25Z, size = 1680760, hashes = { sha256 = "015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681" } }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", upload-time = 2025-08-07T13:32:27Z, size = 303425, hashes = { sha256 = "e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01" } }, { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:16Z, size = 269859, hashes = { sha256 = "b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c" } }, { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:43:01Z, size = 627610, hashes = { sha256 = "27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d" } }, @@ -1195,6 +1205,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:35Z, size = 582817, hashes = { sha256 = "c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df" } }, { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:42Z, size = 1111985, hashes = { sha256 = "b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594" } }, { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:26Z, size = 1136137, hashes = { sha256 = "81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98" } }, + { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:27Z, size = 1542941, hashes = { sha256 = "28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10" } }, + { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:29Z, size = 1609685, hashes = { sha256 = "52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be" } }, { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", upload-time = 2025-08-07T14:02:20Z, size = 281400, hashes = { sha256 = "65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b" } }, { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", upload-time = 2025-08-07T13:56:34Z, size = 298533, hashes = { sha256 = "d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb" } }, ] diff --git a/jupyter/rocm/pytorch/ubi9-python-3.12/pylock.toml b/jupyter/rocm/pytorch/ubi9-python-3.12/pylock.toml index 636526170b..c4c7fb8b02 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.12/pylock.toml +++ b/jupyter/rocm/pytorch/ubi9-python-3.12/pylock.toml @@ -1152,6 +1152,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:23Z, size = 584358, hashes = { sha256 = "c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d" } }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:37Z, size = 1113550, hashes = { sha256 = "9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5" } }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:20Z, size = 1137126, hashes = { sha256 = "8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f" } }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:04Z, size = 1544904, hashes = { sha256 = "f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7" } }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:08Z, size = 1611228, hashes = { sha256 = "af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8" } }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", upload-time = 2025-08-07T13:50:00Z, size = 298654, hashes = { sha256 = "73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c" } }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:41Z, size = 272305, hashes = { sha256 = "96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2" } }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:55Z, size = 632472, hashes = { sha256 = "1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246" } }, @@ -1161,6 +1163,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:25Z, size = 587684, hashes = { sha256 = "2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8" } }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:38Z, size = 1116647, hashes = { sha256 = "1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52" } }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:21Z, size = 1142073, hashes = { sha256 = "55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa" } }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:11Z, size = 1548385, hashes = { sha256 = "c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c" } }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:12Z, size = 1613329, hashes = { sha256 = "03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5" } }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", upload-time = 2025-08-07T13:44:12Z, size = 299100, hashes = { sha256 = "9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9" } }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:45Z, size = 274079, hashes = { sha256 = "3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd" } }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:56Z, size = 640997, hashes = { sha256 = "ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb" } }, @@ -1170,6 +1174,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:28Z, size = 607586, hashes = { sha256 = "3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0" } }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:39Z, size = 1123281, hashes = { sha256 = "abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0" } }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:22Z, size = 1151142, hashes = { sha256 = "20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f" } }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:15Z, size = 1564846, hashes = { sha256 = "ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0" } }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:17Z, size = 1633814, hashes = { sha256 = "326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d" } }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", upload-time = 2025-08-07T13:38:53Z, size = 299899, hashes = { sha256 = "a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02" } }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:50Z, size = 272814, hashes = { sha256 = "1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31" } }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:57Z, size = 641073, hashes = { sha256 = "cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945" } }, @@ -1179,6 +1185,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:31Z, size = 610497, hashes = { sha256 = "23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671" } }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:41Z, size = 1121662, hashes = { sha256 = "00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b" } }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:24Z, size = 1149210, hashes = { sha256 = "d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae" } }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:19Z, size = 1564759, hashes = { sha256 = "6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b" } }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:21Z, size = 1634288, hashes = { sha256 = "ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929" } }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", upload-time = 2025-08-07T13:24:38Z, size = 299685, hashes = { sha256 = "554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b" } }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:08Z, size = 273586, hashes = { sha256 = "49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0" } }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:59Z, size = 686346, hashes = { sha256 = "299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f" } }, @@ -1186,6 +1194,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-08-07T13:53:17Z, size = 694659, hashes = { sha256 = "b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1" } }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-08-07T13:18:34Z, size = 695355, hashes = { sha256 = "061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735" } }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:33Z, size = 657512, hashes = { sha256 = "44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337" } }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:23Z, size = 1612508, hashes = { sha256 = "2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269" } }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:25Z, size = 1680760, hashes = { sha256 = "015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681" } }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", upload-time = 2025-08-07T13:32:27Z, size = 303425, hashes = { sha256 = "e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01" } }, { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:16Z, size = 269859, hashes = { sha256 = "b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c" } }, { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:43:01Z, size = 627610, hashes = { sha256 = "27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d" } }, @@ -1195,6 +1205,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:35Z, size = 582817, hashes = { sha256 = "c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df" } }, { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:42Z, size = 1111985, hashes = { sha256 = "b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594" } }, { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:26Z, size = 1136137, hashes = { sha256 = "81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98" } }, + { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:27Z, size = 1542941, hashes = { sha256 = "28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10" } }, + { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:29Z, size = 1609685, hashes = { sha256 = "52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be" } }, { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", upload-time = 2025-08-07T14:02:20Z, size = 281400, hashes = { sha256 = "65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b" } }, { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", upload-time = 2025-08-07T13:56:34Z, size = 298533, hashes = { sha256 = "d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb" } }, ] diff --git a/jupyter/tensorflow/ubi9-python-3.12/pylock.toml b/jupyter/tensorflow/ubi9-python-3.12/pylock.toml index 4a47877eaa..3afe398a42 100644 --- a/jupyter/tensorflow/ubi9-python-3.12/pylock.toml +++ b/jupyter/tensorflow/ubi9-python-3.12/pylock.toml @@ -1179,6 +1179,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:23Z, size = 584358, hashes = { sha256 = "c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d" } }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:37Z, size = 1113550, hashes = { sha256 = "9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5" } }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:20Z, size = 1137126, hashes = { sha256 = "8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f" } }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:04Z, size = 1544904, hashes = { sha256 = "f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7" } }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:08Z, size = 1611228, hashes = { sha256 = "af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8" } }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", upload-time = 2025-08-07T13:50:00Z, size = 298654, hashes = { sha256 = "73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c" } }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:41Z, size = 272305, hashes = { sha256 = "96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2" } }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:55Z, size = 632472, hashes = { sha256 = "1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246" } }, @@ -1188,6 +1190,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:25Z, size = 587684, hashes = { sha256 = "2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8" } }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:38Z, size = 1116647, hashes = { sha256 = "1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52" } }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:21Z, size = 1142073, hashes = { sha256 = "55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa" } }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:11Z, size = 1548385, hashes = { sha256 = "c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c" } }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:12Z, size = 1613329, hashes = { sha256 = "03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5" } }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", upload-time = 2025-08-07T13:44:12Z, size = 299100, hashes = { sha256 = "9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9" } }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:45Z, size = 274079, hashes = { sha256 = "3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd" } }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:56Z, size = 640997, hashes = { sha256 = "ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb" } }, @@ -1197,6 +1201,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:28Z, size = 607586, hashes = { sha256 = "3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0" } }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:39Z, size = 1123281, hashes = { sha256 = "abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0" } }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:22Z, size = 1151142, hashes = { sha256 = "20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f" } }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:15Z, size = 1564846, hashes = { sha256 = "ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0" } }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:17Z, size = 1633814, hashes = { sha256 = "326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d" } }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", upload-time = 2025-08-07T13:38:53Z, size = 299899, hashes = { sha256 = "a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02" } }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:50Z, size = 272814, hashes = { sha256 = "1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31" } }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:57Z, size = 641073, hashes = { sha256 = "cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945" } }, @@ -1206,6 +1212,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:31Z, size = 610497, hashes = { sha256 = "23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671" } }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:41Z, size = 1121662, hashes = { sha256 = "00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b" } }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:24Z, size = 1149210, hashes = { sha256 = "d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae" } }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:19Z, size = 1564759, hashes = { sha256 = "6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b" } }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:21Z, size = 1634288, hashes = { sha256 = "ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929" } }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", upload-time = 2025-08-07T13:24:38Z, size = 299685, hashes = { sha256 = "554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b" } }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:08Z, size = 273586, hashes = { sha256 = "49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0" } }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:59Z, size = 686346, hashes = { sha256 = "299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f" } }, @@ -1213,6 +1221,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-08-07T13:53:17Z, size = 694659, hashes = { sha256 = "b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1" } }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-08-07T13:18:34Z, size = 695355, hashes = { sha256 = "061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735" } }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:33Z, size = 657512, hashes = { sha256 = "44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337" } }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:23Z, size = 1612508, hashes = { sha256 = "2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269" } }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:25Z, size = 1680760, hashes = { sha256 = "015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681" } }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", upload-time = 2025-08-07T13:32:27Z, size = 303425, hashes = { sha256 = "e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01" } }, { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:16Z, size = 269859, hashes = { sha256 = "b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c" } }, { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:43:01Z, size = 627610, hashes = { sha256 = "27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d" } }, @@ -1222,6 +1232,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:35Z, size = 582817, hashes = { sha256 = "c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df" } }, { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:42Z, size = 1111985, hashes = { sha256 = "b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594" } }, { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:26Z, size = 1136137, hashes = { sha256 = "81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98" } }, + { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:27Z, size = 1542941, hashes = { sha256 = "28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10" } }, + { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:29Z, size = 1609685, hashes = { sha256 = "52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be" } }, { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", upload-time = 2025-08-07T14:02:20Z, size = 281400, hashes = { sha256 = "65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b" } }, { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", upload-time = 2025-08-07T13:56:34Z, size = 298533, hashes = { sha256 = "d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb" } }, ] diff --git a/runtimes/datascience/ubi9-python-3.12/pylock.toml b/runtimes/datascience/ubi9-python-3.12/pylock.toml index 404dd820c3..ceb9565ca8 100644 --- a/runtimes/datascience/ubi9-python-3.12/pylock.toml +++ b/runtimes/datascience/ubi9-python-3.12/pylock.toml @@ -948,6 +948,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:23Z, size = 584358, hashes = { sha256 = "c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d" } }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:37Z, size = 1113550, hashes = { sha256 = "9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5" } }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:20Z, size = 1137126, hashes = { sha256 = "8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f" } }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:04Z, size = 1544904, hashes = { sha256 = "f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7" } }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:08Z, size = 1611228, hashes = { sha256 = "af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8" } }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", upload-time = 2025-08-07T13:50:00Z, size = 298654, hashes = { sha256 = "73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c" } }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:41Z, size = 272305, hashes = { sha256 = "96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2" } }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:55Z, size = 632472, hashes = { sha256 = "1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246" } }, @@ -957,6 +959,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:25Z, size = 587684, hashes = { sha256 = "2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8" } }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:38Z, size = 1116647, hashes = { sha256 = "1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52" } }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:21Z, size = 1142073, hashes = { sha256 = "55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa" } }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:11Z, size = 1548385, hashes = { sha256 = "c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c" } }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:12Z, size = 1613329, hashes = { sha256 = "03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5" } }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", upload-time = 2025-08-07T13:44:12Z, size = 299100, hashes = { sha256 = "9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9" } }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:45Z, size = 274079, hashes = { sha256 = "3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd" } }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:56Z, size = 640997, hashes = { sha256 = "ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb" } }, @@ -966,6 +970,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:28Z, size = 607586, hashes = { sha256 = "3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0" } }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:39Z, size = 1123281, hashes = { sha256 = "abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0" } }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:22Z, size = 1151142, hashes = { sha256 = "20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f" } }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:15Z, size = 1564846, hashes = { sha256 = "ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0" } }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:17Z, size = 1633814, hashes = { sha256 = "326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d" } }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", upload-time = 2025-08-07T13:38:53Z, size = 299899, hashes = { sha256 = "a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02" } }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:50Z, size = 272814, hashes = { sha256 = "1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31" } }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:57Z, size = 641073, hashes = { sha256 = "cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945" } }, @@ -975,6 +981,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:31Z, size = 610497, hashes = { sha256 = "23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671" } }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:41Z, size = 1121662, hashes = { sha256 = "00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b" } }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:24Z, size = 1149210, hashes = { sha256 = "d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae" } }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:19Z, size = 1564759, hashes = { sha256 = "6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b" } }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:21Z, size = 1634288, hashes = { sha256 = "ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929" } }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", upload-time = 2025-08-07T13:24:38Z, size = 299685, hashes = { sha256 = "554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b" } }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:08Z, size = 273586, hashes = { sha256 = "49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0" } }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:59Z, size = 686346, hashes = { sha256 = "299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f" } }, @@ -982,6 +990,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-08-07T13:53:17Z, size = 694659, hashes = { sha256 = "b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1" } }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-08-07T13:18:34Z, size = 695355, hashes = { sha256 = "061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735" } }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:33Z, size = 657512, hashes = { sha256 = "44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337" } }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:23Z, size = 1612508, hashes = { sha256 = "2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269" } }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:25Z, size = 1680760, hashes = { sha256 = "015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681" } }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", upload-time = 2025-08-07T13:32:27Z, size = 303425, hashes = { sha256 = "e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01" } }, { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:16Z, size = 269859, hashes = { sha256 = "b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c" } }, { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:43:01Z, size = 627610, hashes = { sha256 = "27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d" } }, @@ -991,6 +1001,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:35Z, size = 582817, hashes = { sha256 = "c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df" } }, { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:42Z, size = 1111985, hashes = { sha256 = "b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594" } }, { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:26Z, size = 1136137, hashes = { sha256 = "81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98" } }, + { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:27Z, size = 1542941, hashes = { sha256 = "28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10" } }, + { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:29Z, size = 1609685, hashes = { sha256 = "52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be" } }, { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", upload-time = 2025-08-07T14:02:20Z, size = 281400, hashes = { sha256 = "65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b" } }, { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", upload-time = 2025-08-07T13:56:34Z, size = 298533, hashes = { sha256 = "d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb" } }, ] diff --git a/runtimes/pytorch+llmcompressor/ubi9-python-3.12/pylock.toml b/runtimes/pytorch+llmcompressor/ubi9-python-3.12/pylock.toml index 7057688f35..457c6f2504 100644 --- a/runtimes/pytorch+llmcompressor/ubi9-python-3.12/pylock.toml +++ b/runtimes/pytorch+llmcompressor/ubi9-python-3.12/pylock.toml @@ -875,6 +875,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:23Z, size = 584358, hashes = { sha256 = "c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d" } }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:37Z, size = 1113550, hashes = { sha256 = "9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5" } }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:20Z, size = 1137126, hashes = { sha256 = "8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f" } }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:04Z, size = 1544904, hashes = { sha256 = "f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7" } }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:08Z, size = 1611228, hashes = { sha256 = "af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8" } }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", upload-time = 2025-08-07T13:50:00Z, size = 298654, hashes = { sha256 = "73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c" } }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:41Z, size = 272305, hashes = { sha256 = "96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2" } }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:55Z, size = 632472, hashes = { sha256 = "1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246" } }, @@ -884,6 +886,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:25Z, size = 587684, hashes = { sha256 = "2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8" } }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:38Z, size = 1116647, hashes = { sha256 = "1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52" } }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:21Z, size = 1142073, hashes = { sha256 = "55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa" } }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:11Z, size = 1548385, hashes = { sha256 = "c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c" } }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:12Z, size = 1613329, hashes = { sha256 = "03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5" } }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", upload-time = 2025-08-07T13:44:12Z, size = 299100, hashes = { sha256 = "9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9" } }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:45Z, size = 274079, hashes = { sha256 = "3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd" } }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:56Z, size = 640997, hashes = { sha256 = "ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb" } }, @@ -893,6 +897,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:28Z, size = 607586, hashes = { sha256 = "3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0" } }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:39Z, size = 1123281, hashes = { sha256 = "abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0" } }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:22Z, size = 1151142, hashes = { sha256 = "20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f" } }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:15Z, size = 1564846, hashes = { sha256 = "ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0" } }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:17Z, size = 1633814, hashes = { sha256 = "326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d" } }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", upload-time = 2025-08-07T13:38:53Z, size = 299899, hashes = { sha256 = "a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02" } }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:50Z, size = 272814, hashes = { sha256 = "1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31" } }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:57Z, size = 641073, hashes = { sha256 = "cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945" } }, @@ -902,6 +908,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:31Z, size = 610497, hashes = { sha256 = "23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671" } }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:41Z, size = 1121662, hashes = { sha256 = "00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b" } }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:24Z, size = 1149210, hashes = { sha256 = "d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae" } }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:19Z, size = 1564759, hashes = { sha256 = "6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b" } }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:21Z, size = 1634288, hashes = { sha256 = "ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929" } }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", upload-time = 2025-08-07T13:24:38Z, size = 299685, hashes = { sha256 = "554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b" } }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:08Z, size = 273586, hashes = { sha256 = "49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0" } }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:59Z, size = 686346, hashes = { sha256 = "299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f" } }, @@ -909,6 +917,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-08-07T13:53:17Z, size = 694659, hashes = { sha256 = "b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1" } }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-08-07T13:18:34Z, size = 695355, hashes = { sha256 = "061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735" } }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:33Z, size = 657512, hashes = { sha256 = "44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337" } }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:23Z, size = 1612508, hashes = { sha256 = "2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269" } }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:25Z, size = 1680760, hashes = { sha256 = "015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681" } }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", upload-time = 2025-08-07T13:32:27Z, size = 303425, hashes = { sha256 = "e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01" } }, { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:16Z, size = 269859, hashes = { sha256 = "b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c" } }, { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:43:01Z, size = 627610, hashes = { sha256 = "27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d" } }, @@ -918,6 +928,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:35Z, size = 582817, hashes = { sha256 = "c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df" } }, { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:42Z, size = 1111985, hashes = { sha256 = "b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594" } }, { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:26Z, size = 1136137, hashes = { sha256 = "81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98" } }, + { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:27Z, size = 1542941, hashes = { sha256 = "28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10" } }, + { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:29Z, size = 1609685, hashes = { sha256 = "52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be" } }, { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", upload-time = 2025-08-07T14:02:20Z, size = 281400, hashes = { sha256 = "65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b" } }, { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", upload-time = 2025-08-07T13:56:34Z, size = 298533, hashes = { sha256 = "d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb" } }, ] diff --git a/runtimes/pytorch/ubi9-python-3.12/pylock.toml b/runtimes/pytorch/ubi9-python-3.12/pylock.toml index 4d16ef9bc5..6105f128b1 100644 --- a/runtimes/pytorch/ubi9-python-3.12/pylock.toml +++ b/runtimes/pytorch/ubi9-python-3.12/pylock.toml @@ -939,6 +939,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:23Z, size = 584358, hashes = { sha256 = "c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d" } }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:37Z, size = 1113550, hashes = { sha256 = "9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5" } }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:20Z, size = 1137126, hashes = { sha256 = "8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f" } }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:04Z, size = 1544904, hashes = { sha256 = "f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7" } }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:08Z, size = 1611228, hashes = { sha256 = "af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8" } }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", upload-time = 2025-08-07T13:50:00Z, size = 298654, hashes = { sha256 = "73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c" } }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:41Z, size = 272305, hashes = { sha256 = "96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2" } }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:55Z, size = 632472, hashes = { sha256 = "1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246" } }, @@ -948,6 +950,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:25Z, size = 587684, hashes = { sha256 = "2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8" } }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:38Z, size = 1116647, hashes = { sha256 = "1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52" } }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:21Z, size = 1142073, hashes = { sha256 = "55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa" } }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:11Z, size = 1548385, hashes = { sha256 = "c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c" } }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:12Z, size = 1613329, hashes = { sha256 = "03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5" } }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", upload-time = 2025-08-07T13:44:12Z, size = 299100, hashes = { sha256 = "9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9" } }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:45Z, size = 274079, hashes = { sha256 = "3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd" } }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:56Z, size = 640997, hashes = { sha256 = "ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb" } }, @@ -957,6 +961,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:28Z, size = 607586, hashes = { sha256 = "3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0" } }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:39Z, size = 1123281, hashes = { sha256 = "abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0" } }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:22Z, size = 1151142, hashes = { sha256 = "20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f" } }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:15Z, size = 1564846, hashes = { sha256 = "ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0" } }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:17Z, size = 1633814, hashes = { sha256 = "326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d" } }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", upload-time = 2025-08-07T13:38:53Z, size = 299899, hashes = { sha256 = "a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02" } }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:50Z, size = 272814, hashes = { sha256 = "1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31" } }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:57Z, size = 641073, hashes = { sha256 = "cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945" } }, @@ -966,6 +972,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:31Z, size = 610497, hashes = { sha256 = "23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671" } }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:41Z, size = 1121662, hashes = { sha256 = "00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b" } }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:24Z, size = 1149210, hashes = { sha256 = "d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae" } }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:19Z, size = 1564759, hashes = { sha256 = "6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b" } }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:21Z, size = 1634288, hashes = { sha256 = "ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929" } }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", upload-time = 2025-08-07T13:24:38Z, size = 299685, hashes = { sha256 = "554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b" } }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:08Z, size = 273586, hashes = { sha256 = "49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0" } }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:59Z, size = 686346, hashes = { sha256 = "299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f" } }, @@ -973,6 +981,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-08-07T13:53:17Z, size = 694659, hashes = { sha256 = "b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1" } }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-08-07T13:18:34Z, size = 695355, hashes = { sha256 = "061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735" } }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:33Z, size = 657512, hashes = { sha256 = "44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337" } }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:23Z, size = 1612508, hashes = { sha256 = "2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269" } }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:25Z, size = 1680760, hashes = { sha256 = "015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681" } }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", upload-time = 2025-08-07T13:32:27Z, size = 303425, hashes = { sha256 = "e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01" } }, { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:16Z, size = 269859, hashes = { sha256 = "b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c" } }, { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:43:01Z, size = 627610, hashes = { sha256 = "27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d" } }, @@ -982,6 +992,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:35Z, size = 582817, hashes = { sha256 = "c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df" } }, { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:42Z, size = 1111985, hashes = { sha256 = "b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594" } }, { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:26Z, size = 1136137, hashes = { sha256 = "81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98" } }, + { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:27Z, size = 1542941, hashes = { sha256 = "28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10" } }, + { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:29Z, size = 1609685, hashes = { sha256 = "52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be" } }, { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", upload-time = 2025-08-07T14:02:20Z, size = 281400, hashes = { sha256 = "65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b" } }, { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", upload-time = 2025-08-07T13:56:34Z, size = 298533, hashes = { sha256 = "d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb" } }, ] diff --git a/runtimes/rocm-pytorch/ubi9-python-3.12/pylock.toml b/runtimes/rocm-pytorch/ubi9-python-3.12/pylock.toml index 9c54b97a55..53deeadf59 100644 --- a/runtimes/rocm-pytorch/ubi9-python-3.12/pylock.toml +++ b/runtimes/rocm-pytorch/ubi9-python-3.12/pylock.toml @@ -939,6 +939,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:23Z, size = 584358, hashes = { sha256 = "c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d" } }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:37Z, size = 1113550, hashes = { sha256 = "9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5" } }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:20Z, size = 1137126, hashes = { sha256 = "8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f" } }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:04Z, size = 1544904, hashes = { sha256 = "f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7" } }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:08Z, size = 1611228, hashes = { sha256 = "af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8" } }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", upload-time = 2025-08-07T13:50:00Z, size = 298654, hashes = { sha256 = "73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c" } }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:41Z, size = 272305, hashes = { sha256 = "96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2" } }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:55Z, size = 632472, hashes = { sha256 = "1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246" } }, @@ -948,6 +950,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:25Z, size = 587684, hashes = { sha256 = "2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8" } }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:38Z, size = 1116647, hashes = { sha256 = "1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52" } }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:21Z, size = 1142073, hashes = { sha256 = "55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa" } }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:11Z, size = 1548385, hashes = { sha256 = "c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c" } }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:12Z, size = 1613329, hashes = { sha256 = "03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5" } }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", upload-time = 2025-08-07T13:44:12Z, size = 299100, hashes = { sha256 = "9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9" } }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:45Z, size = 274079, hashes = { sha256 = "3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd" } }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:56Z, size = 640997, hashes = { sha256 = "ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb" } }, @@ -957,6 +961,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:28Z, size = 607586, hashes = { sha256 = "3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0" } }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:39Z, size = 1123281, hashes = { sha256 = "abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0" } }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:22Z, size = 1151142, hashes = { sha256 = "20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f" } }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:15Z, size = 1564846, hashes = { sha256 = "ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0" } }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:17Z, size = 1633814, hashes = { sha256 = "326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d" } }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", upload-time = 2025-08-07T13:38:53Z, size = 299899, hashes = { sha256 = "a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02" } }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:50Z, size = 272814, hashes = { sha256 = "1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31" } }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:57Z, size = 641073, hashes = { sha256 = "cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945" } }, @@ -966,6 +972,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:31Z, size = 610497, hashes = { sha256 = "23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671" } }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:41Z, size = 1121662, hashes = { sha256 = "00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b" } }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:24Z, size = 1149210, hashes = { sha256 = "d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae" } }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:19Z, size = 1564759, hashes = { sha256 = "6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b" } }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:21Z, size = 1634288, hashes = { sha256 = "ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929" } }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", upload-time = 2025-08-07T13:24:38Z, size = 299685, hashes = { sha256 = "554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b" } }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:08Z, size = 273586, hashes = { sha256 = "49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0" } }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:59Z, size = 686346, hashes = { sha256 = "299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f" } }, @@ -973,6 +981,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-08-07T13:53:17Z, size = 694659, hashes = { sha256 = "b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1" } }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-08-07T13:18:34Z, size = 695355, hashes = { sha256 = "061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735" } }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:33Z, size = 657512, hashes = { sha256 = "44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337" } }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:23Z, size = 1612508, hashes = { sha256 = "2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269" } }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:25Z, size = 1680760, hashes = { sha256 = "015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681" } }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", upload-time = 2025-08-07T13:32:27Z, size = 303425, hashes = { sha256 = "e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01" } }, { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:16Z, size = 269859, hashes = { sha256 = "b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c" } }, { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:43:01Z, size = 627610, hashes = { sha256 = "27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d" } }, @@ -982,6 +992,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:35Z, size = 582817, hashes = { sha256 = "c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df" } }, { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:42Z, size = 1111985, hashes = { sha256 = "b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594" } }, { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:26Z, size = 1136137, hashes = { sha256 = "81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98" } }, + { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:27Z, size = 1542941, hashes = { sha256 = "28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10" } }, + { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:29Z, size = 1609685, hashes = { sha256 = "52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be" } }, { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", upload-time = 2025-08-07T14:02:20Z, size = 281400, hashes = { sha256 = "65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b" } }, { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", upload-time = 2025-08-07T13:56:34Z, size = 298533, hashes = { sha256 = "d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb" } }, ] diff --git a/runtimes/tensorflow/ubi9-python-3.12/pylock.toml b/runtimes/tensorflow/ubi9-python-3.12/pylock.toml index e73befe45a..ef02d17fce 100644 --- a/runtimes/tensorflow/ubi9-python-3.12/pylock.toml +++ b/runtimes/tensorflow/ubi9-python-3.12/pylock.toml @@ -966,6 +966,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:23Z, size = 584358, hashes = { sha256 = "c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d" } }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:37Z, size = 1113550, hashes = { sha256 = "9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5" } }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:20Z, size = 1137126, hashes = { sha256 = "8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f" } }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:04Z, size = 1544904, hashes = { sha256 = "f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7" } }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:08Z, size = 1611228, hashes = { sha256 = "af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8" } }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", upload-time = 2025-08-07T13:50:00Z, size = 298654, hashes = { sha256 = "73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c" } }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:41Z, size = 272305, hashes = { sha256 = "96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2" } }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:55Z, size = 632472, hashes = { sha256 = "1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246" } }, @@ -975,6 +977,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:25Z, size = 587684, hashes = { sha256 = "2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8" } }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:38Z, size = 1116647, hashes = { sha256 = "1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52" } }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:21Z, size = 1142073, hashes = { sha256 = "55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa" } }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:11Z, size = 1548385, hashes = { sha256 = "c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c" } }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:12Z, size = 1613329, hashes = { sha256 = "03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5" } }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", upload-time = 2025-08-07T13:44:12Z, size = 299100, hashes = { sha256 = "9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9" } }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:45Z, size = 274079, hashes = { sha256 = "3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd" } }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:56Z, size = 640997, hashes = { sha256 = "ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb" } }, @@ -984,6 +988,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:28Z, size = 607586, hashes = { sha256 = "3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0" } }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:39Z, size = 1123281, hashes = { sha256 = "abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0" } }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:22Z, size = 1151142, hashes = { sha256 = "20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f" } }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:15Z, size = 1564846, hashes = { sha256 = "ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0" } }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:17Z, size = 1633814, hashes = { sha256 = "326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d" } }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", upload-time = 2025-08-07T13:38:53Z, size = 299899, hashes = { sha256 = "a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02" } }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:15:50Z, size = 272814, hashes = { sha256 = "1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31" } }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:57Z, size = 641073, hashes = { sha256 = "cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945" } }, @@ -993,6 +999,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:31Z, size = 610497, hashes = { sha256 = "23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671" } }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:41Z, size = 1121662, hashes = { sha256 = "00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b" } }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:24Z, size = 1149210, hashes = { sha256 = "d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae" } }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:19Z, size = 1564759, hashes = { sha256 = "6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b" } }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:21Z, size = 1634288, hashes = { sha256 = "ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929" } }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", upload-time = 2025-08-07T13:24:38Z, size = 299685, hashes = { sha256 = "554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b" } }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:08Z, size = 273586, hashes = { sha256 = "49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0" } }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:42:59Z, size = 686346, hashes = { sha256 = "299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f" } }, @@ -1000,6 +1008,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-08-07T13:53:17Z, size = 694659, hashes = { sha256 = "b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1" } }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-08-07T13:18:34Z, size = 695355, hashes = { sha256 = "061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735" } }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:33Z, size = 657512, hashes = { sha256 = "44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337" } }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:23Z, size = 1612508, hashes = { sha256 = "2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269" } }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:25Z, size = 1680760, hashes = { sha256 = "015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681" } }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", upload-time = 2025-08-07T13:32:27Z, size = 303425, hashes = { sha256 = "e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01" } }, { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", upload-time = 2025-08-07T13:16:16Z, size = 269859, hashes = { sha256 = "b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c" } }, { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-08-07T13:43:01Z, size = 627610, hashes = { sha256 = "27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d" } }, @@ -1009,6 +1019,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-08-07T13:18:35Z, size = 582817, hashes = { sha256 = "c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df" } }, { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", upload-time = 2025-08-07T13:42:42Z, size = 1111985, hashes = { sha256 = "b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594" } }, { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", upload-time = 2025-08-07T13:18:26Z, size = 1136137, hashes = { sha256 = "81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98" } }, + { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", upload-time = 2025-11-04T12:42:27Z, size = 1542941, hashes = { sha256 = "28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10" } }, + { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", upload-time = 2025-11-04T12:42:29Z, size = 1609685, hashes = { sha256 = "52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be" } }, { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", upload-time = 2025-08-07T14:02:20Z, size = 281400, hashes = { sha256 = "65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b" } }, { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", upload-time = 2025-08-07T13:56:34Z, size = 298533, hashes = { sha256 = "d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb" } }, ] From 9ae4860075afb76183c2ec46542581aeb54ead84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Thu, 6 Nov 2025 18:42:56 +0100 Subject: [PATCH 09/43] NO-JIRA: refactor(jupyter/minimal/Dockerfile.cpu): wrap multiple RUN commands with bash for improved readability and error handling (#2648) --- .../minimal/ubi9-python-3.12/Dockerfile.cpu | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu index cfc196e818..0f3d8d67c5 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu @@ -34,7 +34,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -89,21 +94,24 @@ USER 1001 COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ # Install Python dependencies from requirements.txt file -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Disable announcement plugin of jupyterlab \ - 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.12/site-packages && \ - fix-permissions /opt/app-root -P && \ - # Apply JupyterLab addons \ - /opt/app-root/bin/utils/addons/apply.sh +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Disable announcement plugin of jupyterlab +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.12/site-packages +fix-permissions /opt/app-root -P +# Apply JupyterLab addons +/opt/app-root/bin/utils/addons/apply.sh +EOF WORKDIR /opt/app-root/src From 1e1dcdb693665bddee3d35d94e66b4cd28867790 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Thu, 6 Nov 2025 18:43:50 +0100 Subject: [PATCH 10/43] NO-JIRA: refactor(jupyter/minimal/Dockerfile.cuda): wrap multiple RUN commands with bash for improved readability and error handling (#2649) --- .../minimal/ubi9-python-3.12/Dockerfile.cuda | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda index d78513a88e..d033c843df 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda @@ -36,7 +36,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -91,21 +96,24 @@ USER 1001 COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ # Install Python dependencies from requirements.txt file -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Disable announcement plugin of jupyterlab \ - 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.12/site-packages && \ - fix-permissions /opt/app-root -P && \ - # Apply JupyterLab addons \ - /opt/app-root/bin/utils/addons/apply.sh +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Disable announcement plugin of jupyterlab +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.12/site-packages +fix-permissions /opt/app-root -P +# Apply JupyterLab addons +/opt/app-root/bin/utils/addons/apply.sh +EOF WORKDIR /opt/app-root/src From fcee49385550d37751cc79507ed1c6f699ce6a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Thu, 6 Nov 2025 18:44:31 +0100 Subject: [PATCH 11/43] NO-JIRA: refactor(jupyter/minimal/Dockerfile.rocm): wrap multiple RUN commands with bash for improved readability and error handling (#2650) --- .../minimal/ubi9-python-3.12/Dockerfile.rocm | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm b/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm index b02c6f7dc4..d5753cd9ee 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm @@ -34,7 +34,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -89,21 +94,24 @@ USER 1001 COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ # Install Python dependencies from Pipfile.lock file -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Disable announcement plugin of jupyterlab \ - 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.12/site-packages && \ - fix-permissions /opt/app-root -P && \ - # Apply JupyterLab addons \ - /opt/app-root/bin/utils/addons/apply.sh +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Disable announcement plugin of jupyterlab +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.12/site-packages +fix-permissions /opt/app-root -P +# Apply JupyterLab addons +/opt/app-root/bin/utils/addons/apply.sh +EOF WORKDIR /opt/app-root/src From a1b0520ff8c9f0e02080534d08a45b2fade41757 Mon Sep 17 00:00:00 2001 From: Matt Prahl Date: Fri, 7 Nov 2025 08:43:58 -0500 Subject: [PATCH 12/43] RHOAIENG-24702, RHOAIENG-38121: add AI Pipelines exceptions to check-payload (#2654) These exceptions are required because AI Pipelines uses two different binaries when in FIPS mode vs non-FIPS mode. The reason is that these binaries are copied to the user's provided base image and in FIPS mode, this means the OpenSSL version must match (e.g. UBI 9). In non-FIPS mode, we leverage the builtin Go crypto so that the binaries are portable. Relates: RHOAIENG-24702 and RHOAIENG-38121 Slack: https://redhat-internal.slack.com/archives/C09GK0M9YKD/p1762370844652579 Signed-off-by: mprahl --- scripts/check-payload/config.toml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/scripts/check-payload/config.toml b/scripts/check-payload/config.toml index 89d6caf39c..057ad9b9c8 100644 --- a/scripts/check-payload/config.toml +++ b/scripts/check-payload/config.toml @@ -170,6 +170,36 @@ dirs = ["/assets/downloads/cli"] error = "ErrGoMissingTag" dirs = ["/assets/downloads/cli"] +# AI Pipelines override (RHOAIENG-24702 and RHOAIENG-38121) +# When FIPS is enabled, /usr/bin/argoexec-fips is used. /usr/bin/argoexec is +# only used for portability reasons in non-FIPS environments. +[[payload.odh-data-science-pipelines-argo-argoexec-container.ignore]] +error = "ErrGoNotCgoEnabled" +files = ["/usr/bin/argoexec"] + +[[payload.odh-data-science-pipelines-argo-argoexec-container.ignore]] +error = "ErrGoMissingSymbols" +files = ["/usr/bin/argoexec"] + +[[payload.odh-data-science-pipelines-argo-argoexec-container.ignore]] +error = "ErrNotDynLinked" +files = ["/usr/bin/argoexec"] + +# AI Pipelines override (RHOAIENG-24702 and RHOAIENG-38121) +# When FIPS is enabled, /usr/bin/launcher-v2-fips is used. /usr/bin/launcher-v2 is +# only used for portability reasons in non-FIPS environments. +[[payload.odh-ml-pipelines-launcher-container.ignore]] +error = "ErrGoNotCgoEnabled" +files = ["/usr/bin/launcher-v2"] + +[[payload.odh-ml-pipelines-launcher-container.ignore]] +error = "ErrGoMissingSymbols" +files = ["/usr/bin/launcher-v2"] + +[[payload.odh-ml-pipelines-launcher-container.ignore]] +error = "ErrNotDynLinked" +files = ["/usr/bin/launcher-v2"] + # Temporary supprsssions for workbenches # https://github.com/openshift/check-payload/blob/main/internal/types/errors.go From 55c16adf22853a7fcfa26a6375d58e69b262a88d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Fri, 7 Nov 2025 14:59:51 +0100 Subject: [PATCH 13/43] NO-JIRA: refactor(jupyter/*/Dockerfile*): wrap multiple RUN commands with bash for improved readability and error handling (#2655) --- .../ubi9-python-3.12/Dockerfile.cuda | 66 +++++--- .../pytorch/ubi9-python-3.12/Dockerfile.cuda | 66 +++++--- .../pytorch/ubi9-python-3.12/Dockerfile.rocm | 72 +++++---- .../ubi9-python-3.12/Dockerfile.rocm | 68 +++++--- .../ubi9-python-3.12/Dockerfile.cuda | 66 +++++--- .../trustyai/ubi9-python-3.12/Dockerfile.cpu | 152 +++++++++++------- 6 files changed, 299 insertions(+), 191 deletions(-) diff --git a/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda b/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda index 696cf004b5..21d2a5dee7 100644 --- a/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda @@ -16,10 +16,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # cuda-base # @@ -49,7 +52,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -110,7 +118,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC postgresql git-lfs libsndfile && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC postgresql git-lfs libsndfile +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -146,24 +159,27 @@ LABEL name="odh-notebook-jupyter-cuda-pytorch-llmcompressor-ubi9-python-3.12" \ # Install Python packages and Jupyterlab extensions from requirements.txt COPY ${PYTORCH_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +# 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 +# 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 +/opt/app-root/bin/utils/addons/apply.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda b/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda index e4023a7993..c6943ce6e8 100644 --- a/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda @@ -16,10 +16,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # cuda-base # @@ -49,7 +52,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -110,7 +118,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -146,24 +159,27 @@ LABEL name="odh-notebook-jupyter-cuda-pytorch-ubi9-python-3.12" \ # Install Python packages and Jupyterlab extensions from requirements.txt COPY ${PYTORCH_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +# 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 +# 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 +/opt/app-root/bin/utils/addons/apply.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm b/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm index 83c0410c96..f8c7bc1587 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm @@ -14,10 +14,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # rocm-base # @@ -47,7 +50,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -108,7 +116,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -143,27 +156,30 @@ LABEL name="odh-notebook-jupyter-rocm-pytorch-ubi9-python-3.12" \ COPY ${PYTORCH_SOURCE_CODE}/pylock.toml ${PYTORCH_SOURCE_CODE}/de-vendor-torch.sh ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # De-vendor the ROCm libs that are embedded in Pytorch \ - ./de-vendor-torch.sh && \ - rm ./de-vendor-torch.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +# 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 +# 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 +/opt/app-root/bin/utils/addons/apply.sh +# De-vendor the ROCm libs that are embedded in Pytorch +./de-vendor-torch.sh +rm ./de-vendor-torch.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm b/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm index 066f60b86a..10fa5b0383 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm @@ -14,10 +14,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # rocm-base # @@ -47,7 +50,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -108,7 +116,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC postgresql git-lfs libsndfile && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC postgresql git-lfs libsndfile +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -144,26 +157,29 @@ LABEL name="odh-notebook-jupyter-rocm-tensorflow-ubi9-python-3.12" \ COPY ${TENSORFLOW_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - # Not using --build-constraints=./requirements.txt because error: Unnamed requirements are not allowed as constraints (found: `https://repo.radeon.com/rocm/manylinux/rocm-rel-6.4/ - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +# Not using --build-constraints=./requirements.txt because error: Unnamed requirements are not allowed as constraints (found: `https://repo.radeon.com/rocm/manylinux/rocm-rel-6.4/ +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +# 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 +# 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 +/opt/app-root/bin/utils/addons/apply.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF COPY ${JUPYTER_REUSABLE_UTILS}/usercustomize.pth ${JUPYTER_REUSABLE_UTILS}/monkey_patch_protobuf_6x.py /opt/app-root/lib/python3.12/site-packages/ diff --git a/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda b/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda index c6bc85886a..a8860dbf82 100644 --- a/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda @@ -16,10 +16,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # cuda-base # @@ -49,7 +52,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -110,7 +118,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -147,25 +160,28 @@ LABEL name="odh-notebook-cuda-jupyter-tensorflow-ubi9-python-3.12" \ # Install Python packages and Jupyterlab extensions from requirements.txt COPY ${TENSORFLOW_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +# 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 +# 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 +/opt/app-root/bin/utils/addons/apply.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF COPY ${JUPYTER_REUSABLE_UTILS}/usercustomize.pth ${JUPYTER_REUSABLE_UTILS}/monkey_patch_protobuf_6x.py /opt/app-root/lib/python3.12/site-packages/ diff --git a/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu b/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu index f4451879c7..3f104f616d 100644 --- a/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu +++ b/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu @@ -14,10 +14,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # wheel-cache-base # @@ -34,13 +37,15 @@ ARG TRUSTYAI_SOURCE_CODE=jupyter/trustyai/ubi9-python-3.12 COPY ${TRUSTYAI_SOURCE_CODE}/pylock.toml . COPY ${TRUSTYAI_SOURCE_CODE}/devel_env_setup.sh . -RUN --mount=type=cache,target=/root/.cache/uv \ - pip install --no-cache-dir uv && \ - # the devel script is ppc64le and s390x specific - sets up build-time dependencies - source ./devel_env_setup.sh && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - UV_LINK_MODE=copy uv pip install --strict --no-deps --refresh --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +RUN --mount=type=cache,target=/root/.cache/uv /bin/bash <<'EOF' +set -Eeuxo pipefail +pip install --no-cache-dir uv +# the devel script is ppc64le and s390x specific - sets up build-time dependencies +source ./devel_env_setup.sh +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +UV_LINK_MODE=copy uv pip install --strict --no-deps --refresh --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +EOF #################### # cpu-base # @@ -70,7 +75,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -131,7 +141,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC unixODBC-devel postgresql git-lfs libsndfile libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC unixODBC-devel postgresql git-lfs libsndfile libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -168,64 +183,77 @@ USER 0 # Install jre that is needed to run the trustyai library # Also install runtime libraries for s390x/ppc64le -RUN INSTALL_PKGS="java-17-openjdk" && \ - ARCH=$(uname -m) && \ - if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then \ - # Add runtime libraries needed for s390x/ppc64le (OpenBLAS for PyTorch/NumPy) - INSTALL_PKGS="$INSTALL_PKGS openblas openblas-threads"; \ - fi && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - dnf -y clean all --enablerepo='*' && \ - # Create symlink for compatibility (openblas package provides libopenblasp.so.0 but PyTorch looks for libopenblas.so.0) - if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then \ - ln -sf /usr/lib64/libopenblasp.so.0 /usr/lib64/libopenblas.so.0 && \ - ldconfig; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +INSTALL_PKGS="java-17-openjdk" +ARCH=$(uname -m) +if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then + # Add runtime libraries needed for s390x/ppc64le (OpenBLAS for PyTorch/NumPy) + INSTALL_PKGS="$INSTALL_PKGS openblas openblas-threads" +fi +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +dnf -y clean all --enablerepo='*' +# Create symlink for compatibility (openblas package provides libopenblasp.so.0 but PyTorch looks for libopenblas.so.0) +if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then + ln -sf /usr/lib64/libopenblasp.so.0 /usr/lib64/libopenblas.so.0 + ldconfig +fi +EOF # Install Python packages and Jupyterlab extensions from requirements.txt COPY ${TRUSTYAI_SOURCE_CODE}/pylock.toml ./ # install openblas for ppc64le -RUN --mount=type=cache,from=whl-cache,source=/root/OpenBLAS/,target=/OpenBlas/,rw \ - bash -c 'ARCH=$(uname -m); \ - if [ "$ARCH" = "ppc64le" ]; then \ - PREFIX=/usr/ make install -C /OpenBlas; \ - fi' +RUN --mount=type=cache,from=whl-cache,source=/root/OpenBLAS/,target=/OpenBlas/,rw /bin/bash <<'EOF' +set -Eeuxo pipefail +ARCH=$(uname -m) +if [ "$ARCH" = "ppc64le" ]; then + PREFIX=/usr/ make install -C /OpenBlas +fi +EOF # Install packages and cleanup # install packages as USER 0 (this will allow us to consume uv cache) RUN --mount=type=cache,from=whl-cache,source=/wheelsdir/,target=/wheelsdir/,rw \ - --mount=type=cache,target=/root/.cache/uv \ - bash -c 'ARCH=$(uname -m); \ - if [ "$ARCH" = "ppc64le" ] || [ "$ARCH" = "s390x" ]; then \ - UV_LINK_MODE=copy uv pip install /wheelsdir/*.whl accelerate --cache-dir /root/.cache/uv; \ - fi' - -RUN --mount=type=cache,target=/root/.cache/uv \ - echo "Installing softwares and packages" && \ - # we can ensure wheels are consumed from the cache only by restricting internet access for uv install with '--offline' flag - UV_LINK_MODE=copy uv pip install --cache-dir /root/.cache/uv --requirements=./pylock.toml && \ - # Note: debugpy wheel availabe on pypi (in uv cache) is none-any but bundles amd64.so files - # Build debugpy from source instead - UV_LINK_MODE=copy uv pip install --no-cache git+https://github.com/microsoft/debugpy.git@v$(grep -A1 '\"debugpy\"' ./pylock.toml | grep -Eo '\b[0-9\.]+\b') && \ - # change ownership to default user (all packages were installed as root and has root:root ownership \ - chown -R 1001:0 /opt/app-root/ && \ - chmod -R g=u /opt/app-root + --mount=type=cache,target=/root/.cache/uv /bin/bash <<'EOF' +set -Eeuxo pipefail +ARCH=$(uname -m) +if [ "$ARCH" = "ppc64le" ] || [ "$ARCH" = "s390x" ]; then + UV_LINK_MODE=copy uv pip install /wheelsdir/*.whl accelerate --cache-dir /root/.cache/uv +fi +EOF + +RUN --mount=type=cache,target=/root/.cache/uv /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# we can ensure wheels are consumed from the cache only by restricting internet access for uv install with '--offline' flag +UV_LINK_MODE=copy uv pip install --cache-dir /root/.cache/uv --requirements=./pylock.toml +# Note: debugpy wheel availabe on pypi (in uv cache) is none-any but bundles amd64.so files +# Build debugpy from source instead +UV_LINK_MODE=copy uv pip install --no-cache git+https://github.com/microsoft/debugpy.git@v$(grep -A1 '\"debugpy\"' ./pylock.toml | grep -Eo '\b[0-9\.]+\b') +# change ownership to default user (all packages were installed as root and has root:root ownership +chown -R 1001:0 /opt/app-root/ +chmod -R g=u /opt/app-root +EOF USER 1001 -RUN # setup path for runtime configuration \ - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +# TODO: https://issues.redhat.com/browse/RHAIENG-1503 uncomment this +## setup path for runtime configuration +#mkdir /opt/app-root/runtimes +## 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 +## 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 +#/opt/app-root/bin/utils/addons/apply.sh +## Fix permissions to support pip in Openshift environments +#chmod -R g+w /opt/app-root/lib/python3.12/site-packages +#fix-permissions /opt/app-root -P +EOF From b00f1187fcbf99ff1579f16eeea23ce4824cc23f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Thu, 6 Nov 2025 19:35:20 +0100 Subject: [PATCH 14/43] NO-JIRA: refactor(runtime/*/Dockerfile*): wrap multiple RUN commands with bash for improved readability, consistency, and error handling (#2656) --- .../ubi9-python-3.12/Dockerfile.cpu | 386 ++++++++++-------- .../minimal/ubi9-python-3.12/Dockerfile.cpu | 37 +- .../ubi9-python-3.12/Dockerfile.cuda | 24 +- .../pytorch/ubi9-python-3.12/Dockerfile.cuda | 24 +- .../ubi9-python-3.12/Dockerfile.rocm | 30 +- .../ubi9-python-3.12/Dockerfile.rocm | 26 +- .../ubi9-python-3.12/Dockerfile.cuda | 24 +- 7 files changed, 314 insertions(+), 237 deletions(-) diff --git a/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu b/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu index 30910d3d6d..82e17057b5 100644 --- a/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu +++ b/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu @@ -38,21 +38,24 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN --mount=type=cache,target=/var/cache/dnf \ - echo "Building for architecture: ${TARGETARCH}" && \ - PACKAGES="perl mesa-libGL skopeo libxcrypt-compat" && \ - # Additional dev tools only for s390x - if [ "$TARGETARCH" = "s390x" ]; then \ - PACKAGES="$PACKAGES gcc gcc-c++ make openssl-devel autoconf automake libtool cmake python3-devel pybind11-devel openblas-devel unixODBC-devel openssl zlib-devel"; \ - fi && \ - if [ "$TARGETARCH" = "ppc64le" ]; then \ - PACKAGES="$PACKAGES git gcc-toolset-13 make wget unzip rust cargo unixODBC-devel cmake ninja-build"; \ - fi && \ - if [ -n "$PACKAGES" ]; then \ - echo "Installing: $PACKAGES" && \ - dnf install -y $PACKAGES && \ - dnf clean all && rm -rf /var/cache/yum; \ - fi +RUN --mount=type=cache,target=/var/cache/dnf /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Building for architecture: ${TARGETARCH}" +PACKAGES="perl mesa-libGL skopeo libxcrypt-compat" +# Additional dev tools only for s390x +if [ "$TARGETARCH" = "s390x" ]; then + PACKAGES="$PACKAGES gcc gcc-c++ make openssl-devel autoconf automake libtool cmake python3-devel pybind11-devel openblas-devel unixODBC-devel openssl zlib-devel" +fi +if [ "$TARGETARCH" = "ppc64le" ]; then + PACKAGES="$PACKAGES git gcc-toolset-13 make wget unzip rust cargo unixODBC-devel cmake ninja-build" +fi +if [ -n "$PACKAGES" ]; then + echo "Installing: $PACKAGES" + dnf install -y $PACKAGES + dnf clean all + rm -rf /var/cache/yum +fi +EOF RUN /bin/bash <<'EOF' set -Eeuxo pipefail @@ -129,74 +132,79 @@ USER 0 WORKDIR /tmp/build-wheels # Set pyarrow version for s390x -RUN if [ "$TARGETARCH" = "s390x" ]; then \ - echo 'export PYARROW_VERSION=17.0.0' >> /etc/profile.d/s390x.sh; \ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "s390x" ]; then + echo 'export PYARROW_VERSION=17.0.0' >> /etc/profile.d/s390x.sh fi +EOF # Build pyarrow optimized for s390x RUN --mount=type=cache,target=/root/.cache/pip \ - --mount=type=cache,target=/root/.cache/dnf \ - if [ "$TARGETARCH" = "s390x" ]; then \ - # Install build dependencies - dnf install -y cmake make gcc-c++ pybind11-devel wget git \ - openssl-devel zlib-devel bzip2-devel lz4-devel \ - ninja-build && \ - dnf clean all && \ - # Source the environment variables - source /etc/profile.d/s390x.sh && \ - # Clone specific version of arrow - git clone -b apache-arrow-${PYARROW_VERSION} https://github.com/apache/arrow.git && \ - cd arrow && \ - # Set environment variables for build - export ARROW_HOME=/usr/local && \ - export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH && \ - export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH && \ - # Build C++ library first - cd cpp && \ - mkdir build && cd build && \ - cmake -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=$ARROW_HOME \ - -DARROW_PYTHON=ON \ - -DARROW_PARQUET=ON \ - -DARROW_ORC=ON \ - -DARROW_FILESYSTEM=ON \ - -DARROW_JSON=ON \ - -DARROW_CSV=ON \ - -DARROW_DATASET=ON \ - -DARROW_WITH_LZ4=ON \ - -DARROW_WITH_ZSTD=ON \ - -DARROW_WITH_SNAPPY=OFF \ - -DARROW_WITH_BZ2=ON \ - -DARROW_WITH_ZLIB=ON \ - -DARROW_BUILD_TESTS=OFF \ - -DARROW_BUILD_BENCHMARKS=OFF \ - -DARROW_USE_CCACHE=OFF \ - -GNinja \ - .. && \ - ninja install && \ - cd ../../python && \ - # Install Python build requirements - pip install --no-cache-dir -r requirements-build.txt && \ - # Build Python package - PYARROW_WITH_PARQUET=1 \ - PYARROW_WITH_DATASET=1 \ - PYARROW_WITH_FILESYSTEM=1 \ - PYARROW_WITH_JSON=1 \ - PYARROW_WITH_CSV=1 \ - PYARROW_WITH_LZ4=1 \ - PYARROW_WITH_ZSTD=1 \ - PYARROW_WITH_BZ2=1 \ - PYARROW_BUNDLE_ARROW_CPP=1 \ - PYARROW_PARALLEL=$(nproc) \ - python setup.py build_ext --build-type=release --bundle-arrow-cpp bdist_wheel && \ - mkdir -p /tmp/wheels && \ - cp dist/pyarrow-*.whl /tmp/wheels/ && \ - # Ensure wheels directory exists and has content - ls -la /tmp/wheels/; \ - else \ - # Create empty wheels directory for non-s390x - mkdir -p /tmp/wheels; \ - fi + --mount=type=cache,target=/root/.cache/dnf /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "s390x" ]; then + # Install build dependencies + dnf install -y cmake make gcc-c++ pybind11-devel wget git \ + openssl-devel zlib-devel bzip2-devel lz4-devel \ + ninja-build + dnf clean all + # Source the environment variables + source /etc/profile.d/s390x.sh + # Clone specific version of arrow + git clone -b apache-arrow-${PYARROW_VERSION} https://github.com/apache/arrow.git + cd arrow + # Set environment variables for build + export ARROW_HOME=/usr/local + export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH + export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH + # Build C++ library first + cd cpp + mkdir build && cd build + cmake -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$ARROW_HOME \ + -DARROW_PYTHON=ON \ + -DARROW_PARQUET=ON \ + -DARROW_ORC=ON \ + -DARROW_FILESYSTEM=ON \ + -DARROW_JSON=ON \ + -DARROW_CSV=ON \ + -DARROW_DATASET=ON \ + -DARROW_WITH_LZ4=ON \ + -DARROW_WITH_ZSTD=ON \ + -DARROW_WITH_SNAPPY=OFF \ + -DARROW_WITH_BZ2=ON \ + -DARROW_WITH_ZLIB=ON \ + -DARROW_BUILD_TESTS=OFF \ + -DARROW_BUILD_BENCHMARKS=OFF \ + -DARROW_USE_CCACHE=OFF \ + -GNinja \ + .. + ninja install + cd ../../python + # Install Python build requirements + pip install --no-cache-dir -r requirements-build.txt + # Build Python package + PYARROW_WITH_PARQUET=1 \ + PYARROW_WITH_DATASET=1 \ + PYARROW_WITH_FILESYSTEM=1 \ + PYARROW_WITH_JSON=1 \ + PYARROW_WITH_CSV=1 \ + PYARROW_WITH_LZ4=1 \ + PYARROW_WITH_ZSTD=1 \ + PYARROW_WITH_BZ2=1 \ + PYARROW_BUNDLE_ARROW_CPP=1 \ + PYARROW_PARALLEL=$(nproc) \ + python setup.py build_ext --build-type=release --bundle-arrow-cpp bdist_wheel + mkdir -p /tmp/wheels + cp dist/pyarrow-*.whl /tmp/wheels/ + # Ensure wheels directory exists and has content + ls -la /tmp/wheels/ +else + # Create empty wheels directory for non-s390x + mkdir -p /tmp/wheels +fi +EOF ################################### # openblas builder stage for ppc64le @@ -214,14 +222,18 @@ ENV OPENBLAS_VERSION=0.3.30 RUN echo "openblas-builder stage TARGETARCH: ${TARGETARCH}" # Download and build OpenBLAS -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - source /opt/rh/gcc-toolset-13/enable && \ - wget --progress=dot:giga https://github.com/OpenMathLib/OpenBLAS/releases/download/v${OPENBLAS_VERSION}/OpenBLAS-${OPENBLAS_VERSION}.zip && \ - unzip OpenBLAS-${OPENBLAS_VERSION}.zip && cd OpenBLAS-${OPENBLAS_VERSION} && \ - make -j$(nproc) TARGET=POWER9 BINARY=64 USE_OPENMP=1 USE_THREAD=1 NUM_THREADS=120 DYNAMIC_ARCH=1 INTERFACE64=0; \ - else \ - echo "Not ppc64le, skipping OpenBLAS build" && mkdir -p /root/OpenBLAS-dummy; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ]; then + source /opt/rh/gcc-toolset-13/enable + wget --progress=dot:giga https://github.com/OpenMathLib/OpenBLAS/releases/download/v${OPENBLAS_VERSION}/OpenBLAS-${OPENBLAS_VERSION}.zip + unzip OpenBLAS-${OPENBLAS_VERSION}.zip && cd OpenBLAS-${OPENBLAS_VERSION} + make -j$(nproc) TARGET=POWER9 BINARY=64 USE_OPENMP=1 USE_THREAD=1 NUM_THREADS=120 DYNAMIC_ARCH=1 INTERFACE64=0 +else + echo "Not ppc64le, skipping OpenBLAS build" + mkdir -p /root/OpenBLAS-dummy +fi +EOF ################################### # onnx builder stage for ppc64le @@ -237,18 +249,22 @@ ENV ONNX_VERSION=1.19.0 RUN echo "onnx-builder stage TARGETARCH: ${TARGETARCH}" -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - source /opt/rh/gcc-toolset-13/enable && \ - git clone --recursive https://github.com/onnx/onnx.git && \ - cd onnx && git checkout v${ONNX_VERSION} && \ - git submodule update --init --recursive && \ - pip install --no-cache-dir -r requirements.txt && \ - CMAKE_ARGS="-DPython3_EXECUTABLE=$(which python3.12)" && \ - export CMAKE_ARGS && \ - pip wheel . -w /onnx_wheels; \ - else \ - echo "Not ppc64le, skipping ONNX build" && mkdir -p /onnx_wheels; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ]; then + source /opt/rh/gcc-toolset-13/enable + git clone --recursive https://github.com/onnx/onnx.git + cd onnx && git checkout v${ONNX_VERSION} + git submodule update --init --recursive + pip install --no-cache-dir -r requirements.txt + CMAKE_ARGS="-DPython3_EXECUTABLE=$(which python3.12)" + export CMAKE_ARGS + pip wheel . -w /onnx_wheels +else + echo "Not ppc64le, skipping ONNX build" + mkdir -p /onnx_wheels +fi +EOF ################################### # pyarrow builder stage for ppc64le @@ -264,50 +280,54 @@ ENV PYARROW_VERSION=17.0.0 RUN echo "arrow-builder stage TARGETARCH: ${TARGETARCH}" -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - git clone -b apache-arrow-${PYARROW_VERSION} https://github.com/apache/arrow.git --recursive && \ - cd arrow && rm -rf .git && mkdir dist && \ - pip3 install --no-cache-dir -r python/requirements-build.txt && \ - ARROW_HOME=$(pwd)/dist && \ - export ARROW_HOME && \ - LD_LIBRARY_PATH=$(pwd)/dist/lib:$LD_LIBRARY_PATH && \ - export LD_LIBRARY_PATH && \ - export CMAKE_PREFIX_PATH=$ARROW_HOME:$CMAKE_PREFIX_PATH && \ - export PARQUET_TEST_DATA="${PWD}/cpp/submodules/parquet-testing/data" && \ - export ARROW_TEST_DATA="${PWD}/testing/data" && \ - cmake -S cpp -B cpp/build \ - -DCMAKE_INSTALL_PREFIX=$ARROW_HOME \ - -DCMAKE_BUILD_TYPE=release \ - -DARROW_WITH_BZ2=ON \ - -DARROW_WITH_ZLIB=ON \ - -DARROW_WITH_ZSTD=ON \ - -DARROW_WITH_LZ4=ON \ - -DARROW_WITH_SNAPPY=ON \ - -DARROW_WITH_BROTLI=ON \ - -DARROW_DATASET=ON \ - -DARROW_FILESYSTEM=ON \ - -DARROW_COMPUTE=ON \ - -DARROW_JSON=ON \ - -DARROW_CSV=ON \ - -DARROW_PYTHON=ON \ - -DARROW_PARQUET=ON \ - -DARROW_BUILD_SHARED=ON \ - -DARROW_BUILD_TESTS=OFF && \ - cd cpp/build && \ - make -j20 install && \ - export PYARROW_PARALLEL=20 && \ - export PYARROW_WITH_PARQUET=1 && \ - export PYARROW_WITH_DATASET=1 && \ - export PYARROW_BUNDLE_ARROW_CPP=1 && \ - pip3 install --no-cache-dir wheel && \ - cd ../../python && \ - python setup.py build_ext \ - --build-type=release \ - --bundle-arrow-cpp \ - bdist_wheel --dist-dir /arrowwheels; \ - else \ - echo "Not ppc64le, skipping pyarrow build" && mkdir -p /arrowwheels; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ]; then + git clone -b apache-arrow-${PYARROW_VERSION} https://github.com/apache/arrow.git --recursive + cd arrow && rm -rf .git && mkdir dist + pip3 install --no-cache-dir -r python/requirements-build.txt + ARROW_HOME=$(pwd)/dist + export ARROW_HOME + LD_LIBRARY_PATH=$(pwd)/dist/lib:$LD_LIBRARY_PATH + export LD_LIBRARY_PATH + export CMAKE_PREFIX_PATH=$ARROW_HOME:$CMAKE_PREFIX_PATH + export PARQUET_TEST_DATA="${PWD}/cpp/submodules/parquet-testing/data" + export ARROW_TEST_DATA="${PWD}/testing/data" + cmake -S cpp -B cpp/build \ + -DCMAKE_INSTALL_PREFIX=$ARROW_HOME \ + -DCMAKE_BUILD_TYPE=release \ + -DARROW_WITH_BZ2=ON \ + -DARROW_WITH_ZLIB=ON \ + -DARROW_WITH_ZSTD=ON \ + -DARROW_WITH_LZ4=ON \ + -DARROW_WITH_SNAPPY=ON \ + -DARROW_WITH_BROTLI=ON \ + -DARROW_DATASET=ON \ + -DARROW_FILESYSTEM=ON \ + -DARROW_COMPUTE=ON \ + -DARROW_JSON=ON \ + -DARROW_CSV=ON \ + -DARROW_PYTHON=ON \ + -DARROW_PARQUET=ON \ + -DARROW_BUILD_SHARED=ON \ + -DARROW_BUILD_TESTS=OFF + cd cpp/build + make -j20 install + export PYARROW_PARALLEL=20 + export PYARROW_WITH_PARQUET=1 + export PYARROW_WITH_DATASET=1 + export PYARROW_BUNDLE_ARROW_CPP=1 + pip3 install --no-cache-dir wheel + cd ../../python + python setup.py build_ext \ + --build-type=release \ + --bundle-arrow-cpp \ + bdist_wheel --dist-dir /arrowwheels +else + echo "Not ppc64le, skipping pyarrow build" + mkdir -p /arrowwheels +fi +EOF ####################### # runtime-datascience # @@ -335,25 +355,33 @@ COPY --from=openblas-builder /root/OpenBLAS-* /openblas COPY --from=onnx-builder /onnx_wheels /tmp/onnx_wheels COPY --from=arrow-builder /arrowwheels /tmp/arrowwheels -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - echo "Installing ppc64le ONNX, pyarrow wheels and OpenBLAS..." && \ - HOME=/root pip install --no-cache-dir /tmp/onnx_wheels/*.whl /tmp/arrowwheels/*.whl && \ - if [ -d "/openblas" ] && [ "$(ls -A /openblas 2>/dev/null)" ]; then \ - PREFIX=/usr/local make -C /openblas install; \ - fi && rm -rf /openblas /tmp/onnx_wheels /tmp/arrowwheels; \ - else \ - echo "Skipping architecture-specific wheel installs for (${TARGETARCH})" && \ - rm -rf /tmp/wheels /openblas /tmp/onnx_wheels /tmp/arrowwheels; \ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ]; then + echo "Installing ppc64le ONNX, pyarrow wheels and OpenBLAS..." + HOME=/root pip install --no-cache-dir /tmp/onnx_wheels/*.whl /tmp/arrowwheels/*.whl + if [ -d "/openblas" ] && [ "$(ls -A /openblas 2>/dev/null)" ]; then + PREFIX=/usr/local make -C /openblas install fi + rm -rf /openblas /tmp/onnx_wheels /tmp/arrowwheels +else + echo "Skipping architecture-specific wheel installs for (${TARGETARCH})" + rm -rf /tmp/wheels /openblas /tmp/onnx_wheels /tmp/arrowwheels +fi +EOF USER 0 # Copy wheels from build stage (s390x only) COPY --from=s390x-builder /tmp/wheels /tmp/wheels -RUN if [ "$TARGETARCH" = "s390x" ]; then \ - pip install --no-cache-dir /tmp/wheels/*.whl && rm -rf /tmp/wheels; \ -else \ - echo "Skipping wheel install for $TARGETARCH"; \ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "s390x" ]; then + pip install --no-cache-dir /tmp/wheels/*.whl + rm -rf /tmp/wheels +else + echo "Skipping wheel install for $TARGETARCH" fi +EOF # Install Python packages from pylock.toml @@ -361,28 +389,30 @@ COPY ${DATASCIENCE_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${DATASCIENCE_SOURCE_CODE}/utils ./utils/ -RUN --mount=type=cache,target=/root/.cache/pip \ - echo "Installing softwares and packages" && \ - if [ "$TARGETARCH" = "ppc64le" ]; then \ - export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig; \ - export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:$LD_LIBRARY_PATH && \ - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml; \ - elif [ "$TARGETARCH" = "s390x" ]; then \ - # For s390x, we need special flags and environment variables for building packages - GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ - CFLAGS="-O3" CXXFLAGS="-O3" \ - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml; \ - else \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml; \ - fi && \ - # change ownership to default user (all packages were installed as root and has root:root ownership - chown -R 1001:0 /opt/app-root/ && \ - chmod -R g=u /opt/app-root && \ - # Fix permissions to support pip in Openshift environments - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN --mount=type=cache,target=/root/.cache/pip /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +if [ "$TARGETARCH" = "ppc64le" ]; then + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig + export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:$LD_LIBRARY_PATH + uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +elif [ "$TARGETARCH" = "s390x" ]; then + # For s390x, we need special flags and environment variables for building packages + GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ + CFLAGS="-O3" CXXFLAGS="-O3" \ + uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +else + # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, + # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. + uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +fi +# change ownership to default user (all packages were installed as root and has root:root ownership +chown -R 1001:0 /opt/app-root/ +chmod -R g=u /opt/app-root +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF USER 1001 diff --git a/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu b/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu index d1416b47ac..94f0e16041 100644 --- a/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu +++ b/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu @@ -34,14 +34,18 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN ARCH=$(uname -m) && \ - echo "Detected architecture: $ARCH" && \ - PACKAGES="perl mesa-libGL skopeo" && \ - if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then \ - PACKAGES="$PACKAGES gcc g++ make openssl-devel autoconf automake libtool cmake"; \ - fi && \ - dnf install -y $PACKAGES && \ - dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +ARCH=$(uname -m) +echo "Detected architecture: $ARCH" +PACKAGES="perl mesa-libGL skopeo" +if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then + PACKAGES="$PACKAGES gcc g++ make openssl-devel autoconf automake libtool cmake" +fi +dnf install -y $PACKAGES +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -85,12 +89,15 @@ COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${MINIMAL_SOURCE_CODE}/utils ./utils/ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda b/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda index ecda8b70e3..df407700d7 100644 --- a/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda +++ b/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda @@ -36,7 +36,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -80,12 +85,15 @@ COPY ${PYTORCH_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${PYTORCH_SOURCE_CODE}/utils ./utils/ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda b/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda index 17dc8d6faf..ccefee2bcd 100644 --- a/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda +++ b/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda @@ -36,7 +36,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -80,12 +85,15 @@ COPY ${PYTORCH_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${PYTORCH_SOURCE_CODE}/utils ./utils/ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm b/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm index 781688d9fa..95fd255e5a 100644 --- a/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm +++ b/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm @@ -34,7 +34,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -80,15 +85,18 @@ COPY ${PYTORCH_SOURCE_CODE}/utils ./utils/ # Copy utility script COPY ${PYTORCH_SOURCE_CODE}/de-vendor-torch.sh ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # De-vendor the ROCm libs that are embedded in Pytorch \ - ./de-vendor-torch.sh && \ - rm ./de-vendor-torch.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# De-vendor the ROCm libs that are embedded in Pytorch +./de-vendor-torch.sh +rm ./de-vendor-torch.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm b/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm index 4547435b72..7668b1e44e 100644 --- a/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm +++ b/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm @@ -34,7 +34,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -79,14 +84,17 @@ COPY ${TENSORFLOW_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${TENSORFLOW_SOURCE_CODE}/utils ./utils/ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - # Not using --build-constraints=./requirements.txt because error: Unnamed requirements are not allowed as constraints (found: `https://repo.radeon.com/rocm/manylinux/rocm-rel-6.4/ - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +# Not using --build-constraints=./requirements.txt because error: Unnamed requirements are not allowed as constraints (found: `https://repo.radeon.com/rocm/manylinux/rocm-rel-6.4/ +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF COPY ${JUPYTER_REUSABLE_UTILS}/usercustomize.pth ${JUPYTER_REUSABLE_UTILS}/monkey_patch_protobuf_6x.py /opt/app-root/lib/python3.12/site-packages/ diff --git a/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda b/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda index 0160123ad7..8ad8352c5e 100644 --- a/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda +++ b/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda @@ -38,7 +38,12 @@ EOF # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -83,13 +88,16 @@ COPY ${TENSORFLOW_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${TENSORFLOW_SOURCE_CODE}/utils ./utils/ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF COPY ${JUPYTER_REUSABLE_UTILS}/usercustomize.pth ${JUPYTER_REUSABLE_UTILS}/monkey_patch_protobuf_6x.py /opt/app-root/lib/python3.12/site-packages/ From fa24b684f9507167fe9c611d264d3a5290b32009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Fri, 7 Nov 2025 15:33:16 +0100 Subject: [PATCH 15/43] NO-JIRA: fix(runtime/*/Dockerfile*): use env substitution to avoid adding empty entry to LD_LIBRARY_PATH (#2656) ``` + cd arrow + export ARROW_HOME=/usr/local + ARROW_HOME=/usr/local /bin/bash: line 15: LD_LIBRARY_PATH: unbound variable Error: building at STEP "RUN --mount=type=cache,target=/root/.cache/pip --mount=type=cache,target=/root/.cache/dnf /bin/bash <<'EOF'": while running runtime: exit status 1 ``` --- runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu b/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu index 82e17057b5..560993c3e2 100644 --- a/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu +++ b/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu @@ -61,7 +61,7 @@ RUN /bin/bash <<'EOF' set -Eeuxo pipefail if [ "$TARGETARCH" = "ppc64le" ]; then cat > /etc/profile.d/ppc64le.sh <<'PROFILE_EOF' export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ -export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} export OPENBLAS_VERSION=0.3.30 export ONNX_VERSION=1.19.0 export PYARROW_VERSION=17.0.0 @@ -156,8 +156,8 @@ if [ "$TARGETARCH" = "s390x" ]; then cd arrow # Set environment variables for build export ARROW_HOME=/usr/local - export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH - export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH + export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} + export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH} # Build C++ library first cd cpp mkdir build && cd build @@ -288,7 +288,7 @@ if [ "$TARGETARCH" = "ppc64le" ]; then pip3 install --no-cache-dir -r python/requirements-build.txt ARROW_HOME=$(pwd)/dist export ARROW_HOME - LD_LIBRARY_PATH=$(pwd)/dist/lib:$LD_LIBRARY_PATH + LD_LIBRARY_PATH=$(pwd)/dist/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} export LD_LIBRARY_PATH export CMAKE_PREFIX_PATH=$ARROW_HOME:$CMAKE_PREFIX_PATH export PARQUET_TEST_DATA="${PWD}/cpp/submodules/parquet-testing/data" @@ -394,7 +394,7 @@ set -Eeuxo pipefail echo "Installing softwares and packages" if [ "$TARGETARCH" = "ppc64le" ]; then export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig - export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:$LD_LIBRARY_PATH + export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml elif [ "$TARGETARCH" = "s390x" ]; then # For s390x, we need special flags and environment variables for building packages From 9861f2e76defc35c976e9e5d7c051bd2190da7cc Mon Sep 17 00:00:00 2001 From: Daniel Lutz Date: Fri, 7 Nov 2025 19:06:25 -0300 Subject: [PATCH 16/43] chore(deps): update package version of Codeflare-SDK (0.32.1) and lock dependencies (#2658) --- jupyter/datascience/ubi9-python-3.12/pylock.toml | 6 +++--- jupyter/datascience/ubi9-python-3.12/pyproject.toml | 2 +- jupyter/pytorch/ubi9-python-3.12/pylock.toml | 6 +++--- jupyter/pytorch/ubi9-python-3.12/pyproject.toml | 2 +- jupyter/rocm/pytorch/ubi9-python-3.12/pylock.toml | 6 +++--- jupyter/rocm/pytorch/ubi9-python-3.12/pyproject.toml | 2 +- jupyter/rocm/tensorflow/ubi9-python-3.12/pylock.toml | 6 +++--- jupyter/rocm/tensorflow/ubi9-python-3.12/pyproject.toml | 2 +- jupyter/tensorflow/ubi9-python-3.12/pylock.toml | 6 +++--- jupyter/tensorflow/ubi9-python-3.12/pyproject.toml | 2 +- jupyter/trustyai/ubi9-python-3.12/pylock.toml | 6 +++--- jupyter/trustyai/ubi9-python-3.12/pyproject.toml | 2 +- runtimes/datascience/ubi9-python-3.12/pylock.toml | 6 +++--- runtimes/datascience/ubi9-python-3.12/pyproject.toml | 2 +- runtimes/pytorch/ubi9-python-3.12/pylock.toml | 6 +++--- runtimes/pytorch/ubi9-python-3.12/pyproject.toml | 2 +- runtimes/rocm-pytorch/ubi9-python-3.12/pylock.toml | 6 +++--- runtimes/rocm-pytorch/ubi9-python-3.12/pyproject.toml | 2 +- runtimes/rocm-tensorflow/ubi9-python-3.12/pylock.toml | 6 +++--- runtimes/rocm-tensorflow/ubi9-python-3.12/pyproject.toml | 2 +- runtimes/tensorflow/ubi9-python-3.12/pylock.toml | 6 +++--- runtimes/tensorflow/ubi9-python-3.12/pyproject.toml | 2 +- 22 files changed, 44 insertions(+), 44 deletions(-) diff --git a/jupyter/datascience/ubi9-python-3.12/pylock.toml b/jupyter/datascience/ubi9-python-3.12/pylock.toml index 88b9558759..d9d6fba97c 100644 --- a/jupyter/datascience/ubi9-python-3.12/pylock.toml +++ b/jupyter/datascience/ubi9-python-3.12/pylock.toml @@ -548,10 +548,10 @@ wheels = [{ url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a [[packages]] name = "codeflare-sdk" -version = "0.32.0" +version = "0.32.1" marker = "platform_machine != 'ppc64le' and platform_machine != 's390x'" -sdist = { url = "https://files.pythonhosted.org/packages/75/84/fd7f089111ddae5896059f28f02997d9b7650ff97ccf8917e35964a12795/codeflare_sdk-0.32.0.tar.gz", upload-time = 2025-10-16T11:51:24Z, size = 150607, hashes = { sha256 = "8cc4bc9e471c8dd2ec5baacda94d5f17a0bbbf3d4a944a213307c37521e1a300" } } -wheels = [{ url = "https://files.pythonhosted.org/packages/9e/9f/5007a20bf72f86400cfd935e8ac53888db024fbbdf2f278d9d6fcadbb017/codeflare_sdk-0.32.0-py3-none-any.whl", upload-time = 2025-10-16T11:51:22Z, size = 219307, hashes = { sha256 = "583910545d4e97c8ca18692150d3a3bdc45ed37dfb3cfda2f891a191b584d3f8" } }] +sdist = { url = "https://files.pythonhosted.org/packages/47/b8/5b5942be8a430a1c67d90beca9b20f81fd7b54613e9758b091c3a5d8ff06/codeflare_sdk-0.32.1.tar.gz", upload-time = 2025-11-07T21:07:06Z, size = 151147, hashes = { sha256 = "870cb62610b3585014e62e1069051b3bbf02ab2a9e10d5e18e1f20866a3f7a44" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/46/5223a5b7651d36251789e5426ce8caef579961a4d25a73db23ad4f4ebe22/codeflare_sdk-0.32.1-py3-none-any.whl", upload-time = 2025-11-07T21:07:04Z, size = 219859, hashes = { sha256 = "5f0d319d950f6ff9fa7e94a7ae4502c41d8c487a090cd7497ef95ff65c1b0951" } }] [[packages]] name = "colorama" diff --git a/jupyter/datascience/ubi9-python-3.12/pyproject.toml b/jupyter/datascience/ubi9-python-3.12/pyproject.toml index cf69761b37..f960974b2a 100644 --- a/jupyter/datascience/ubi9-python-3.12/pyproject.toml +++ b/jupyter/datascience/ubi9-python-3.12/pyproject.toml @@ -17,7 +17,7 @@ dependencies = [ "skl2onnx~=1.19.1", "onnxconverter-common~=1.13.0", # Required for skl2onnx, as upgraded version is not compatible with protobuf "kubeflow-training==1.9.3", - "codeflare-sdk~=0.32.0; platform_machine != 'ppc64le' and platform_machine != 's390x'", + "codeflare-sdk~=0.32.1; platform_machine != 'ppc64le' and platform_machine != 's390x'", "feast~=0.55.0", # DB connectors diff --git a/jupyter/pytorch/ubi9-python-3.12/pylock.toml b/jupyter/pytorch/ubi9-python-3.12/pylock.toml index 4f421705e6..2097fab142 100644 --- a/jupyter/pytorch/ubi9-python-3.12/pylock.toml +++ b/jupyter/pytorch/ubi9-python-3.12/pylock.toml @@ -552,9 +552,9 @@ wheels = [{ url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a [[packages]] name = "codeflare-sdk" -version = "0.32.0" -sdist = { url = "https://files.pythonhosted.org/packages/75/84/fd7f089111ddae5896059f28f02997d9b7650ff97ccf8917e35964a12795/codeflare_sdk-0.32.0.tar.gz", upload-time = 2025-10-16T11:51:24Z, size = 150607, hashes = { sha256 = "8cc4bc9e471c8dd2ec5baacda94d5f17a0bbbf3d4a944a213307c37521e1a300" } } -wheels = [{ url = "https://files.pythonhosted.org/packages/9e/9f/5007a20bf72f86400cfd935e8ac53888db024fbbdf2f278d9d6fcadbb017/codeflare_sdk-0.32.0-py3-none-any.whl", upload-time = 2025-10-16T11:51:22Z, size = 219307, hashes = { sha256 = "583910545d4e97c8ca18692150d3a3bdc45ed37dfb3cfda2f891a191b584d3f8" } }] +version = "0.32.1" +sdist = { url = "https://files.pythonhosted.org/packages/47/b8/5b5942be8a430a1c67d90beca9b20f81fd7b54613e9758b091c3a5d8ff06/codeflare_sdk-0.32.1.tar.gz", upload-time = 2025-11-07T21:07:06Z, size = 151147, hashes = { sha256 = "870cb62610b3585014e62e1069051b3bbf02ab2a9e10d5e18e1f20866a3f7a44" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/46/5223a5b7651d36251789e5426ce8caef579961a4d25a73db23ad4f4ebe22/codeflare_sdk-0.32.1-py3-none-any.whl", upload-time = 2025-11-07T21:07:04Z, size = 219859, hashes = { sha256 = "5f0d319d950f6ff9fa7e94a7ae4502c41d8c487a090cd7497ef95ff65c1b0951" } }] [[packages]] name = "colorama" diff --git a/jupyter/pytorch/ubi9-python-3.12/pyproject.toml b/jupyter/pytorch/ubi9-python-3.12/pyproject.toml index 9feed37e7a..d0a96f8ad6 100644 --- a/jupyter/pytorch/ubi9-python-3.12/pyproject.toml +++ b/jupyter/pytorch/ubi9-python-3.12/pyproject.toml @@ -21,7 +21,7 @@ dependencies = [ "scipy~=1.16.2", "skl2onnx~=1.19.1", "onnxconverter-common~=1.13.0", # Required for skl2onnx, as upgraded version is not compatible with protobuf - "codeflare-sdk~=0.32.0", + "codeflare-sdk~=0.32.1", "kubeflow-training==1.9.3", "feast~=0.55.0", diff --git a/jupyter/rocm/pytorch/ubi9-python-3.12/pylock.toml b/jupyter/rocm/pytorch/ubi9-python-3.12/pylock.toml index c4c7fb8b02..c20b71736c 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.12/pylock.toml +++ b/jupyter/rocm/pytorch/ubi9-python-3.12/pylock.toml @@ -552,9 +552,9 @@ wheels = [{ url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a [[packages]] name = "codeflare-sdk" -version = "0.32.0" -sdist = { url = "https://files.pythonhosted.org/packages/75/84/fd7f089111ddae5896059f28f02997d9b7650ff97ccf8917e35964a12795/codeflare_sdk-0.32.0.tar.gz", upload-time = 2025-10-16T11:51:24Z, size = 150607, hashes = { sha256 = "8cc4bc9e471c8dd2ec5baacda94d5f17a0bbbf3d4a944a213307c37521e1a300" } } -wheels = [{ url = "https://files.pythonhosted.org/packages/9e/9f/5007a20bf72f86400cfd935e8ac53888db024fbbdf2f278d9d6fcadbb017/codeflare_sdk-0.32.0-py3-none-any.whl", upload-time = 2025-10-16T11:51:22Z, size = 219307, hashes = { sha256 = "583910545d4e97c8ca18692150d3a3bdc45ed37dfb3cfda2f891a191b584d3f8" } }] +version = "0.32.1" +sdist = { url = "https://files.pythonhosted.org/packages/47/b8/5b5942be8a430a1c67d90beca9b20f81fd7b54613e9758b091c3a5d8ff06/codeflare_sdk-0.32.1.tar.gz", upload-time = 2025-11-07T21:07:06Z, size = 151147, hashes = { sha256 = "870cb62610b3585014e62e1069051b3bbf02ab2a9e10d5e18e1f20866a3f7a44" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/46/5223a5b7651d36251789e5426ce8caef579961a4d25a73db23ad4f4ebe22/codeflare_sdk-0.32.1-py3-none-any.whl", upload-time = 2025-11-07T21:07:04Z, size = 219859, hashes = { sha256 = "5f0d319d950f6ff9fa7e94a7ae4502c41d8c487a090cd7497ef95ff65c1b0951" } }] [[packages]] name = "colorama" diff --git a/jupyter/rocm/pytorch/ubi9-python-3.12/pyproject.toml b/jupyter/rocm/pytorch/ubi9-python-3.12/pyproject.toml index b1fd5445a1..00279e7325 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.12/pyproject.toml +++ b/jupyter/rocm/pytorch/ubi9-python-3.12/pyproject.toml @@ -22,7 +22,7 @@ dependencies = [ "scipy~=1.16.2", "skl2onnx~=1.19.1", "onnxconverter-common~=1.13.0", # Required for skl2onnx, as upgraded version is not compatible with protobuf - "codeflare-sdk~=0.32.0", + "codeflare-sdk~=0.32.1", "kubeflow-training==1.9.3", "feast~=0.55.0", diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.12/pylock.toml b/jupyter/rocm/tensorflow/ubi9-python-3.12/pylock.toml index c3906f416b..ac3965ae6c 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.12/pylock.toml +++ b/jupyter/rocm/tensorflow/ubi9-python-3.12/pylock.toml @@ -546,9 +546,9 @@ wheels = [{ url = "https://files.pythonhosted.org/packages/93/27/bf74dc1494625c3 [[packages]] name = "codeflare-sdk" -version = "0.32.0" -sdist = { url = "https://files.pythonhosted.org/packages/75/84/fd7f089111ddae5896059f28f02997d9b7650ff97ccf8917e35964a12795/codeflare_sdk-0.32.0.tar.gz", upload-time = 2025-10-16T11:51:24Z, size = 150607, hashes = { sha256 = "8cc4bc9e471c8dd2ec5baacda94d5f17a0bbbf3d4a944a213307c37521e1a300" } } -wheels = [{ url = "https://files.pythonhosted.org/packages/9e/9f/5007a20bf72f86400cfd935e8ac53888db024fbbdf2f278d9d6fcadbb017/codeflare_sdk-0.32.0-py3-none-any.whl", upload-time = 2025-10-16T11:51:22Z, size = 219307, hashes = { sha256 = "583910545d4e97c8ca18692150d3a3bdc45ed37dfb3cfda2f891a191b584d3f8" } }] +version = "0.32.1" +sdist = { url = "https://files.pythonhosted.org/packages/47/b8/5b5942be8a430a1c67d90beca9b20f81fd7b54613e9758b091c3a5d8ff06/codeflare_sdk-0.32.1.tar.gz", upload-time = 2025-11-07T21:07:06Z, size = 151147, hashes = { sha256 = "870cb62610b3585014e62e1069051b3bbf02ab2a9e10d5e18e1f20866a3f7a44" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/46/5223a5b7651d36251789e5426ce8caef579961a4d25a73db23ad4f4ebe22/codeflare_sdk-0.32.1-py3-none-any.whl", upload-time = 2025-11-07T21:07:04Z, size = 219859, hashes = { sha256 = "5f0d319d950f6ff9fa7e94a7ae4502c41d8c487a090cd7497ef95ff65c1b0951" } }] [[packages]] name = "colorama" diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.12/pyproject.toml b/jupyter/rocm/tensorflow/ubi9-python-3.12/pyproject.toml index fed9d67688..e15e0632bc 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.12/pyproject.toml +++ b/jupyter/rocm/tensorflow/ubi9-python-3.12/pyproject.toml @@ -25,7 +25,7 @@ dependencies = [ "scipy~=1.16.2", "skl2onnx~=1.19.1", "onnxconverter-common~=1.13.0", # Required for skl2onnx, as upgraded version is not compatible with protobuf - "codeflare-sdk~=0.32.0", + "codeflare-sdk~=0.32.1", "kubeflow-training==1.9.3", # DB connectors diff --git a/jupyter/tensorflow/ubi9-python-3.12/pylock.toml b/jupyter/tensorflow/ubi9-python-3.12/pylock.toml index 3afe398a42..c85113b991 100644 --- a/jupyter/tensorflow/ubi9-python-3.12/pylock.toml +++ b/jupyter/tensorflow/ubi9-python-3.12/pylock.toml @@ -558,9 +558,9 @@ wheels = [{ url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a [[packages]] name = "codeflare-sdk" -version = "0.32.0" -sdist = { url = "https://files.pythonhosted.org/packages/75/84/fd7f089111ddae5896059f28f02997d9b7650ff97ccf8917e35964a12795/codeflare_sdk-0.32.0.tar.gz", upload-time = 2025-10-16T11:51:24Z, size = 150607, hashes = { sha256 = "8cc4bc9e471c8dd2ec5baacda94d5f17a0bbbf3d4a944a213307c37521e1a300" } } -wheels = [{ url = "https://files.pythonhosted.org/packages/9e/9f/5007a20bf72f86400cfd935e8ac53888db024fbbdf2f278d9d6fcadbb017/codeflare_sdk-0.32.0-py3-none-any.whl", upload-time = 2025-10-16T11:51:22Z, size = 219307, hashes = { sha256 = "583910545d4e97c8ca18692150d3a3bdc45ed37dfb3cfda2f891a191b584d3f8" } }] +version = "0.32.1" +sdist = { url = "https://files.pythonhosted.org/packages/47/b8/5b5942be8a430a1c67d90beca9b20f81fd7b54613e9758b091c3a5d8ff06/codeflare_sdk-0.32.1.tar.gz", upload-time = 2025-11-07T21:07:06Z, size = 151147, hashes = { sha256 = "870cb62610b3585014e62e1069051b3bbf02ab2a9e10d5e18e1f20866a3f7a44" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/46/5223a5b7651d36251789e5426ce8caef579961a4d25a73db23ad4f4ebe22/codeflare_sdk-0.32.1-py3-none-any.whl", upload-time = 2025-11-07T21:07:04Z, size = 219859, hashes = { sha256 = "5f0d319d950f6ff9fa7e94a7ae4502c41d8c487a090cd7497ef95ff65c1b0951" } }] [[packages]] name = "colorama" diff --git a/jupyter/tensorflow/ubi9-python-3.12/pyproject.toml b/jupyter/tensorflow/ubi9-python-3.12/pyproject.toml index 35a4fdd2cc..e74c614210 100644 --- a/jupyter/tensorflow/ubi9-python-3.12/pyproject.toml +++ b/jupyter/tensorflow/ubi9-python-3.12/pyproject.toml @@ -22,7 +22,7 @@ dependencies = [ "scipy~=1.16.2", "skl2onnx~=1.19.1", "onnxconverter-common~=1.13.0", # Required for skl2onnx, as upgraded version is not compatible with protobuf - "codeflare-sdk~=0.32.0", + "codeflare-sdk~=0.32.1", "feast~=0.55.0", # DB connectors diff --git a/jupyter/trustyai/ubi9-python-3.12/pylock.toml b/jupyter/trustyai/ubi9-python-3.12/pylock.toml index a0b6bc7a4c..b9897a87c1 100644 --- a/jupyter/trustyai/ubi9-python-3.12/pylock.toml +++ b/jupyter/trustyai/ubi9-python-3.12/pylock.toml @@ -545,10 +545,10 @@ wheels = [{ url = "https://files.pythonhosted.org/packages/93/27/bf74dc1494625c3 [[packages]] name = "codeflare-sdk" -version = "0.32.0" +version = "0.32.1" marker = "platform_machine != 'ppc64le' and platform_machine != 's390x'" -sdist = { url = "https://files.pythonhosted.org/packages/75/84/fd7f089111ddae5896059f28f02997d9b7650ff97ccf8917e35964a12795/codeflare_sdk-0.32.0.tar.gz", upload-time = 2025-10-16T11:51:24Z, size = 150607, hashes = { sha256 = "8cc4bc9e471c8dd2ec5baacda94d5f17a0bbbf3d4a944a213307c37521e1a300" } } -wheels = [{ url = "https://files.pythonhosted.org/packages/9e/9f/5007a20bf72f86400cfd935e8ac53888db024fbbdf2f278d9d6fcadbb017/codeflare_sdk-0.32.0-py3-none-any.whl", upload-time = 2025-10-16T11:51:22Z, size = 219307, hashes = { sha256 = "583910545d4e97c8ca18692150d3a3bdc45ed37dfb3cfda2f891a191b584d3f8" } }] +sdist = { url = "https://files.pythonhosted.org/packages/47/b8/5b5942be8a430a1c67d90beca9b20f81fd7b54613e9758b091c3a5d8ff06/codeflare_sdk-0.32.1.tar.gz", upload-time = 2025-11-07T21:07:06Z, size = 151147, hashes = { sha256 = "870cb62610b3585014e62e1069051b3bbf02ab2a9e10d5e18e1f20866a3f7a44" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/46/5223a5b7651d36251789e5426ce8caef579961a4d25a73db23ad4f4ebe22/codeflare_sdk-0.32.1-py3-none-any.whl", upload-time = 2025-11-07T21:07:04Z, size = 219859, hashes = { sha256 = "5f0d319d950f6ff9fa7e94a7ae4502c41d8c487a090cd7497ef95ff65c1b0951" } }] [[packages]] name = "colorama" diff --git a/jupyter/trustyai/ubi9-python-3.12/pyproject.toml b/jupyter/trustyai/ubi9-python-3.12/pyproject.toml index 463ac623d2..b8beec7a2a 100644 --- a/jupyter/trustyai/ubi9-python-3.12/pyproject.toml +++ b/jupyter/trustyai/ubi9-python-3.12/pyproject.toml @@ -40,7 +40,7 @@ dependencies = [ "scipy~=1.16.2", "skl2onnx~=1.19.1", "onnxconverter-common~=1.13.0", # Required for skl2onnx, as upgraded version is not compatible with protobuf - "codeflare-sdk~=0.32.0; platform_machine != 'ppc64le' and platform_machine != 's390x'", + "codeflare-sdk~=0.32.1; platform_machine != 'ppc64le' and platform_machine != 's390x'", "kubeflow-training==1.9.3", # DB connectors diff --git a/runtimes/datascience/ubi9-python-3.12/pylock.toml b/runtimes/datascience/ubi9-python-3.12/pylock.toml index ceb9565ca8..f043fffa33 100644 --- a/runtimes/datascience/ubi9-python-3.12/pylock.toml +++ b/runtimes/datascience/ubi9-python-3.12/pylock.toml @@ -477,10 +477,10 @@ wheels = [{ url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a [[packages]] name = "codeflare-sdk" -version = "0.32.0" +version = "0.32.1" marker = "platform_machine != 'ppc64le' and platform_machine != 's390x'" -sdist = { url = "https://files.pythonhosted.org/packages/75/84/fd7f089111ddae5896059f28f02997d9b7650ff97ccf8917e35964a12795/codeflare_sdk-0.32.0.tar.gz", upload-time = 2025-10-16T11:51:24Z, size = 150607, hashes = { sha256 = "8cc4bc9e471c8dd2ec5baacda94d5f17a0bbbf3d4a944a213307c37521e1a300" } } -wheels = [{ url = "https://files.pythonhosted.org/packages/9e/9f/5007a20bf72f86400cfd935e8ac53888db024fbbdf2f278d9d6fcadbb017/codeflare_sdk-0.32.0-py3-none-any.whl", upload-time = 2025-10-16T11:51:22Z, size = 219307, hashes = { sha256 = "583910545d4e97c8ca18692150d3a3bdc45ed37dfb3cfda2f891a191b584d3f8" } }] +sdist = { url = "https://files.pythonhosted.org/packages/47/b8/5b5942be8a430a1c67d90beca9b20f81fd7b54613e9758b091c3a5d8ff06/codeflare_sdk-0.32.1.tar.gz", upload-time = 2025-11-07T21:07:06Z, size = 151147, hashes = { sha256 = "870cb62610b3585014e62e1069051b3bbf02ab2a9e10d5e18e1f20866a3f7a44" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/46/5223a5b7651d36251789e5426ce8caef579961a4d25a73db23ad4f4ebe22/codeflare_sdk-0.32.1-py3-none-any.whl", upload-time = 2025-11-07T21:07:04Z, size = 219859, hashes = { sha256 = "5f0d319d950f6ff9fa7e94a7ae4502c41d8c487a090cd7497ef95ff65c1b0951" } }] [[packages]] name = "colorama" diff --git a/runtimes/datascience/ubi9-python-3.12/pyproject.toml b/runtimes/datascience/ubi9-python-3.12/pyproject.toml index ac8ea34b3e..1cb06ecc04 100644 --- a/runtimes/datascience/ubi9-python-3.12/pyproject.toml +++ b/runtimes/datascience/ubi9-python-3.12/pyproject.toml @@ -15,7 +15,7 @@ dependencies = [ "scipy~=1.16.2", "skl2onnx~=1.19.1", "onnxconverter-common~=1.13.0", # Required for skl2onnx, as upgraded version is not compatible with protobuf - "codeflare-sdk~=0.32.0; platform_machine != 's390x' and platform_machine != 'ppc64le'", + "codeflare-sdk~=0.32.1; platform_machine != 's390x' and platform_machine != 'ppc64le'", "feast~=0.55.0", # DB connectors diff --git a/runtimes/pytorch/ubi9-python-3.12/pylock.toml b/runtimes/pytorch/ubi9-python-3.12/pylock.toml index 6105f128b1..11d9c50252 100644 --- a/runtimes/pytorch/ubi9-python-3.12/pylock.toml +++ b/runtimes/pytorch/ubi9-python-3.12/pylock.toml @@ -476,9 +476,9 @@ wheels = [{ url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a [[packages]] name = "codeflare-sdk" -version = "0.32.0" -sdist = { url = "https://files.pythonhosted.org/packages/75/84/fd7f089111ddae5896059f28f02997d9b7650ff97ccf8917e35964a12795/codeflare_sdk-0.32.0.tar.gz", upload-time = 2025-10-16T11:51:24Z, size = 150607, hashes = { sha256 = "8cc4bc9e471c8dd2ec5baacda94d5f17a0bbbf3d4a944a213307c37521e1a300" } } -wheels = [{ url = "https://files.pythonhosted.org/packages/9e/9f/5007a20bf72f86400cfd935e8ac53888db024fbbdf2f278d9d6fcadbb017/codeflare_sdk-0.32.0-py3-none-any.whl", upload-time = 2025-10-16T11:51:22Z, size = 219307, hashes = { sha256 = "583910545d4e97c8ca18692150d3a3bdc45ed37dfb3cfda2f891a191b584d3f8" } }] +version = "0.32.1" +sdist = { url = "https://files.pythonhosted.org/packages/47/b8/5b5942be8a430a1c67d90beca9b20f81fd7b54613e9758b091c3a5d8ff06/codeflare_sdk-0.32.1.tar.gz", upload-time = 2025-11-07T21:07:06Z, size = 151147, hashes = { sha256 = "870cb62610b3585014e62e1069051b3bbf02ab2a9e10d5e18e1f20866a3f7a44" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/46/5223a5b7651d36251789e5426ce8caef579961a4d25a73db23ad4f4ebe22/codeflare_sdk-0.32.1-py3-none-any.whl", upload-time = 2025-11-07T21:07:04Z, size = 219859, hashes = { sha256 = "5f0d319d950f6ff9fa7e94a7ae4502c41d8c487a090cd7497ef95ff65c1b0951" } }] [[packages]] name = "colorama" diff --git a/runtimes/pytorch/ubi9-python-3.12/pyproject.toml b/runtimes/pytorch/ubi9-python-3.12/pyproject.toml index 01b704c9e3..da70ffe523 100644 --- a/runtimes/pytorch/ubi9-python-3.12/pyproject.toml +++ b/runtimes/pytorch/ubi9-python-3.12/pyproject.toml @@ -20,7 +20,7 @@ dependencies = [ "scipy~=1.16.2", "skl2onnx~=1.19.1", "onnxconverter-common~=1.13.0", # Required for skl2onnx, as upgraded version is not compatible with protobuf - "codeflare-sdk~=0.32.0", + "codeflare-sdk~=0.32.1", "feast~=0.55.0", # DB connectors diff --git a/runtimes/rocm-pytorch/ubi9-python-3.12/pylock.toml b/runtimes/rocm-pytorch/ubi9-python-3.12/pylock.toml index 53deeadf59..2182347c71 100644 --- a/runtimes/rocm-pytorch/ubi9-python-3.12/pylock.toml +++ b/runtimes/rocm-pytorch/ubi9-python-3.12/pylock.toml @@ -476,9 +476,9 @@ wheels = [{ url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a [[packages]] name = "codeflare-sdk" -version = "0.32.0" -sdist = { url = "https://files.pythonhosted.org/packages/75/84/fd7f089111ddae5896059f28f02997d9b7650ff97ccf8917e35964a12795/codeflare_sdk-0.32.0.tar.gz", upload-time = 2025-10-16T11:51:24Z, size = 150607, hashes = { sha256 = "8cc4bc9e471c8dd2ec5baacda94d5f17a0bbbf3d4a944a213307c37521e1a300" } } -wheels = [{ url = "https://files.pythonhosted.org/packages/9e/9f/5007a20bf72f86400cfd935e8ac53888db024fbbdf2f278d9d6fcadbb017/codeflare_sdk-0.32.0-py3-none-any.whl", upload-time = 2025-10-16T11:51:22Z, size = 219307, hashes = { sha256 = "583910545d4e97c8ca18692150d3a3bdc45ed37dfb3cfda2f891a191b584d3f8" } }] +version = "0.32.1" +sdist = { url = "https://files.pythonhosted.org/packages/47/b8/5b5942be8a430a1c67d90beca9b20f81fd7b54613e9758b091c3a5d8ff06/codeflare_sdk-0.32.1.tar.gz", upload-time = 2025-11-07T21:07:06Z, size = 151147, hashes = { sha256 = "870cb62610b3585014e62e1069051b3bbf02ab2a9e10d5e18e1f20866a3f7a44" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/46/5223a5b7651d36251789e5426ce8caef579961a4d25a73db23ad4f4ebe22/codeflare_sdk-0.32.1-py3-none-any.whl", upload-time = 2025-11-07T21:07:04Z, size = 219859, hashes = { sha256 = "5f0d319d950f6ff9fa7e94a7ae4502c41d8c487a090cd7497ef95ff65c1b0951" } }] [[packages]] name = "colorama" diff --git a/runtimes/rocm-pytorch/ubi9-python-3.12/pyproject.toml b/runtimes/rocm-pytorch/ubi9-python-3.12/pyproject.toml index a6c8d851b5..fd64796253 100644 --- a/runtimes/rocm-pytorch/ubi9-python-3.12/pyproject.toml +++ b/runtimes/rocm-pytorch/ubi9-python-3.12/pyproject.toml @@ -21,7 +21,7 @@ dependencies = [ "scipy~=1.16.2", "skl2onnx~=1.19.1", "onnxconverter-common~=1.13.0", # Required for skl2onnx, as upgraded version is not compatible with protobuf - "codeflare-sdk~=0.32.0", + "codeflare-sdk~=0.32.1", "feast~=0.55.0", # DB connectors diff --git a/runtimes/rocm-tensorflow/ubi9-python-3.12/pylock.toml b/runtimes/rocm-tensorflow/ubi9-python-3.12/pylock.toml index 23a0db98dc..5539ff06cf 100644 --- a/runtimes/rocm-tensorflow/ubi9-python-3.12/pylock.toml +++ b/runtimes/rocm-tensorflow/ubi9-python-3.12/pylock.toml @@ -464,9 +464,9 @@ wheels = [{ url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8ee [[packages]] name = "codeflare-sdk" -version = "0.32.0" -sdist = { url = "https://files.pythonhosted.org/packages/75/84/fd7f089111ddae5896059f28f02997d9b7650ff97ccf8917e35964a12795/codeflare_sdk-0.32.0.tar.gz", upload-time = 2025-10-16T11:51:24Z, size = 150607, hashes = { sha256 = "8cc4bc9e471c8dd2ec5baacda94d5f17a0bbbf3d4a944a213307c37521e1a300" } } -wheels = [{ url = "https://files.pythonhosted.org/packages/9e/9f/5007a20bf72f86400cfd935e8ac53888db024fbbdf2f278d9d6fcadbb017/codeflare_sdk-0.32.0-py3-none-any.whl", upload-time = 2025-10-16T11:51:22Z, size = 219307, hashes = { sha256 = "583910545d4e97c8ca18692150d3a3bdc45ed37dfb3cfda2f891a191b584d3f8" } }] +version = "0.32.1" +sdist = { url = "https://files.pythonhosted.org/packages/47/b8/5b5942be8a430a1c67d90beca9b20f81fd7b54613e9758b091c3a5d8ff06/codeflare_sdk-0.32.1.tar.gz", upload-time = 2025-11-07T21:07:06Z, size = 151147, hashes = { sha256 = "870cb62610b3585014e62e1069051b3bbf02ab2a9e10d5e18e1f20866a3f7a44" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/46/5223a5b7651d36251789e5426ce8caef579961a4d25a73db23ad4f4ebe22/codeflare_sdk-0.32.1-py3-none-any.whl", upload-time = 2025-11-07T21:07:04Z, size = 219859, hashes = { sha256 = "5f0d319d950f6ff9fa7e94a7ae4502c41d8c487a090cd7497ef95ff65c1b0951" } }] [[packages]] name = "colorful" diff --git a/runtimes/rocm-tensorflow/ubi9-python-3.12/pyproject.toml b/runtimes/rocm-tensorflow/ubi9-python-3.12/pyproject.toml index fe610eb08a..444846db98 100644 --- a/runtimes/rocm-tensorflow/ubi9-python-3.12/pyproject.toml +++ b/runtimes/rocm-tensorflow/ubi9-python-3.12/pyproject.toml @@ -25,7 +25,7 @@ dependencies = [ "skl2onnx~=1.19.1", # Required for skl2onnx, as upgraded version is not compatible with protobuf "onnxconverter-common~=1.13.0", - "codeflare-sdk~=0.32.0", + "codeflare-sdk~=0.32.1", # DB connectors "pymongo~=4.15.3", diff --git a/runtimes/tensorflow/ubi9-python-3.12/pylock.toml b/runtimes/tensorflow/ubi9-python-3.12/pylock.toml index ef02d17fce..4dea64155c 100644 --- a/runtimes/tensorflow/ubi9-python-3.12/pylock.toml +++ b/runtimes/tensorflow/ubi9-python-3.12/pylock.toml @@ -482,9 +482,9 @@ wheels = [{ url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a [[packages]] name = "codeflare-sdk" -version = "0.32.0" -sdist = { url = "https://files.pythonhosted.org/packages/75/84/fd7f089111ddae5896059f28f02997d9b7650ff97ccf8917e35964a12795/codeflare_sdk-0.32.0.tar.gz", upload-time = 2025-10-16T11:51:24Z, size = 150607, hashes = { sha256 = "8cc4bc9e471c8dd2ec5baacda94d5f17a0bbbf3d4a944a213307c37521e1a300" } } -wheels = [{ url = "https://files.pythonhosted.org/packages/9e/9f/5007a20bf72f86400cfd935e8ac53888db024fbbdf2f278d9d6fcadbb017/codeflare_sdk-0.32.0-py3-none-any.whl", upload-time = 2025-10-16T11:51:22Z, size = 219307, hashes = { sha256 = "583910545d4e97c8ca18692150d3a3bdc45ed37dfb3cfda2f891a191b584d3f8" } }] +version = "0.32.1" +sdist = { url = "https://files.pythonhosted.org/packages/47/b8/5b5942be8a430a1c67d90beca9b20f81fd7b54613e9758b091c3a5d8ff06/codeflare_sdk-0.32.1.tar.gz", upload-time = 2025-11-07T21:07:06Z, size = 151147, hashes = { sha256 = "870cb62610b3585014e62e1069051b3bbf02ab2a9e10d5e18e1f20866a3f7a44" } } +wheels = [{ url = "https://files.pythonhosted.org/packages/11/46/5223a5b7651d36251789e5426ce8caef579961a4d25a73db23ad4f4ebe22/codeflare_sdk-0.32.1-py3-none-any.whl", upload-time = 2025-11-07T21:07:04Z, size = 219859, hashes = { sha256 = "5f0d319d950f6ff9fa7e94a7ae4502c41d8c487a090cd7497ef95ff65c1b0951" } }] [[packages]] name = "colorama" diff --git a/runtimes/tensorflow/ubi9-python-3.12/pyproject.toml b/runtimes/tensorflow/ubi9-python-3.12/pyproject.toml index b23d4a4904..e806c2634d 100644 --- a/runtimes/tensorflow/ubi9-python-3.12/pyproject.toml +++ b/runtimes/tensorflow/ubi9-python-3.12/pyproject.toml @@ -22,7 +22,7 @@ dependencies = [ "skl2onnx~=1.19.1", # Required for skl2onnx, as upgraded version is not compatible with protobuf "onnxconverter-common~=1.13.0", - "codeflare-sdk~=0.32.0", + "codeflare-sdk~=0.32.1", "feast~=0.55.0", # DB connectors From bccfcb6b1457b189c8ef483be884efa1a2b3100d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Sat, 8 Nov 2025 10:50:46 +0100 Subject: [PATCH 17/43] NO-JIRA: refactor(rstudio/*/Dockerfile*): wrap multiple RUN commands with bash for improved readability, consistency, and error handling (#2657) This also required dealing with the LD_LIBRARY_PATH `:` issue: concatenate with empty LD_LIBRARY_PATH would add trailing colon, which means "current directory". And that's insecure. --- rstudio/c9s-python-3.12/Dockerfile.cpu | 158 ++++++++++-------- rstudio/c9s-python-3.12/Dockerfile.cuda | 152 ++++++++++-------- rstudio/rhel9-python-3.12/Dockerfile.cpu | 179 ++++++++++++--------- rstudio/rhel9-python-3.12/Dockerfile.cuda | 186 +++++++++++++--------- 4 files changed, 392 insertions(+), 283 deletions(-) diff --git a/rstudio/c9s-python-3.12/Dockerfile.cpu b/rstudio/c9s-python-3.12/Dockerfile.cpu index 686c045f21..53876ffc0e 100644 --- a/rstudio/c9s-python-3.12/Dockerfile.cpu +++ b/rstudio/c9s-python-3.12/Dockerfile.cpu @@ -33,7 +33,12 @@ EOF # Install useful OS packages # remove skopeo, CVE-2025-4674 -RUN dnf install -y mesa-libGL && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y mesa-libGL +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 @@ -65,51 +70,63 @@ USER 0 ENV R_VERSION=4.5.1 # Install R -RUN dnf install -y 'dnf-command(config-manager)' && \ - dnf config-manager --set-enabled crb && \ - dnf install -y https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ - INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ - R-littler R-littler-examples openssl-libs compat-openssl11" && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - echo 'options(repos = c(CRAN = "https://cran.rstudio.com/"), download.file.method = "libcurl")' >> /usr/lib64/R/etc/Rprofile.site && \ - (umask 002;touch /usr/lib64/R/etc/Renviron.site) && \ - dnf -y clean all --enablerepo='*' +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y 'dnf-command(config-manager)' +dnf config-manager --set-enabled crb +dnf install -y https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm +INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ +R-littler R-littler-examples openssl-libs compat-openssl11" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +echo 'options(repos = c(CRAN = "https://cran.rstudio.com/"), download.file.method = "libcurl")' >> /usr/lib64/R/etc/Rprofile.site +(umask 002;touch /usr/lib64/R/etc/Renviron.site) +dnf -y clean all --enablerepo='*' +EOF # set R library to default (used in install.r from littler) ENV LIBLOC=/usr/lib64/R/library ENV R_LIBS_USER=/opt/app-root/bin/Rpackages/4.5 -RUN chmod -R a+w ${LIBLOC} && \ - # create User R Library path - mkdir -p ${R_LIBS_USER} && \ - chmod -R a+w ${R_LIBS_USER} +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +chmod -R a+w ${LIBLOC} +# create User R Library path +mkdir -p ${R_LIBS_USER} +chmod -R a+w ${R_LIBS_USER} +EOF WORKDIR /tmp/ COPY /rstudio/utils /tmp/utils # Install RStudio ARG RSTUDIO_RPM=rstudio-server-rhel-2025.09.0-387-x86_64.rpm -RUN wget --progress=dot:giga https://download2.rstudio.org/server/rhel9/x86_64/${RSTUDIO_RPM} && \ - dnf install -y ${RSTUDIO_RPM} && \ - rm ${RSTUDIO_RPM} && \ - dnf -y clean all --enablerepo='*' && \ - # Specific RStudio config and fixes - chmod 1777 /var/run/rstudio-server && \ - mkdir -p /usr/share/doc/R && \ - # package installation - # install necessary texlive-framed package to make Knit R markup to PDF rendering possible - dnf install -y libgit2-devel.x86_64 libcurl-devel harfbuzz-devel.x86_64 fribidi-devel.x86_64 cmake "flexiblas-*" texlive-framed && \ - dnf clean all && \ - rm -rf /var/cache/yum && \ - (cd /tmp/utils && ./cve_remediation.sh) +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +wget --progress=dot:giga https://download2.rstudio.org/server/rhel9/x86_64/${RSTUDIO_RPM} +dnf install -y ${RSTUDIO_RPM} +rm ${RSTUDIO_RPM} +dnf -y clean all --enablerepo='*' +# Specific RStudio config and fixes +chmod 1777 /var/run/rstudio-server +mkdir -p /usr/share/doc/R +# package installation +# install necessary texlive-framed package to make Knit R markup to PDF rendering possible +dnf install -y libgit2-devel.x86_64 libcurl-devel harfbuzz-devel.x86_64 fribidi-devel.x86_64 cmake "flexiblas-*" texlive-framed +dnf clean all +rm -rf /var/cache/yum +(cd /tmp/utils && ./cve_remediation.sh) +EOF COPY ${RSTUDIO_SOURCE_CODE}/rsession.conf /etc/rstudio/rsession.conf # Install R packages # https://cran.r-project.org/web/packages COPY ${RSTUDIO_SOURCE_CODE}/install_packages.R ./ -RUN R -f ./install_packages.R && \ - rm ./install_packages.R +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +R -f ./install_packages.R +rm ./install_packages.R +EOF ENV APP_ROOT=/opt/app-root @@ -125,12 +142,15 @@ ENV NGINX_VERSION=1.24 \ NGINX_PERL_MODULE_PATH=${APP_ROOT}/etc/perl # Modules does not exist -RUN dnf -y module enable nginx:$NGINX_VERSION && \ - INSTALL_PKGS="nss_wrapper bind-utils gettext hostname nginx nginx-mod-stream nginx-mod-http-perl httpd" && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - nginx -v 2>&1 | grep -qe "nginx/$NGINX_VERSION\." && echo "Found VERSION $NGINX_VERSION" && \ - dnf -y clean all --enablerepo='*' +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y module enable nginx:$NGINX_VERSION +INSTALL_PKGS="nss_wrapper bind-utils gettext hostname nginx nginx-mod-stream nginx-mod-http-perl httpd" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +rpm -V $INSTALL_PKGS +nginx -v 2>&1 | grep -qe "nginx/$NGINX_VERSION\." && echo "Found VERSION $NGINX_VERSION" +dnf -y clean all --enablerepo='*' +EOF # Configure httpd for CGI processing COPY --chown=1001:0 ${RSTUDIO_SOURCE_CODE}/httpd/httpd.conf /etc/httpd/conf/httpd.conf @@ -155,30 +175,33 @@ COPY ${RSTUDIO_SOURCE_CODE}/nginx/api/ /opt/app-root/api/ # UID=1001 && GID=0 # UID=&& GID=0 # UID=1001 && GID= -RUN sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/api/ && \ - mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - mkdir -p ${NGINX_LOG_PATH} && \ - mkdir -p ${NGINX_PERL_MODULE_PATH} && \ - # Create httpd directories and set permissions - mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chown -R 1001:0 ${NGINX_CONF_PATH} && \ - chown -R 1001:0 ${NGINX_APP_ROOT}/etc && \ - chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chown -R 1001:0 /var/lib/nginx /var/log/nginx /run && \ - chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chmod ug+rw ${NGINX_CONF_PATH} && \ - chmod -R ug+rwX ${NGINX_APP_ROOT}/etc && \ - chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run && \ - chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - # Make CGI scripts executable and set proper ownership - chmod +x /opt/app-root/api/kernels/access.cgi && \ - chmod +x /opt/app-root/api/probe.cgi && \ - chown -R 1001:0 /opt/app-root/api && \ - rpm-file-permissions +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ +mkdir -p ${NGINX_APP_ROOT}/api/ +mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +mkdir -p ${NGINX_LOG_PATH} +mkdir -p ${NGINX_PERL_MODULE_PATH} +# Create httpd directories and set permissions +mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs +chown -R 1001:0 ${NGINX_CONF_PATH} +chown -R 1001:0 ${NGINX_APP_ROOT}/etc +chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chown -R 1001:0 /var/lib/nginx /var/log/nginx /run +chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs +chmod ug+rw ${NGINX_CONF_PATH} +chmod -R ug+rwX ${NGINX_APP_ROOT}/etc +chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run +chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs +# Make CGI scripts executable and set proper ownership +chmod +x /opt/app-root/api/kernels/access.cgi +chmod +x /opt/app-root/api/probe.cgi +chown -R 1001:0 /opt/app-root/api +rpm-file-permissions +EOF # Launcher WORKDIR /opt/app-root/bin @@ -190,13 +213,16 @@ USER 1001 COPY ${RSTUDIO_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/rstudio/c9s-python-3.12/Dockerfile.cuda b/rstudio/c9s-python-3.12/Dockerfile.cuda index caeb2a4a7b..5f2e74a15a 100644 --- a/rstudio/c9s-python-3.12/Dockerfile.cuda +++ b/rstudio/c9s-python-3.12/Dockerfile.cuda @@ -65,51 +65,63 @@ USER 0 ENV R_VERSION=4.5.1 # Install R -RUN dnf install -y 'dnf-command(config-manager)' && \ - dnf config-manager --set-enabled crb && \ - dnf install -y https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ - INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ - R-littler R-littler-examples openssl-libs compat-openssl11" && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - echo 'options(repos = c(CRAN = "https://cran.rstudio.com/"), download.file.method = "libcurl")' >> /usr/lib64/R/etc/Rprofile.site && \ - (umask 002;touch /usr/lib64/R/etc/Renviron.site) && \ - dnf -y clean all --enablerepo='*' +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y 'dnf-command(config-manager)' +dnf config-manager --set-enabled crb +dnf install -y https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm +INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ +R-littler R-littler-examples openssl-libs compat-openssl11" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +echo 'options(repos = c(CRAN = "https://cran.rstudio.com/"), download.file.method = "libcurl")' >> /usr/lib64/R/etc/Rprofile.site +(umask 002;touch /usr/lib64/R/etc/Renviron.site) +dnf -y clean all --enablerepo='*' +EOF # set R library to default (used in install.r from littler) ENV LIBLOC=/usr/lib64/R/library ENV R_LIBS_USER=/opt/app-root/bin/Rpackages/4.5 -RUN chmod -R a+w ${LIBLOC} && \ - # create User R Library path - mkdir -p ${R_LIBS_USER} && \ - chmod -R a+w ${R_LIBS_USER} +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +chmod -R a+w ${LIBLOC} +# create User R Library path +mkdir -p ${R_LIBS_USER} +chmod -R a+w ${R_LIBS_USER} +EOF WORKDIR /tmp/ COPY /rstudio/utils /tmp/utils # Install RStudio ARG RSTUDIO_RPM=rstudio-server-rhel-2025.09.0-387-x86_64.rpm -RUN wget --progress=dot:giga https://download2.rstudio.org/server/rhel9/x86_64/${RSTUDIO_RPM} && \ - dnf install -y ${RSTUDIO_RPM} && \ - rm ${RSTUDIO_RPM} && \ - dnf -y clean all --enablerepo='*' && \ - # Specific RStudio config and fixes - chmod 1777 /var/run/rstudio-server && \ - mkdir -p /usr/share/doc/R && \ - # package installation - # install necessary texlive-framed package to make Knit R markup to PDF rendering possible - dnf install -y libgit2-devel.x86_64 libcurl-devel harfbuzz-devel.x86_64 fribidi-devel.x86_64 cmake "flexiblas-*" texlive-framed && \ - dnf clean all && \ - rm -rf /var/cache/yum && \ - (cd /tmp/utils && ./cve_remediation.sh) +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +wget --progress=dot:giga https://download2.rstudio.org/server/rhel9/x86_64/${RSTUDIO_RPM} +dnf install -y ${RSTUDIO_RPM} +rm ${RSTUDIO_RPM} +dnf -y clean all --enablerepo='*' +# Specific RStudio config and fixes +chmod 1777 /var/run/rstudio-server +mkdir -p /usr/share/doc/R +# package installation +# install necessary texlive-framed package to make Knit R markup to PDF rendering possible +dnf install -y libgit2-devel.x86_64 libcurl-devel harfbuzz-devel.x86_64 fribidi-devel.x86_64 cmake "flexiblas-*" texlive-framed +dnf clean all +rm -rf /var/cache/yum +(cd /tmp/utils && ./cve_remediation.sh) +EOF COPY ${RSTUDIO_SOURCE_CODE}/rsession.conf /etc/rstudio/rsession.conf # Install R packages # https://cran.r-project.org/web/packages COPY ${RSTUDIO_SOURCE_CODE}/install_packages.R ./ -RUN R -f ./install_packages.R && \ - rm ./install_packages.R +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +R -f ./install_packages.R +rm ./install_packages.R +EOF ENV APP_ROOT=/opt/app-root @@ -125,12 +137,16 @@ ENV NGINX_VERSION=1.24 \ NGINX_PERL_MODULE_PATH=${APP_ROOT}/etc/perl # Modules does not exist -RUN dnf -y module enable nginx:$NGINX_VERSION && \ - INSTALL_PKGS="nss_wrapper bind-utils gettext hostname nginx nginx-mod-stream nginx-mod-http-perl httpd" && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - nginx -v 2>&1 | grep -qe "nginx/$NGINX_VERSION\." && echo "Found VERSION $NGINX_VERSION" && \ - dnf -y clean all --enablerepo='*' +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y module enable nginx:$NGINX_VERSION +INSTALL_PKGS="nss_wrapper bind-utils gettext hostname nginx nginx-mod-stream nginx-mod-http-perl httpd" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +rpm -V $INSTALL_PKGS +nginx -v 2>&1 | grep -qe "nginx/$NGINX_VERSION\." +echo "Found VERSION $NGINX_VERSION" +dnf -y clean all --enablerepo='*' +EOF # Configure httpd for CGI processing COPY --chown=1001:0 ${RSTUDIO_SOURCE_CODE}/httpd/httpd.conf /etc/httpd/conf/httpd.conf @@ -155,30 +171,33 @@ COPY ${RSTUDIO_SOURCE_CODE}/nginx/api/ /opt/app-root/api/ # UID=1001 && GID=0 # UID=&& GID=0 # UID=1001 && GID= -RUN sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/api/ && \ - mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - mkdir -p ${NGINX_LOG_PATH} && \ - mkdir -p ${NGINX_PERL_MODULE_PATH} && \ - # Create httpd directories and set permissions - mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chown -R 1001:0 ${NGINX_CONF_PATH} && \ - chown -R 1001:0 ${NGINX_APP_ROOT}/etc && \ - chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chown -R 1001:0 /var/lib/nginx /var/log/nginx /run && \ - chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chmod ug+rw ${NGINX_CONF_PATH} && \ - chmod -R ug+rwX ${NGINX_APP_ROOT}/etc && \ - chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run && \ - chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - # Make CGI scripts executable and set proper ownership - chmod +x /opt/app-root/api/kernels/access.cgi && \ - chmod +x /opt/app-root/api/probe.cgi && \ - chown -R 1001:0 /opt/app-root/api && \ - rpm-file-permissions +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ +mkdir -p ${NGINX_APP_ROOT}/api/ +mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +mkdir -p ${NGINX_LOG_PATH} +mkdir -p ${NGINX_PERL_MODULE_PATH} +# Create httpd directories and set permissions +mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs +chown -R 1001:0 ${NGINX_CONF_PATH} +chown -R 1001:0 ${NGINX_APP_ROOT}/etc +chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chown -R 1001:0 /var/lib/nginx /var/log/nginx /run +chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs +chmod ug+rw ${NGINX_CONF_PATH} +chmod -R ug+rwX ${NGINX_APP_ROOT}/etc +chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run +chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs +# Make CGI scripts executable and set proper ownership +chmod +x /opt/app-root/api/kernels/access.cgi +chmod +x /opt/app-root/api/probe.cgi +chown -R 1001:0 /opt/app-root/api +rpm-file-permissions +EOF # Launcher WORKDIR /opt/app-root/bin @@ -190,13 +209,16 @@ USER 1001 COPY ${RSTUDIO_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cpu b/rstudio/rhel9-python-3.12/Dockerfile.cpu index 97b036ffb5..90e8802f05 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cpu +++ b/rstudio/rhel9-python-3.12/Dockerfile.cpu @@ -82,69 +82,85 @@ USER 0 #RUN sed -i 's/\(def in_container():\)/\1\n return False/g' /usr/lib64/python*/*-packages/rhsm/config.py # If necessary, run the subscription manager command using the provided credentials. Only include --serverurl and --baseurl if they are provided -RUN if [ -d "${SECRET_DIR}" ]; then \ - SERVERURL=$(cat ${SECRET_DIR}/SERVERURL 2>/dev/null || echo ${SERVERURL_DEFAULT}) && \ - BASEURL=$(cat ${SECRET_DIR}/BASEURL 2>/dev/null || echo ${BASEURL_DEFAULT}) && \ - USERNAME=$(cat ${SECRET_DIR}/USERNAME) && \ - PASSWORD=$(cat ${SECRET_DIR}/PASSWORD) && \ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ -d "${SECRET_DIR}" ]; then + SERVERURL=$(cat ${SECRET_DIR}/SERVERURL 2>/dev/null || echo ${SERVERURL_DEFAULT}) + BASEURL=$(cat ${SECRET_DIR}/BASEURL 2>/dev/null || echo ${BASEURL_DEFAULT}) + USERNAME=$(cat ${SECRET_DIR}/USERNAME) + PASSWORD=$(cat ${SECRET_DIR}/PASSWORD) subscription-manager register \ ${SERVERURL:+--serverurl=$SERVERURL} \ ${BASEURL:+--baseurl=$BASEURL} \ --username=$USERNAME \ --password=$PASSWORD \ --force \ - --auto-attach; \ - fi + --auto-attach +fi +EOF + # TILL HERE ENV R_VERSION=4.5.1 # Install R -RUN dnf install -y dnf-plugins-core && \ - subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms && \ - dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ - INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ - R-littler R-littler-examples openssl-libs compat-openssl11" && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - echo 'options(repos = c(CRAN = "https://cran.rstudio.com/"), download.file.method = "libcurl")' >> /usr/lib64/R/etc/Rprofile.site && \ - (umask 002;touch /usr/lib64/R/etc/Renviron.site) && \ - dnf -y clean all --enablerepo='*' +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y dnf-plugins-core +subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms +dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm +INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ +R-littler R-littler-examples openssl-libs compat-openssl11" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +echo 'options(repos = c(CRAN = "https://cran.rstudio.com/"), download.file.method = "libcurl")' >> /usr/lib64/R/etc/Rprofile.site +(umask 002;touch /usr/lib64/R/etc/Renviron.site) +dnf -y clean all --enablerepo='*' +EOF # set R library to default (used in install.r from littler) ENV LIBLOC=/usr/lib64/R/library ENV R_LIBS_USER=/opt/app-root/bin/Rpackages/4.5 -RUN chmod -R a+w ${LIBLOC} && \ - # create User R Library path - mkdir -p ${R_LIBS_USER} && \ - chmod -R a+w ${R_LIBS_USER} +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +chmod -R a+w ${LIBLOC} +# create User R Library path +mkdir -p ${R_LIBS_USER} +chmod -R a+w ${R_LIBS_USER} +EOF WORKDIR /tmp/ COPY /rstudio/utils /tmp/utils # Install RStudio ARG RSTUDIO_RPM=rstudio-server-rhel-2025.09.0-387-x86_64.rpm -RUN wget --progress=dot:giga https://download2.rstudio.org/server/rhel9/x86_64/${RSTUDIO_RPM} && \ - dnf install -y ${RSTUDIO_RPM} && \ - rm ${RSTUDIO_RPM} && \ - dnf -y clean all --enablerepo='*' && \ - # Specific RStudio config and fixes - chmod 1777 /var/run/rstudio-server && \ - mkdir -p /usr/share/doc/R && \ - # package installation - # install necessary texlive-framed package to make Knit R markup to PDF rendering possible - dnf install -y libgit2-devel.x86_64 libcurl-devel harfbuzz-devel.x86_64 fribidi-devel.x86_64 cmake "flexiblas-*" texlive-framed && \ - dnf clean all && \ - rm -rf /var/cache/yum && \ - (cd /tmp/utils && ./cve_remediation.sh) +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +wget --progress=dot:giga https://download2.rstudio.org/server/rhel9/x86_64/${RSTUDIO_RPM} +dnf install -y ${RSTUDIO_RPM} +rm ${RSTUDIO_RPM} +dnf -y clean all --enablerepo='*' +# Specific RStudio config and fixes +chmod 1777 /var/run/rstudio-server +mkdir -p /usr/share/doc/R +# package installation +# install necessary texlive-framed package to make Knit R markup to PDF rendering possible +dnf install -y libgit2-devel.x86_64 libcurl-devel harfbuzz-devel.x86_64 fribidi-devel.x86_64 cmake "flexiblas-*" texlive-framed +dnf clean all +rm -rf /var/cache/yum +(cd /tmp/utils && ./cve_remediation.sh) +EOF COPY ${RSTUDIO_SOURCE_CODE}/rsession.conf /etc/rstudio/rsession.conf # Install R packages # https://cran.r-project.org/web/packages COPY ${RSTUDIO_SOURCE_CODE}/install_packages.R ./ -RUN R -f ./install_packages.R && \ - rm ./install_packages.R +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +R -f ./install_packages.R +rm ./install_packages.R +EOF ENV APP_ROOT=/opt/app-root @@ -160,12 +176,15 @@ ENV NGINX_VERSION=1.24 \ NGINX_PERL_MODULE_PATH=${APP_ROOT}/etc/perl # Modules does not exist -RUN dnf -y module enable nginx:$NGINX_VERSION && \ - INSTALL_PKGS="nss_wrapper bind-utils gettext hostname nginx nginx-mod-stream nginx-mod-http-perl httpd" && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - nginx -v 2>&1 | grep -qe "nginx/$NGINX_VERSION\." && echo "Found VERSION $NGINX_VERSION" && \ - dnf -y clean all --enablerepo='*' +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y module enable nginx:$NGINX_VERSION +INSTALL_PKGS="nss_wrapper bind-utils gettext hostname nginx nginx-mod-stream nginx-mod-http-perl httpd" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +rpm -V $INSTALL_PKGS +nginx -v 2>&1 | grep -qe "nginx/$NGINX_VERSION\." && echo "Found VERSION $NGINX_VERSION" +dnf -y clean all --enablerepo='*' +EOF # Configure httpd for CGI processing COPY --chown=1001:0 ${RSTUDIO_SOURCE_CODE}/httpd/httpd.conf /etc/httpd/conf/httpd.conf @@ -190,30 +209,33 @@ COPY ${RSTUDIO_SOURCE_CODE}/nginx/api/ /opt/app-root/api/ # UID=1001 && GID=0 # UID=&& GID=0 # UID=1001 && GID= -RUN sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/api/ && \ - mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - mkdir -p ${NGINX_LOG_PATH} && \ - mkdir -p ${NGINX_PERL_MODULE_PATH} && \ - # Create httpd directories and set permissions - mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chown -R 1001:0 ${NGINX_CONF_PATH} && \ - chown -R 1001:0 ${NGINX_APP_ROOT}/etc && \ - chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chown -R 1001:0 /var/lib/nginx /var/log/nginx /run && \ - chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chmod ug+rw ${NGINX_CONF_PATH} && \ - chmod -R ug+rwX ${NGINX_APP_ROOT}/etc && \ - chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run && \ - chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - # Make CGI scripts executable and set proper ownership - chmod +x /opt/app-root/api/kernels/access.cgi && \ - chmod +x /opt/app-root/api/probe.cgi && \ - chown -R 1001:0 /opt/app-root/api && \ - rpm-file-permissions +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ +mkdir -p ${NGINX_APP_ROOT}/api/ +mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +mkdir -p ${NGINX_LOG_PATH} +mkdir -p ${NGINX_PERL_MODULE_PATH} +# Create httpd directories and set permissions +mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs +chown -R 1001:0 ${NGINX_CONF_PATH} +chown -R 1001:0 ${NGINX_APP_ROOT}/etc +chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chown -R 1001:0 /var/lib/nginx /var/log/nginx /run +chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs +chmod ug+rw ${NGINX_CONF_PATH} +chmod -R ug+rwX ${NGINX_APP_ROOT}/etc +chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run +chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs +# Make CGI scripts executable and set proper ownership +chmod +x /opt/app-root/api/kernels/access.cgi +chmod +x /opt/app-root/api/probe.cgi +chown -R 1001:0 /opt/app-root/api +rpm-file-permissions +EOF # Launcher WORKDIR /opt/app-root/bin @@ -223,22 +245,29 @@ COPY ${RSTUDIO_SOURCE_CODE}/run-rstudio.sh ${RSTUDIO_SOURCE_CODE}/setup_rstudio. # TODO THIS SHOULD BE REMOVED in favor of: https://issues.redhat.com/browse/RHOAIENG-32541 # Unregister the system -RUN if [ -d "${SECRET_DIR}" ]; then \ - subscription-manager remove --all && subscription-manager unregister && subscription-manager clean; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ -d "${SECRET_DIR}" ]; then + subscription-manager remove --all && subscription-manager unregister && subscription-manager clean +fi +EOF + # TILL HERE USER 1001 COPY ${RSTUDIO_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cuda b/rstudio/rhel9-python-3.12/Dockerfile.cuda index e37158f26e..d12083a0d3 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cuda +++ b/rstudio/rhel9-python-3.12/Dockerfile.cuda @@ -82,8 +82,11 @@ USER 0 ENV XLA_FLAGS=--xla_gpu_cuda_data_dir=/usr/local/cuda # Install CUDA toolkit 12.8 -RUN dnf -y install cuda-toolkit-12-8 && \ - dnf -y clean all --enablerepo="*" +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y install cuda-toolkit-12-8 +dnf -y clean all --enablerepo="*" +EOF WORKDIR /opt/app-root/src # TILL HERE @@ -93,69 +96,85 @@ WORKDIR /opt/app-root/src #RUN sed -i 's/\(def in_container():\)/\1\n return False/g' /usr/lib64/python*/*-packages/rhsm/config.py # If necessary, run the subscription manager command using the provided credentials. Only include --serverurl and --baseurl if they are provided -RUN if [ -d "${SECRET_DIR}" ]; then \ - SERVERURL=$(cat ${SECRET_DIR}/SERVERURL 2>/dev/null || echo ${SERVERURL_DEFAULT}) && \ - BASEURL=$(cat ${SECRET_DIR}/BASEURL 2>/dev/null || echo ${BASEURL_DEFAULT}) && \ - USERNAME=$(cat ${SECRET_DIR}/USERNAME) && \ - PASSWORD=$(cat ${SECRET_DIR}/PASSWORD) && \ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ -d "${SECRET_DIR}" ]; then + SERVERURL=$(cat ${SECRET_DIR}/SERVERURL 2>/dev/null || echo ${SERVERURL_DEFAULT}) + BASEURL=$(cat ${SECRET_DIR}/BASEURL 2>/dev/null || echo ${BASEURL_DEFAULT}) + USERNAME=$(cat ${SECRET_DIR}/USERNAME) + PASSWORD=$(cat ${SECRET_DIR}/PASSWORD) subscription-manager register \ ${SERVERURL:+--serverurl=$SERVERURL} \ ${BASEURL:+--baseurl=$BASEURL} \ --username=$USERNAME \ --password=$PASSWORD \ --force \ - --auto-attach; \ - fi + --auto-attach +fi +EOF + # TILL HERE ENV R_VERSION=4.5.1 # Install R -RUN dnf install -y dnf-plugins-core && \ - subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms && \ - dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ - INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ - R-littler R-littler-examples openssl-libs compat-openssl11" && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - echo 'options(repos = c(CRAN = "https://cran.rstudio.com/"), download.file.method = "libcurl")' >> /usr/lib64/R/etc/Rprofile.site && \ - (umask 002;touch /usr/lib64/R/etc/Renviron.site) && \ - dnf -y clean all --enablerepo='*' +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y dnf-plugins-core +subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms +dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm +INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ +R-littler R-littler-examples openssl-libs compat-openssl11" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +echo 'options(repos = c(CRAN = "https://cran.rstudio.com/"), download.file.method = "libcurl")' >> /usr/lib64/R/etc/Rprofile.site +(umask 002;touch /usr/lib64/R/etc/Renviron.site) +dnf -y clean all --enablerepo='*' +EOF # set R library to default (used in install.r from littler) ENV LIBLOC=/usr/lib64/R/library ENV R_LIBS_USER=/opt/app-root/bin/Rpackages/4.5 -RUN chmod -R a+w ${LIBLOC} && \ - # create User R Library path - mkdir -p ${R_LIBS_USER} && \ - chmod -R a+w ${R_LIBS_USER} +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +chmod -R a+w ${LIBLOC} +# create User R Library path +mkdir -p ${R_LIBS_USER} +chmod -R a+w ${R_LIBS_USER} +EOF WORKDIR /tmp/ COPY /rstudio/utils /tmp/utils # Install RStudio ARG RSTUDIO_RPM=rstudio-server-rhel-2025.09.0-387-x86_64.rpm -RUN wget --progress=dot:giga https://download2.rstudio.org/server/rhel9/x86_64/${RSTUDIO_RPM} && \ - dnf install -y ${RSTUDIO_RPM} && \ - rm ${RSTUDIO_RPM} && \ - dnf -y clean all --enablerepo='*' && \ - # Specific RStudio config and fixes - chmod 1777 /var/run/rstudio-server && \ - mkdir -p /usr/share/doc/R && \ - # package installation - # install necessary texlive-framed package to make Knit R markup to PDF rendering possible - dnf install -y libgit2-devel.x86_64 libcurl-devel harfbuzz-devel.x86_64 fribidi-devel.x86_64 cmake "flexiblas-*" texlive-framed && \ - dnf clean all && \ - rm -rf /var/cache/yum && \ - (cd /tmp/utils && ./cve_remediation.sh) +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +wget --progress=dot:giga https://download2.rstudio.org/server/rhel9/x86_64/${RSTUDIO_RPM} +dnf install -y ${RSTUDIO_RPM} +rm ${RSTUDIO_RPM} +dnf -y clean all --enablerepo='*' +# Specific RStudio config and fixes +chmod 1777 /var/run/rstudio-server +mkdir -p /usr/share/doc/R +# package installation +# install necessary texlive-framed package to make Knit R markup to PDF rendering possible +dnf install -y libgit2-devel.x86_64 libcurl-devel harfbuzz-devel.x86_64 fribidi-devel.x86_64 cmake "flexiblas-*" texlive-framed +dnf clean all +rm -rf /var/cache/yum +(cd /tmp/utils && ./cve_remediation.sh) +EOF COPY ${RSTUDIO_SOURCE_CODE}/rsession.conf /etc/rstudio/rsession.conf # Install R packages # https://cran.r-project.org/web/packages COPY ${RSTUDIO_SOURCE_CODE}/install_packages.R ./ -RUN R -f ./install_packages.R && \ - rm ./install_packages.R +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +R -f ./install_packages.R +rm ./install_packages.R +EOF ENV APP_ROOT=/opt/app-root @@ -172,12 +191,15 @@ ENV NGINX_VERSION=1.24 \ NGINX_PERL_MODULE_PATH=${APP_ROOT}/etc/perl # Modules does not exist -RUN dnf -y module enable nginx:$NGINX_VERSION && \ - INSTALL_PKGS="nss_wrapper bind-utils gettext hostname nginx nginx-mod-stream nginx-mod-http-perl httpd" && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - nginx -v 2>&1 | grep -qe "nginx/$NGINX_VERSION\." && echo "Found VERSION $NGINX_VERSION" && \ - dnf -y clean all --enablerepo='*' +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y module enable nginx:$NGINX_VERSION +INSTALL_PKGS="nss_wrapper bind-utils gettext hostname nginx nginx-mod-stream nginx-mod-http-perl httpd" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +rpm -V $INSTALL_PKGS +nginx -v 2>&1 | grep -qe "nginx/$NGINX_VERSION\." && echo "Found VERSION $NGINX_VERSION" +dnf -y clean all --enablerepo='*' +EOF # Configure httpd for CGI processing COPY --chown=1001:0 ${RSTUDIO_SOURCE_CODE}/httpd/httpd.conf /etc/httpd/conf/httpd.conf @@ -202,30 +224,33 @@ COPY ${RSTUDIO_SOURCE_CODE}/nginx/api/ /opt/app-root/api/ # UID=1001 && GID=0 # UID=&& GID=0 # UID=1001 && GID= -RUN sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/api/ && \ - mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - mkdir -p ${NGINX_LOG_PATH} && \ - mkdir -p ${NGINX_PERL_MODULE_PATH} && \ - # Create httpd directories and set permissions - mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chown -R 1001:0 ${NGINX_CONF_PATH} && \ - chown -R 1001:0 ${NGINX_APP_ROOT}/etc && \ - chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chown -R 1001:0 /var/lib/nginx /var/log/nginx /run && \ - chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chmod ug+rw ${NGINX_CONF_PATH} && \ - chmod -R ug+rwX ${NGINX_APP_ROOT}/etc && \ - chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run && \ - chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - # Make CGI scripts executable and set proper ownership - chmod +x /opt/app-root/api/kernels/access.cgi && \ - chmod +x /opt/app-root/api/probe.cgi && \ - chown -R 1001:0 /opt/app-root/api && \ - rpm-file-permissions +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ +mkdir -p ${NGINX_APP_ROOT}/api/ +mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +mkdir -p ${NGINX_LOG_PATH} +mkdir -p ${NGINX_PERL_MODULE_PATH} +# Create httpd directories and set permissions +mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs +chown -R 1001:0 ${NGINX_CONF_PATH} +chown -R 1001:0 ${NGINX_APP_ROOT}/etc +chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chown -R 1001:0 /var/lib/nginx /var/log/nginx /run +chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs +chmod ug+rw ${NGINX_CONF_PATH} +chmod -R ug+rwX ${NGINX_APP_ROOT}/etc +chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run +chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs +# Make CGI scripts executable and set proper ownership +chmod +x /opt/app-root/api/kernels/access.cgi +chmod +x /opt/app-root/api/probe.cgi +chown -R 1001:0 /opt/app-root/api +rpm-file-permissions +EOF # Launcher WORKDIR /opt/app-root/bin @@ -235,22 +260,29 @@ COPY ${RSTUDIO_SOURCE_CODE}/run-rstudio.sh ${RSTUDIO_SOURCE_CODE}/setup_rstudio. # TODO THIS SHOULD BE REMOVED in favor of: https://issues.redhat.com/browse/RHOAIENG-32541 # Unregister the system -RUN if [ -d "${SECRET_DIR}" ]; then \ - subscription-manager remove --all && subscription-manager unregister && subscription-manager clean; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ -d "${SECRET_DIR}" ]; then + subscription-manager remove --all && subscription-manager unregister && subscription-manager clean +fi +EOF + # TILL HERE USER 1001 COPY ${RSTUDIO_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src From eef1417fad0921ae0a35f519598ab57093a3a0b6 Mon Sep 17 00:00:00 2001 From: Daniel Lutz Date: Sat, 8 Nov 2025 10:49:57 -0300 Subject: [PATCH 18/43] Retrigger for CodeFlareSDK update build on jupyter-cuda-tensorflow image --- .../odh-workbench-jupyter-tensorflow-cuda-py312-v3-0-push.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-v3-0-push.yaml b/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-v3-0-push.yaml index afb0ea56a8..5d11d601c8 100644 --- a/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-v3-0-push.yaml +++ b/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-v3-0-push.yaml @@ -1,6 +1,6 @@ apiVersion: tekton.dev/v1 kind: PipelineRun -# retrigger Konflux builds to fix https://issues.redhat.com/browse/RHOAIENG-31914 +# retrigger to fix rhoai-3.0 codeflare update metadata: annotations: build.appstudio.openshift.io/repo: https://github.com/red-hat-data-services/notebooks?rev={{revision}} From 9c0127f05987691540e13c8eeb17cf81aa3458b9 Mon Sep 17 00:00:00 2001 From: Harshad Reddy Nalla Date: Mon, 10 Nov 2025 16:52:14 +0530 Subject: [PATCH 19/43] Gateway API Compatibility: A Guide to Container Image Migration Signed-off-by: Harshad Reddy Nalla --- docs/gateway-api-migration-guide.md | 389 ++++++++++++++++++++++++++++ 1 file changed, 389 insertions(+) create mode 100644 docs/gateway-api-migration-guide.md diff --git a/docs/gateway-api-migration-guide.md b/docs/gateway-api-migration-guide.md new file mode 100644 index 0000000000..4144ec0024 --- /dev/null +++ b/docs/gateway-api-migration-guide.md @@ -0,0 +1,389 @@ +# Migrating Workbench Images to Kubernetes Gateway API + +## Overview + +When migrating from OpenShift Route + oauth-proxy to Kubernetes Gateway API + kube-rbac-proxy, workbench images require nginx configuration updates to properly handle path-based routing. + +## The Core Requirement + +**Your workbench image must serve all content from the base path `${NB_PREFIX}`.** + +Any call from a browser to a different path, for example `/index.html`, `/api/my-endpoint`, or simply `/`, won't be routed to the workbench container. This is because the routing, handled by the Gateway API, is path-based, using the same value as the environment variable `NB_PREFIX` that is injected into the workbench at runtime. + +Example `NB_PREFIX`: `/notebook//` + +## Key Architectural Difference + +### OpenShift Route (Old) +``` +External: /notebook/user/workbench/app/ + ↓ +Route strips prefix + ↓ +Container receives: /app/ +``` + +**Important**: The prefix stripping isn't automatic - it requires implementation: +- **nginx** strips the prefix via rewrite rules +- **Catch-all redirects** like `location / { return 302 /app; }` + +Both approaches work because the Route **forwards all traffic** to the pod regardless of path. + +### Gateway API (New) +``` +External: /notebook/user/workbench/app/ + ↓ +Gateway preserves full path (path-based routing) + ↓ +Container receives: /notebook/user/workbench/app/ +``` + +**Critical Difference**: Gateway API uses **path-based routing**. Only requests matching the configured path prefix are forwarded to the pod. + +### Why Old Approaches Fail with Gateway API + +``` +App redirects: /notebook/user/workbench/app → /app + ↓ +Browser follows redirect to: /app + ↓ +Gateway routing rule: /notebook/user/workbench/** (doesn't match /app!) + ↓ +Pod receives NO traffic → 404 or routing failure +``` + +**The Problem**: If your application redirects to paths outside `${NB_PREFIX}`, the Gateway cannot route those requests back to your pod. The path-based matching at the Gateway level requires all traffic to stay within the configured prefix. + +**Critical Change**: Your application (or reverse proxy) must handle the **full path** including the prefix and never redirect outside of it. + +--- + +## Part 1: For All Workbenches - General Requirements + +These requirements apply **regardless of whether you use nginx or application-level path handling**. + +### 1. Health Check Endpoints + +Your workbench **must** respond to health checks at: + +``` +GET /{NB_PREFIX}/api +``` + +This endpoint must return an HTTP 200 status for probes to succeed. + +**Example for Python Flask**: +```python +from flask import Flask +import os + +app = Flask(__name__) +nb_prefix = os.getenv('NB_PREFIX', '') + +@app.route(f'{nb_prefix}/api') +def health_check(): + return {'status': 'healthy'}, 200 + +@app.route(f'{nb_prefix}/api/kernels') +def kernels(): + # Handle culler endpoint + return {'kernels': []}, 200 + +@app.route(f'{nb_prefix}/api/terminals') +def terminals(): + # Handle culler endpoint + return {'terminals': []}, 200 +``` + +**Example for Node.js Express**: +```javascript +const express = require('express'); +const app = express(); +const nbPrefix = process.env.NB_PREFIX || ''; + +app.get(`${nbPrefix}/api`, (req, res) => { + res.json({ status: 'healthy' }); +}); + +app.get(`${nbPrefix}/api/kernels`, (req, res) => { + res.json({ kernels: [] }); +}); + +app.get(`${nbPrefix}/api/terminals`, (req, res) => { + res.json({ terminals: [] }); +}); +``` + +### 2. Culler Endpoints + +If your workbench supports culling idle workbenches, you must handle: + +``` +GET /{NB_PREFIX}/api/kernels +GET /{NB_PREFIX}/api/terminals +``` + +These should return information about active kernels/terminals, or empty arrays if none exist. + +### 3. Use Relative URLs in Your Application + +**Critical**: Your application must generate relative URLs, not absolute ones. + +```html + +Menu 1 + + + + +Menu 1 + + + + +Menu 1 +``` + +**Why**: Hardcoded absolute paths like `/menu1` will not include the `{NB_PREFIX}`, causing 404 errors. Relative URLs or framework-generated URLs will correctly resolve to `/{NB_PREFIX}/menu1`. + +### 4. Configure Your Application's Base Path + +If your framework supports it, configure the base path using the `NB_PREFIX` environment variable: + +**FastAPI**: +```python +from fastapi import FastAPI +import os + +app = FastAPI(root_path=os.getenv('NB_PREFIX', '')) +``` + +**Flask**: +```python +from flask import Flask +import os + +app = Flask(__name__) +app.config['APPLICATION_ROOT'] = os.getenv('NB_PREFIX', '') +``` + +**Express.js**: +```javascript +const express = require('express'); +const app = express(); +const nbPrefix = process.env.NB_PREFIX || ''; + +// Mount all routes under the prefix +const router = express.Router(); +// ... define routes on router ... +app.use(nbPrefix, router); +``` + +**Streamlit**: +```toml +# .streamlit/config.toml +[server] +baseUrlPath = "/notebook/namespace/workbench" # Set via NB_PREFIX +``` + +### 5. Limitations: Applications with Hardcoded Absolute Paths + +**If your application has hardcoded absolute paths that cannot be changed**, migration becomes very difficult: + +```javascript +// ❌ This cannot work with Gateway API unless rewritten +const menuUrl = "/menu1"; // Hardcoded absolute path +fetch(menuUrl).then(...); +``` + +**Solutions**: +1. **Modify the application** - Change to relative URLs or configurable base path (preferred) +2. **Use nginx with URL rewriting** - nginx can intercept and rewrite some URLs, but this is limited +3. **HTML/JS post-processing** - Intercept responses and rewrite URLs (complex, not recommended) + +**Warning**: nginx can rewrite URLs in redirects and some headers, but it **cannot** rewrite URLs embedded in HTML/JavaScript content without complex content manipulation, which is error-prone and slow. + +--- + +## Part 2: For nginx-based Workbenches - Reverse Proxy Configuration + +**Use this section if** your application does not support base path configuration and you need nginx to handle the path translation. + +### Required nginx Changes + +### 1. Remove Problematic Location Blocks + +**REMOVE** any overly broad location blocks that cause infinite redirects: + +```nginx +# ❌ REMOVE THIS - Too broad, causes infinite loops +location ${NB_PREFIX}/ { + return 302 $custom_scheme://$http_host/app/; +} +``` + +**Why**: This matches ALL paths under the prefix, including your application endpoint itself (e.g., `/notebook/user/workbench/app/`), creating redirect loops. + +### 2. Update Redirects to Preserve NB_PREFIX + +**All redirects must include `${NB_PREFIX}`** to keep requests within the Gateway route: + +```nginx +# ❌ BAD - Strips prefix +location = ${NB_PREFIX} { + return 302 $custom_scheme://$http_host/myapp/; +} + +# ✅ GOOD - Preserves prefix +location ${NB_PREFIX} { + return 302 $custom_scheme://$http_host${NB_PREFIX}/myapp/; +} +``` + +**Note**: Use `location ${NB_PREFIX}` (without `=`) to handle both with and without trailing slash. + +### 3. Add Prefix-Aware Proxy Location + +**Add a location block** that matches the full prefixed path and strips the prefix before proxying: + +```nginx +location ${NB_PREFIX}/myapp/ { + # Strip the prefix before proxying to backend + rewrite ^${NB_PREFIX}/myapp/(.*)$ /$1 break; + + # Proxy to your application + proxy_pass http://localhost:8080/; + proxy_http_version 1.1; + + # Essential for WebSocket support + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + + # Long timeout for interactive sessions + proxy_read_timeout 20d; + + # Pass through important headers + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $custom_scheme; +} +``` + +### 4. Update Health Check Endpoints + +Health checks must also preserve the prefix: + +```nginx +# Health check endpoint +location = ${NB_PREFIX}/api { + return 302 ${NB_PREFIX}/myapp/healthz/; + access_log off; +} +``` + +### 5. Add Wildcard server_name Fallback + +Gateway API uses different hostnames than OpenShift Routes. Add fallback logic: + +```bash +# In run-nginx.sh or startup script +export BASE_URL=$(extract_base_url_from_notebook_args) + +# If BASE_URL is empty or invalid, use wildcard server_name +if [ -z "$BASE_URL" ] || [ "$BASE_URL" = "$(echo $NB_PREFIX | awk -F/ '{ print $4"-"$3 }')" ]; then + export BASE_URL="_" +fi +``` + +This sets `server_name _;` which accepts requests from any hostname. + +### 6. Update kube-rbac-proxy Configuration + +Remove trailing slashes from upstream URLs in pod/statefulset specs: + +```yaml +# ❌ BAD +args: + - '--upstream=http://127.0.0.1:8888/' + +# ✅ GOOD +args: + - '--upstream=http://127.0.0.1:8888' +``` + +## HTTPRoute Configuration + +Ensure your HTTPRoute matches the full prefix path: + +```yaml +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: my-workbench + namespace: +spec: + parentRefs: + - group: gateway.networking.k8s.io + kind: Gateway + name: data-science-gateway + namespace: openshift-ingress + rules: + - backendRefs: + - kind: Service + name: my-workbench-rbac + port: 8443 + weight: 1 + matches: + - path: + type: PathPrefix + value: /notebook// +``` + +**Important**: The `value` must match the `NB_PREFIX` environment variable set in the pod. + +## Reference Implementation + +See these files for complete examples: + +### Code-Server +- **nginx config**: `codeserver/ubi9-python-3.12/nginx/serverconf/proxy.conf.template_nbprefix` +- **startup script**: `codeserver/ubi9-python-3.12/run-nginx.sh` + +### RStudio +- **nginx config**: `rstudio/c9s-python-3.11/nginx/serverconf/proxy.conf.template_nbprefix` +- **startup script**: `rstudio/c9s-python-3.11/run-nginx.sh` + +## Understanding nginx Location Matching + +nginx location blocks have different matching priorities: + +```nginx +# 1. Exact match (highest priority) +location = /exact/path { + # Only matches /exact/path (no trailing slash) +} + +# 2. Prefix match (evaluated in order of length) +location /prefix { + # Matches /prefix, /prefix/, /prefix/anything +} + +# 3. Regex match (not covered here) +``` + +For Gateway API, you need: + +```nginx +# Redirect root to app +location ${NB_PREFIX} { + return 302 $custom_scheme://$http_host${NB_PREFIX}/myapp/; +} + +# Proxy app traffic (longer prefix wins) +location ${NB_PREFIX}/myapp/ { + proxy_pass http://localhost:8080/; +} +``` + +Request `/notebook/ns/wb` → matches first location → redirects +Request `/notebook/ns/wb/myapp/` → matches second location (longer) → proxies From 25f1b8998a918a78c3cc73c5ca1326240cff4b90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Mon, 10 Nov 2025 12:53:06 +0100 Subject: [PATCH 20/43] AIPCC-6903: workaround(ROCm): fix permissions in ROCm images to account for AIPCC way of setting permissions in rocm base (#1682) --- .../ubi9-python-3.12/Dockerfile.konflux.rocm | 5 +++-- jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm | 14 +++++++++----- .../rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm | 3 +++ .../tensorflow/ubi9-python-3.12/Dockerfile.rocm | 5 +++-- .../rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm | 3 +++ .../ubi9-python-3.12/Dockerfile.rocm | 3 +++ .../tensorflow/ubi9-python-3.12/Dockerfile.cuda | 3 +++ 7 files changed, 27 insertions(+), 9 deletions(-) diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm index 0dfa9b3db8..4ae07f9283 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm @@ -69,6 +69,8 @@ USER 1001 COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ +USER 0 + # Install Python dependencies from Pipfile.lock file RUN echo "Installing softwares and packages" && \ # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, @@ -84,11 +86,10 @@ RUN echo "Installing softwares and packages" && \ /opt/app-root/bin/utils/addons/apply.sh # Fix permissions to support pip in Openshift environments \ -USER 0 RUN chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ fix-permissions /opt/app-root -P -USER 1001 +USER 1001 WORKDIR /opt/app-root/src ENTRYPOINT ["start-notebook.sh"] diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm b/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm index 3413258719..f4ed86af12 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm @@ -93,6 +93,8 @@ USER 1001 COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ +USER 0 + # Install Python dependencies from Pipfile.lock file RUN /bin/bash <<'EOF' set -Eeuxo pipefail @@ -113,12 +115,14 @@ fix-permissions /opt/app-root -P /opt/app-root/bin/utils/addons/apply.sh EOF -# Fix permissions to support pip in Openshift environments \ -USER 0 -RUN chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P -USER 1001 +# Fix permissions to support pip in Openshift environments +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF +USER 1001 WORKDIR /opt/app-root/src ENTRYPOINT ["start-notebook.sh"] diff --git a/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm b/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm index f8c7bc1587..5e80f44939 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm @@ -156,6 +156,8 @@ LABEL name="odh-notebook-jupyter-rocm-pytorch-ubi9-python-3.12" \ COPY ${PYTORCH_SOURCE_CODE}/pylock.toml ${PYTORCH_SOURCE_CODE}/de-vendor-torch.sh ./ +USER 0 + RUN /bin/bash <<'EOF' set -Eeuxo pipefail echo "Installing softwares and packages" @@ -182,4 +184,5 @@ chmod -R g+w /opt/app-root/lib/python3.12/site-packages fix-permissions /opt/app-root -P EOF +USER 1001 WORKDIR /opt/app-root/src diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm b/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm index 10fa5b0383..e556e2d0b8 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm @@ -157,6 +157,8 @@ LABEL name="odh-notebook-jupyter-rocm-tensorflow-ubi9-python-3.12" \ COPY ${TENSORFLOW_SOURCE_CODE}/pylock.toml ./ +USER 0 + RUN /bin/bash <<'EOF' set -Eeuxo pipefail echo "Installing softwares and packages" @@ -183,9 +185,8 @@ EOF COPY ${JUPYTER_REUSABLE_UTILS}/usercustomize.pth ${JUPYTER_REUSABLE_UTILS}/monkey_patch_protobuf_6x.py /opt/app-root/lib/python3.12/site-packages/ -USER 0 COPY ${TENSORFLOW_SOURCE_CODE}/utils/link-solibs.sh /tmp/link-solibs.sh RUN /tmp/link-solibs.sh && rm /tmp/link-solibs.sh -USER 1001 +USER 1001 WORKDIR /opt/app-root/src diff --git a/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm b/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm index 95fd255e5a..273c249c2d 100644 --- a/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm +++ b/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm @@ -85,6 +85,8 @@ COPY ${PYTORCH_SOURCE_CODE}/utils ./utils/ # Copy utility script COPY ${PYTORCH_SOURCE_CODE}/de-vendor-torch.sh ./ +USER 0 + RUN /bin/bash <<'EOF' set -Eeuxo pipefail echo "Installing softwares and packages" @@ -99,4 +101,5 @@ chmod -R g+w /opt/app-root/lib/python3.12/site-packages fix-permissions /opt/app-root -P EOF +USER 1001 WORKDIR /opt/app-root/src diff --git a/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm b/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm index 7668b1e44e..fe0e2ff2c2 100644 --- a/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm +++ b/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm @@ -84,6 +84,8 @@ COPY ${TENSORFLOW_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${TENSORFLOW_SOURCE_CODE}/utils ./utils/ +USER 0 + RUN /bin/bash <<'EOF' set -Eeuxo pipefail echo "Installing softwares and packages" @@ -98,4 +100,5 @@ EOF COPY ${JUPYTER_REUSABLE_UTILS}/usercustomize.pth ${JUPYTER_REUSABLE_UTILS}/monkey_patch_protobuf_6x.py /opt/app-root/lib/python3.12/site-packages/ +USER 1001 WORKDIR /opt/app-root/src diff --git a/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda b/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda index 8ad8352c5e..87ae38f33d 100644 --- a/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda +++ b/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda @@ -88,6 +88,8 @@ COPY ${TENSORFLOW_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${TENSORFLOW_SOURCE_CODE}/utils ./utils/ +USER 0 + RUN /bin/bash <<'EOF' set -Eeuxo pipefail echo "Installing softwares and packages" @@ -101,4 +103,5 @@ EOF COPY ${JUPYTER_REUSABLE_UTILS}/usercustomize.pth ${JUPYTER_REUSABLE_UTILS}/monkey_patch_protobuf_6x.py /opt/app-root/lib/python3.12/site-packages/ +USER 1001 WORKDIR /opt/app-root/src From f9624b592178d0284ab210a83ecb20ef1e4fb57e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Mon, 10 Nov 2025 13:07:02 +0100 Subject: [PATCH 21/43] NO-JIRA: fix syntax error transforming commented out instructions (#1682) --- rstudio/rhel9-python-3.12/Dockerfile.cpu | 7 ++++--- rstudio/rhel9-python-3.12/Dockerfile.cuda | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cpu b/rstudio/rhel9-python-3.12/Dockerfile.cpu index a0e7e0dba5..db8f90054b 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cpu +++ b/rstudio/rhel9-python-3.12/Dockerfile.cpu @@ -157,9 +157,10 @@ COPY ${RSTUDIO_SOURCE_CODE}/rsession.conf /etc/rstudio/rsession.conf # # https://cran.r-project.org/web/packages # COPY ${RSTUDIO_SOURCE_CODE}/install_packages.R ./ # RUN /bin/bash <<'EOF' -set -Eeuxo pipefail -R -f ./install_packages.R -# rm ./install_packages.REOF +# set -Eeuxo pipefail +# R -f ./install_packages.R +# rm ./install_packages.R +# EOF ENV APP_ROOT=/opt/app-root diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cuda b/rstudio/rhel9-python-3.12/Dockerfile.cuda index ed671311dd..96e7778124 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cuda +++ b/rstudio/rhel9-python-3.12/Dockerfile.cuda @@ -171,9 +171,10 @@ COPY ${RSTUDIO_SOURCE_CODE}/rsession.conf /etc/rstudio/rsession.conf # # https://cran.r-project.org/web/packages # COPY ${RSTUDIO_SOURCE_CODE}/install_packages.R ./ # RUN /bin/bash <<'EOF' -set -Eeuxo pipefail -R -f ./install_packages.R -# rm ./install_packages.REOF +# set -Eeuxo pipefail +# R -f ./install_packages.R +# rm ./install_packages.R +# EOF ENV APP_ROOT=/opt/app-root From 39f2df88208941ebb4a4e3f3615abdcc27e63d6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Mon, 10 Nov 2025 15:44:40 +0100 Subject: [PATCH 22/43] NO-JIRA: remove a retrigger comment from rhds/main (#1682) --- .../odh-workbench-jupyter-tensorflow-cuda-py312-v3-0-push.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-v3-0-push.yaml b/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-v3-0-push.yaml index 5d11d601c8..55e6c26379 100644 --- a/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-v3-0-push.yaml +++ b/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-v3-0-push.yaml @@ -1,6 +1,5 @@ apiVersion: tekton.dev/v1 kind: PipelineRun -# retrigger to fix rhoai-3.0 codeflare update metadata: annotations: build.appstudio.openshift.io/repo: https://github.com/red-hat-data-services/notebooks?rev={{revision}} From 5b6d00f1101f666c41ce1cdcef11e3d2dfafa129 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 11 Nov 2025 14:59:16 +0000 Subject: [PATCH 23/43] chore: update tags from 2025b-v1.38 to 2025b-v1.39 --- ...ntime-datascience-cpu-py312-ubi9-push.yaml | 2 +- ...e-runtime-minimal-cpu-py312-ubi9-push.yaml | 2 +- ...-runtime-pytorch-cuda-py312-ubi9-push.yaml | 2 +- ...ch-llmcompressor-cuda-py312-ubi9-push.yaml | 2 +- ...-runtime-pytorch-rocm-py312-ubi9-push.yaml | 2 +- ...ntime-tensorflow-cuda-py312-ubi9-push.yaml | 2 +- ...ntime-tensorflow-rocm-py312-ubi9-push.yaml | 2 +- ...erver-datascience-cpu-py312-ubi9-push.yaml | 2 +- ...pyter-datascience-cpu-py312-ubi9-push.yaml | 2 +- ...h-jupyter-minimal-cpu-py312-ubi9-push.yaml | 2 +- ...-jupyter-minimal-cuda-py312-ubi9-push.yaml | 2 +- ...-jupyter-minimal-rocm-py312-ubi9-push.yaml | 2 +- ...-jupyter-pytorch-cuda-py312-ubi9-push.yaml | 2 +- ...ch-llmcompressor-cuda-py312-ubi9-push.yaml | 2 +- ...-jupyter-pytorch-rocm-py312-ubi9-push.yaml | 2 +- ...pyter-tensorflow-cuda-py312-ubi9-push.yaml | 2 +- ...pyter-tensorflow-rocm-py312-ubi9-push.yaml | 2 +- ...-jupyter-trustyai-cpu-py312-ubi9-push.yaml | 2 +- ...ch-rstudio-minimal-cpu-py312-c9s-push.yaml | 2 +- ...h-rstudio-minimal-cuda-py312-c9s-push.yaml | 2 +- manifests/base/params-latest.env | 40 +++++++++---------- 21 files changed, 40 insertions(+), 40 deletions(-) diff --git a/.tekton/odh-pipeline-runtime-datascience-cpu-py312-ubi9-push.yaml b/.tekton/odh-pipeline-runtime-datascience-cpu-py312-ubi9-push.yaml index e45e1a0443..9e4e9e18df 100644 --- a/.tekton/odh-pipeline-runtime-datascience-cpu-py312-ubi9-push.yaml +++ b/.tekton/odh-pipeline-runtime-datascience-cpu-py312-ubi9-push.yaml @@ -33,7 +33,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 pipelineRef: name: singlearch-push-pipeline taskRunTemplate: diff --git a/.tekton/odh-pipeline-runtime-minimal-cpu-py312-ubi9-push.yaml b/.tekton/odh-pipeline-runtime-minimal-cpu-py312-ubi9-push.yaml index 8bb52d4798..60176e242f 100644 --- a/.tekton/odh-pipeline-runtime-minimal-cpu-py312-ubi9-push.yaml +++ b/.tekton/odh-pipeline-runtime-minimal-cpu-py312-ubi9-push.yaml @@ -33,7 +33,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 pipelineRef: name: singlearch-push-pipeline taskRunTemplate: diff --git a/.tekton/odh-pipeline-runtime-pytorch-cuda-py312-ubi9-push.yaml b/.tekton/odh-pipeline-runtime-pytorch-cuda-py312-ubi9-push.yaml index 6f2ab9968c..8428f80f03 100644 --- a/.tekton/odh-pipeline-runtime-pytorch-cuda-py312-ubi9-push.yaml +++ b/.tekton/odh-pipeline-runtime-pytorch-cuda-py312-ubi9-push.yaml @@ -35,7 +35,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 taskRunSpecs: - pipelineTaskName: build-container stepSpecs: diff --git a/.tekton/odh-pipeline-runtime-pytorch-llmcompressor-cuda-py312-ubi9-push.yaml b/.tekton/odh-pipeline-runtime-pytorch-llmcompressor-cuda-py312-ubi9-push.yaml index 78d5c1ffba..9de6da3254 100644 --- a/.tekton/odh-pipeline-runtime-pytorch-llmcompressor-cuda-py312-ubi9-push.yaml +++ b/.tekton/odh-pipeline-runtime-pytorch-llmcompressor-cuda-py312-ubi9-push.yaml @@ -35,7 +35,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 taskRunSpecs: - pipelineTaskName: build-container stepSpecs: diff --git a/.tekton/odh-pipeline-runtime-pytorch-rocm-py312-ubi9-push.yaml b/.tekton/odh-pipeline-runtime-pytorch-rocm-py312-ubi9-push.yaml index 9e74c47326..756ef4951b 100644 --- a/.tekton/odh-pipeline-runtime-pytorch-rocm-py312-ubi9-push.yaml +++ b/.tekton/odh-pipeline-runtime-pytorch-rocm-py312-ubi9-push.yaml @@ -35,7 +35,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 pipelineRef: name: singlearch-push-pipeline taskRunTemplate: diff --git a/.tekton/odh-pipeline-runtime-tensorflow-cuda-py312-ubi9-push.yaml b/.tekton/odh-pipeline-runtime-tensorflow-cuda-py312-ubi9-push.yaml index 0820e6fa90..defc669d18 100644 --- a/.tekton/odh-pipeline-runtime-tensorflow-cuda-py312-ubi9-push.yaml +++ b/.tekton/odh-pipeline-runtime-tensorflow-cuda-py312-ubi9-push.yaml @@ -36,7 +36,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 taskRunSpecs: - pipelineTaskName: ecosystem-cert-preflight-checks computeResources: diff --git a/.tekton/odh-pipeline-runtime-tensorflow-rocm-py312-ubi9-push.yaml b/.tekton/odh-pipeline-runtime-tensorflow-rocm-py312-ubi9-push.yaml index b3d8422af7..abc46c79c5 100644 --- a/.tekton/odh-pipeline-runtime-tensorflow-rocm-py312-ubi9-push.yaml +++ b/.tekton/odh-pipeline-runtime-tensorflow-rocm-py312-ubi9-push.yaml @@ -36,7 +36,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 taskRunSpecs: - pipelineTaskName: build-container stepSpecs: diff --git a/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-push.yaml b/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-push.yaml index 212d786fd3..51f55ca500 100644 --- a/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-codeserver-datascience-cpu-py312-ubi9-push.yaml @@ -33,7 +33,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 - name: build-platforms value: - linux-extra-fast/amd64 diff --git a/.tekton/odh-workbench-jupyter-datascience-cpu-py312-ubi9-push.yaml b/.tekton/odh-workbench-jupyter-datascience-cpu-py312-ubi9-push.yaml index 50c1e8bed5..64715ca372 100644 --- a/.tekton/odh-workbench-jupyter-datascience-cpu-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-jupyter-datascience-cpu-py312-ubi9-push.yaml @@ -33,7 +33,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 taskRunSpecs: - pipelineTaskName: build-container stepSpecs: diff --git a/.tekton/odh-workbench-jupyter-minimal-cpu-py312-ubi9-push.yaml b/.tekton/odh-workbench-jupyter-minimal-cpu-py312-ubi9-push.yaml index e5e6b8398a..e4a29bfd29 100644 --- a/.tekton/odh-workbench-jupyter-minimal-cpu-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-jupyter-minimal-cpu-py312-ubi9-push.yaml @@ -34,7 +34,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 pipelineRef: name: singlearch-push-pipeline taskRunTemplate: diff --git a/.tekton/odh-workbench-jupyter-minimal-cuda-py312-ubi9-push.yaml b/.tekton/odh-workbench-jupyter-minimal-cuda-py312-ubi9-push.yaml index 3c20707c45..6de814a01d 100644 --- a/.tekton/odh-workbench-jupyter-minimal-cuda-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-jupyter-minimal-cuda-py312-ubi9-push.yaml @@ -33,7 +33,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 pipelineRef: name: singlearch-push-pipeline taskRunTemplate: diff --git a/.tekton/odh-workbench-jupyter-minimal-rocm-py312-ubi9-push.yaml b/.tekton/odh-workbench-jupyter-minimal-rocm-py312-ubi9-push.yaml index b29f570062..d56074efdb 100644 --- a/.tekton/odh-workbench-jupyter-minimal-rocm-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-jupyter-minimal-rocm-py312-ubi9-push.yaml @@ -36,7 +36,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 taskRunSpecs: - pipelineTaskName: build-container stepSpecs: diff --git a/.tekton/odh-workbench-jupyter-pytorch-cuda-py312-ubi9-push.yaml b/.tekton/odh-workbench-jupyter-pytorch-cuda-py312-ubi9-push.yaml index 6bfb55e950..31df3c2070 100644 --- a/.tekton/odh-workbench-jupyter-pytorch-cuda-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-jupyter-pytorch-cuda-py312-ubi9-push.yaml @@ -33,7 +33,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 taskRunSpecs: - pipelineTaskName: build-container stepSpecs: diff --git a/.tekton/odh-workbench-jupyter-pytorch-llmcompressor-cuda-py312-ubi9-push.yaml b/.tekton/odh-workbench-jupyter-pytorch-llmcompressor-cuda-py312-ubi9-push.yaml index ad253670b8..3cb20dbcfe 100644 --- a/.tekton/odh-workbench-jupyter-pytorch-llmcompressor-cuda-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-jupyter-pytorch-llmcompressor-cuda-py312-ubi9-push.yaml @@ -33,7 +33,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 taskRunSpecs: - pipelineTaskName: build-container stepSpecs: diff --git a/.tekton/odh-workbench-jupyter-pytorch-rocm-py312-ubi9-push.yaml b/.tekton/odh-workbench-jupyter-pytorch-rocm-py312-ubi9-push.yaml index 70ff17b43b..3165d85c1b 100644 --- a/.tekton/odh-workbench-jupyter-pytorch-rocm-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-jupyter-pytorch-rocm-py312-ubi9-push.yaml @@ -33,7 +33,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 taskRunSpecs: - pipelineTaskName: build-container stepSpecs: diff --git a/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-ubi9-push.yaml b/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-ubi9-push.yaml index dd6cc24ab7..9415db9eaf 100644 --- a/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-jupyter-tensorflow-cuda-py312-ubi9-push.yaml @@ -33,7 +33,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 pipelineRef: name: singlearch-push-pipeline taskRunTemplate: diff --git a/.tekton/odh-workbench-jupyter-tensorflow-rocm-py312-ubi9-push.yaml b/.tekton/odh-workbench-jupyter-tensorflow-rocm-py312-ubi9-push.yaml index 0c79373dbc..7aad1973cd 100644 --- a/.tekton/odh-workbench-jupyter-tensorflow-rocm-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-jupyter-tensorflow-rocm-py312-ubi9-push.yaml @@ -35,7 +35,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 pipelineRef: name: singlearch-push-pipeline taskRunTemplate: diff --git a/.tekton/odh-workbench-jupyter-trustyai-cpu-py312-ubi9-push.yaml b/.tekton/odh-workbench-jupyter-trustyai-cpu-py312-ubi9-push.yaml index 93a488b2fa..602b9bd633 100644 --- a/.tekton/odh-workbench-jupyter-trustyai-cpu-py312-ubi9-push.yaml +++ b/.tekton/odh-workbench-jupyter-trustyai-cpu-py312-ubi9-push.yaml @@ -35,7 +35,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 pipelineRef: name: singlearch-push-pipeline taskRunTemplate: diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-c9s-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-c9s-push.yaml index a62e212c1b..0822062b0a 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-c9s-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-c9s-push.yaml @@ -36,7 +36,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 pipelineRef: name: singlearch-push-pipeline taskRunTemplate: diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-c9s-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-c9s-push.yaml index 53cfd3ba9b..309f155cb5 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-c9s-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-c9s-push.yaml @@ -35,7 +35,7 @@ spec: - name: additional-tags value: - '{{target_branch}}-{{revision}}' - - 2025b-v1.38 + - 2025b-v1.39 pipelineRef: name: singlearch-push-pipeline taskRunTemplate: diff --git a/manifests/base/params-latest.env b/manifests/base/params-latest.env index d23d34495e..b02d97949e 100644 --- a/manifests/base/params-latest.env +++ b/manifests/base/params-latest.env @@ -1,20 +1,20 @@ -odh-workbench-jupyter-minimal-cpu-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-minimal-cpu-py312-ubi9:2025b-v1.38 -odh-workbench-jupyter-minimal-cuda-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-minimal-cuda-py312-ubi9:2025b-v1.38 -odh-workbench-jupyter-minimal-rocm-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-minimal-rocm-py312-ubi9:2025b-v1.38 -odh-workbench-jupyter-datascience-cpu-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-datascience-cpu-py312-ubi9:2025b-v1.38 -odh-workbench-jupyter-pytorch-cuda-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-pytorch-cuda-py312-ubi9:2025b-v1.38 -odh-workbench-jupyter-pytorch-llmcompressor-cuda-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-pytorch-llmcompressor-cuda-py312-ubi9:2025b-v1.38 -odh-workbench-jupyter-pytorch-rocm-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-pytorch-rocm-py312-ubi9:2025b-v1.38 -odh-workbench-jupyter-tensorflow-cuda-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-tensorflow-cuda-py312-ubi9:2025b-v1.38 -odh-workbench-jupyter-tensorflow-rocm-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-tensorflow-rocm-py312-ubi9:2025b-v1.38 -odh-pipeline-runtime-datascience-cpu-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-datascience-cpu-py312-ubi9:2025b-v1.38 -odh-workbench-jupyter-trustyai-cpu-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-trustyai-cpu-py312-ubi9:2025b-v1.38 -odh-workbench-codeserver-datascience-cpu-py312-ubi9-n=quay.io/opendatahub/odh-workbench-codeserver-datascience-cpu-py312-ubi9:2025b-v1.38 -odh-pipeline-runtime-minimal-cpu-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-minimal-cpu-py312-ubi9:2025b-v1.38 -odh-pipeline-runtime-pytorch-cuda-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-pytorch-cuda-py312-ubi9:2025b-v1.38 -odh-pipeline-runtime-tensorflow-cuda-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-tensorflow-cuda-py312-ubi9:2025b-v1.38 -odh-pipeline-runtime-pytorch-rocm-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-pytorch-rocm-py312-ubi9:2025b-v1.38 -odh-pipeline-runtime-pytorch-llmcompressor-cuda-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-pytorch-llmcompressor-cuda-py312-ubi9:2025b-v1.38 -odh-pipeline-runtime-tensorflow-rocm-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-tensorflow-rocm-py312-ubi9:2025b-v1.38 -odh-workbench-rstudio-minimal-cuda-py312-c9s-n=quay.io/opendatahub/odh-workbench-rstudio-minimal-cuda-py312-c9s:2025b-v1.38 -odh-workbench-rstudio-minimal-cpu-py312-c9s-n=quay.io/opendatahub/odh-workbench-rstudio-minimal-cpu-py312-c9s:2025b-v1.38 +odh-workbench-jupyter-minimal-cpu-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-minimal-cpu-py312-ubi9:2025b-v1.39 +odh-workbench-jupyter-minimal-cuda-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-minimal-cuda-py312-ubi9:2025b-v1.39 +odh-workbench-jupyter-minimal-rocm-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-minimal-rocm-py312-ubi9:2025b-v1.39 +odh-workbench-jupyter-datascience-cpu-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-datascience-cpu-py312-ubi9:2025b-v1.39 +odh-workbench-jupyter-pytorch-cuda-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-pytorch-cuda-py312-ubi9:2025b-v1.39 +odh-workbench-jupyter-pytorch-llmcompressor-cuda-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-pytorch-llmcompressor-cuda-py312-ubi9:2025b-v1.39 +odh-workbench-jupyter-pytorch-rocm-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-pytorch-rocm-py312-ubi9:2025b-v1.39 +odh-workbench-jupyter-tensorflow-cuda-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-tensorflow-cuda-py312-ubi9:2025b-v1.39 +odh-workbench-jupyter-tensorflow-rocm-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-tensorflow-rocm-py312-ubi9:2025b-v1.39 +odh-pipeline-runtime-datascience-cpu-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-datascience-cpu-py312-ubi9:2025b-v1.39 +odh-workbench-jupyter-trustyai-cpu-py312-ubi9-n=quay.io/opendatahub/odh-workbench-jupyter-trustyai-cpu-py312-ubi9:2025b-v1.39 +odh-workbench-codeserver-datascience-cpu-py312-ubi9-n=quay.io/opendatahub/odh-workbench-codeserver-datascience-cpu-py312-ubi9:2025b-v1.39 +odh-pipeline-runtime-minimal-cpu-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-minimal-cpu-py312-ubi9:2025b-v1.39 +odh-pipeline-runtime-pytorch-cuda-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-pytorch-cuda-py312-ubi9:2025b-v1.39 +odh-pipeline-runtime-tensorflow-cuda-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-tensorflow-cuda-py312-ubi9:2025b-v1.39 +odh-pipeline-runtime-pytorch-rocm-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-pytorch-rocm-py312-ubi9:2025b-v1.39 +odh-pipeline-runtime-pytorch-llmcompressor-cuda-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-pytorch-llmcompressor-cuda-py312-ubi9:2025b-v1.39 +odh-pipeline-runtime-tensorflow-rocm-py312-ubi9-n=quay.io/opendatahub/odh-pipeline-runtime-tensorflow-rocm-py312-ubi9:2025b-v1.39 +odh-workbench-rstudio-minimal-cuda-py312-c9s-n=quay.io/opendatahub/odh-workbench-rstudio-minimal-cuda-py312-c9s:2025b-v1.39 +odh-workbench-rstudio-minimal-cpu-py312-c9s-n=quay.io/opendatahub/odh-workbench-rstudio-minimal-cpu-py312-c9s:2025b-v1.39 From 603bf2ff71ed371247c76cba6bd6db4778b1d13a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Tue, 11 Nov 2025 21:25:40 +0100 Subject: [PATCH 24/43] RHOAIENG-38634: add `latest` additional tags for c9s Docker base image (#2665) --- .tekton/odh-base-image-cpu-py312-c9s-push.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.tekton/odh-base-image-cpu-py312-c9s-push.yaml b/.tekton/odh-base-image-cpu-py312-c9s-push.yaml index be74bbe112..f7efaece84 100644 --- a/.tekton/odh-base-image-cpu-py312-c9s-push.yaml +++ b/.tekton/odh-base-image-cpu-py312-c9s-push.yaml @@ -28,6 +28,10 @@ spec: value: base-images/cpu/c9s-python-3.12/Dockerfile.cpu - name: path-context value: . + - name: additional-tags + value: + - '{{target_branch}}-{{revision}}' + - latest - name: build-platforms value: - linux/x86_64 From 453a9170299e65001b60690d65e3466d92a53f87 Mon Sep 17 00:00:00 2001 From: Megha Gaur <97618852+Meghagaur@users.noreply.github.com> Date: Wed, 12 Nov 2025 10:39:01 +0530 Subject: [PATCH 25/43] Update trustyai README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 69fe9a44c9..6d89f0f9d3 100644 --- a/README.md +++ b/README.md @@ -187,7 +187,7 @@ This table provides a concise overview of the support status for various contain |------------|----------|--------|------|---------|----------|----------|--------|-------------| | CPU Minimal | - | 3.12 | UBI9 | ✅ | ✅ | ✅ | ✅ | [quay.io/repository/opendatahub/odh-workbench-jupyter-minimal-cpu-py312-ubi9](https://quay.io/repository/opendatahub/odh-workbench-jupyter-minimal-cpu-py312-ubi9?tab=tags) | | CPU DataScience | - | 3.12 | UBI9 | ✅ | ✅ | ✅ | ✅ | [quay.io/repository/opendatahub/odh-workbench-jupyter-datascience-cpu-py312-ubi9](https://quay.io/repository/opendatahub/odh-workbench-jupyter-datascience-cpu-py312-ubi9?tab=tags) | -| CPU TrustyAI | - | 3.12 | UBI9 | ✅ | ✅ | ✅ | - | [quay.io/repository/opendatahub/odh-workbench-jupyter-trustyai-cpu-py312-ubi9](https://quay.io/repository/opendatahub/odh-workbench-jupyter-trustyai-cpu-py312-ubi9?tab=tags) | +| CPU TrustyAI | - | 3.12 | UBI9 | ✅ | ✅ | ✅ | ✅ | [quay.io/repository/opendatahub/odh-workbench-jupyter-trustyai-cpu-py312-ubi9](https://quay.io/repository/opendatahub/odh-workbench-jupyter-trustyai-cpu-py312-ubi9?tab=tags) | | CPU CodeServer | - | 3.12 | UBI9 | ✅ | ✅ | ✅ | ✅ | [quay.io/repository/opendatahub/odh-workbench-codeserver-datascience-cpu-py312-ubi9](https://quay.io/repository/opendatahub/odh-workbench-codeserver-datascience-cpu-py312-ubi9?tab=tags) | | CPU RStudio | - | 3.12 | C9S | ✅ | ✅ | - | - | [quay.io/repository/opendatahub/odh-workbench-rstudio-minimal-cpu-py312-c9s](https://quay.io/repository/opendatahub/odh-workbench-rstudio-minimal-cpu-py312-c9s?tab=tags) | | CUDA Minimal | 12.8 | 3.12 | UBI9/RHEL9.6 | ✅ | ✅ | ❌ | ❌ | [quay.io/repository/opendatahub/odh-workbench-jupyter-minimal-cuda-py312-ubi9](https://quay.io/repository/opendatahub/odh-workbench-jupyter-minimal-cuda-py312-ubi9?tab=tags) | From 70d0c355dd94a7fa3cc99bba7d6dd8e9d423c18c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Tue, 11 Nov 2025 16:48:28 +0100 Subject: [PATCH 26/43] RHOAIENG-38634: ODH Konflux Release Build Onboarding RStudio workbenches (#2664) ```bash if command -v subscription-manager &> /dev/null; then echo "RHEL system detected. Running subscription-manager register." ... else echo "Non-RHEL system detected. Skipping subscription-manager register." fi ``` --- ...-minimal-cpu-py312-rhel9-pull-request.yaml | 55 +++++++++++++++++++ ...-rstudio-minimal-cpu-py312-rhel9-push.yaml | 49 +++++++++++++++++ ...minimal-cuda-py312-rhel9-pull-request.yaml | 55 +++++++++++++++++++ ...rstudio-minimal-cuda-py312-rhel9-push.yaml | 49 +++++++++++++++++ rstudio/rhel9-python-3.12/Dockerfile.cpu | 6 +- rstudio/rhel9-python-3.12/Dockerfile.cuda | 6 +- rstudio/rhel9-python-3.12/build-args/cpu.conf | 4 +- .../rhel9-python-3.12/build-args/cuda.conf | 4 +- 8 files changed, 222 insertions(+), 6 deletions(-) create mode 100644 .tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-pull-request.yaml create mode 100644 .tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-push.yaml create mode 100644 .tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-pull-request.yaml create mode 100644 .tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-push.yaml diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-pull-request.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-pull-request.yaml new file mode 100644 index 0000000000..7bb14caecd --- /dev/null +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-pull-request.yaml @@ -0,0 +1,55 @@ +# yamllint disable-file +# This pipeline is autogenerated by scripts/generate_pull_request_pipelineruns.py +--- +apiVersion: tekton.dev/v1 +kind: PipelineRun +metadata: + annotations: + build.appstudio.openshift.io/repo: https://github.com/opendatahub-io/notebooks?rev={{revision}} + build.appstudio.redhat.com/commit_sha: '{{revision}}' + build.appstudio.redhat.com/pull_request_number: '{{pull_request_number}}' + build.appstudio.redhat.com/target_branch: '{{target_branch}}' + pipelinesascode.tekton.dev/cancel-in-progress: 'true' + pipelinesascode.tekton.dev/max-keep-runs: '3' + pipelinesascode.tekton.dev/on-comment: ^/kfbuild\s+(all|odh\-workbench\-rstudio\-minimal\-cpu\-py312\-rhel9|rstudio/rhel9\-python\-3\.12) + pipelinesascode.tekton.dev/on-cel-expression: | + event == "pull_request" && target_branch == "main" && + !("manifests/base/params-latest.env".pathChanged()) && + ( ".tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-pull-request.yaml".pathChanged() || "rstudio/rhel9-python-3.12/**".pathChanged() || "rstudio/rhel9-python-3.12/build-args/cpu.conf".pathChanged() ) + && body.repository.full_name == "opendatahub-io/notebooks" + labels: + appstudio.openshift.io/application: opendatahub-release + appstudio.openshift.io/component: odh-workbench-rstudio-minimal-cpu-py312-rhel9 + pipelines.appstudio.openshift.io/type: build + name: odh-workbench-rstudio-minimal-cpu-py312-rhel9-on-pull-request + namespace: open-data-hub-tenant +spec: + timeouts: + pipeline: 3h + params: + - name: git-url + value: '{{source_url}}' + - name: revision + value: '{{revision}}' + - name: output-image + value: quay.io/opendatahub/odh-workbench-rstudio-minimal-cpu-py312-rhel9:on-pr-{{revision}} + - name: image-expires-after + value: 5d + - name: build-platforms + value: + - linux/x86_64 + - name: dockerfile + value: rstudio/rhel9-python-3.12/Dockerfile.cpu + - name: path-context + value: . + - name: build-args-file + value: rstudio/rhel9-python-3.12/build-args/cpu.conf + pipelineRef: + name: multiarch-pull-request-pipeline + taskRunTemplate: + serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cpu-py312-rhel9 + workspaces: + - name: git-auth + secret: + secretName: '{{ git_auth_secret }}' +status: {} diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-push.yaml new file mode 100644 index 0000000000..9d0b518a09 --- /dev/null +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-push.yaml @@ -0,0 +1,49 @@ +apiVersion: tekton.dev/v1 +kind: PipelineRun +metadata: + annotations: + build.appstudio.openshift.io/repo: https://github.com/opendatahub-io/notebooks?rev={{revision}} + build.appstudio.redhat.com/commit_sha: '{{revision}}' + build.appstudio.redhat.com/target_branch: '{{target_branch}}' + pipelinesascode.tekton.dev/cancel-in-progress: "false" + pipelinesascode.tekton.dev/max-keep-runs: "3" + build.appstudio.openshift.io/build-nudge-files: "manifests/base/params-latest.env" + pipelinesascode.tekton.dev/on-cel-expression: event == "push" && target_branch == "main" && + !("manifests/base/params-latest.env".pathChanged()) && + ( ".tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-push.yaml".pathChanged() || "rstudio/rhel9-python-3.12/**".pathChanged() || "rstudio/rhel9-python-3.12/build-args/cpu.conf".pathChanged() ) + creationTimestamp: + labels: + appstudio.openshift.io/application: opendatahub-release + appstudio.openshift.io/component: odh-workbench-rstudio-minimal-cpu-py312-rhel9 + pipelines.appstudio.openshift.io/type: build + name: odh-workbench-rstudio-minimal-cpu-py312-rhel9-on-push + namespace: open-data-hub-tenant +spec: + timeouts: + pipeline: 8h + params: + - name: git-url + value: '{{source_url}}' + - name: revision + value: '{{revision}}' + - name: output-image + value: quay.io/opendatahub/odh-workbench-rstudio-minimal-cpu-py312-rhel9:{{revision}} + - name: dockerfile + value: rstudio/rhel9-python-3.12/Dockerfile.cpu + - name: build-args-file + value: rstudio/rhel9-python-3.12/build-args/cpu.conf + - name: path-context + value: . + - name: additional-tags + value: + - '{{target_branch}}-{{revision}}' + - 2025b-v1.39 + pipelineRef: + name: singlearch-push-pipeline + taskRunTemplate: + serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cpu-py312-rhel9 + workspaces: + - name: git-auth + secret: + secretName: '{{ git_auth_secret }}' +status: {} diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-pull-request.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-pull-request.yaml new file mode 100644 index 0000000000..08ccd499a9 --- /dev/null +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-pull-request.yaml @@ -0,0 +1,55 @@ +# yamllint disable-file +# This pipeline is autogenerated by scripts/generate_pull_request_pipelineruns.py +--- +apiVersion: tekton.dev/v1 +kind: PipelineRun +metadata: + annotations: + build.appstudio.openshift.io/repo: https://github.com/opendatahub-io/notebooks?rev={{revision}} + build.appstudio.redhat.com/commit_sha: '{{revision}}' + build.appstudio.redhat.com/pull_request_number: '{{pull_request_number}}' + build.appstudio.redhat.com/target_branch: '{{target_branch}}' + pipelinesascode.tekton.dev/cancel-in-progress: 'true' + pipelinesascode.tekton.dev/max-keep-runs: '3' + pipelinesascode.tekton.dev/on-comment: ^/kfbuild\s+(all|odh\-workbench\-rstudio\-minimal\-cuda\-py312\-rhel9|rstudio/rhel9\-python\-3\.12) + pipelinesascode.tekton.dev/on-cel-expression: | + event == "pull_request" && target_branch == "main" && + !("manifests/base/params-latest.env".pathChanged()) && + ( ".tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-pull-request.yaml".pathChanged() || "rstudio/rhel9-python-3.12/**".pathChanged() || "rstudio/rhel9-python-3.12/build-args/cuda.conf".pathChanged() ) + && body.repository.full_name == "opendatahub-io/notebooks" + labels: + appstudio.openshift.io/application: opendatahub-release + appstudio.openshift.io/component: odh-workbench-rstudio-minimal-cuda-py312-rhel9 + pipelines.appstudio.openshift.io/type: build + name: odh-workbench-rstudio-minimal-cuda-py312-rhel9-on-pull-request + namespace: open-data-hub-tenant +spec: + timeouts: + pipeline: 3h + params: + - name: git-url + value: '{{source_url}}' + - name: revision + value: '{{revision}}' + - name: output-image + value: quay.io/opendatahub/odh-workbench-rstudio-minimal-cuda-py312-rhel9:on-pr-{{revision}} + - name: image-expires-after + value: 5d + - name: build-platforms + value: + - linux/x86_64 + - name: dockerfile + value: rstudio/rhel9-python-3.12/Dockerfile.cuda + - name: path-context + value: . + - name: build-args-file + value: rstudio/rhel9-python-3.12/build-args/cuda.conf + pipelineRef: + name: multiarch-pull-request-pipeline + taskRunTemplate: + serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cuda-py312-rhel9 + workspaces: + - name: git-auth + secret: + secretName: '{{ git_auth_secret }}' +status: {} diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-push.yaml new file mode 100644 index 0000000000..9534cbecf8 --- /dev/null +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-push.yaml @@ -0,0 +1,49 @@ +apiVersion: tekton.dev/v1 +kind: PipelineRun +metadata: + annotations: + build.appstudio.openshift.io/repo: https://github.com/opendatahub-io/notebooks?rev={{revision}} + build.appstudio.redhat.com/commit_sha: '{{revision}}' + build.appstudio.redhat.com/target_branch: '{{target_branch}}' + pipelinesascode.tekton.dev/cancel-in-progress: "false" + pipelinesascode.tekton.dev/max-keep-runs: "3" + build.appstudio.openshift.io/build-nudge-files: "manifests/base/params-latest.env" + pipelinesascode.tekton.dev/on-cel-expression: event == "push" && target_branch == "main" && + !("manifests/base/params-latest.env".pathChanged()) && + ( ".tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-push.yaml".pathChanged() || "rstudio/rhel9-python-3.12/**".pathChanged() || "rstudio/rhel9-python-3.12/build-args/cuda.conf".pathChanged() ) + creationTimestamp: + labels: + appstudio.openshift.io/application: opendatahub-release + appstudio.openshift.io/component: odh-workbench-rstudio-minimal-cuda-py312-rhel9 + pipelines.appstudio.openshift.io/type: build + name: odh-workbench-rstudio-minimal-cuda-py312-rhel9-on-push + namespace: open-data-hub-tenant +spec: + timeouts: + pipeline: 8h + params: + - name: git-url + value: '{{source_url}}' + - name: revision + value: '{{revision}}' + - name: output-image + value: quay.io/opendatahub/odh-workbench-rstudio-minimal-cuda-py312-rhel9:{{revision}} + - name: dockerfile + value: rstudio/rhel9-python-3.12/Dockerfile.cuda + - name: build-args-file + value: rstudio/rhel9-python-3.12/build-args/cuda.conf + - name: path-context + value: . + - name: additional-tags + value: + - '{{target_branch}}-{{revision}}' + - 2025b-v1.39 + pipelineRef: + name: singlearch-push-pipeline + taskRunTemplate: + serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cuda-py312-rhel9 + workspaces: + - name: git-auth + secret: + secretName: '{{ git_auth_secret }}' +status: {} diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cpu b/rstudio/rhel9-python-3.12/Dockerfile.cpu index 90e8802f05..9bda7a7db0 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cpu +++ b/rstudio/rhel9-python-3.12/Dockerfile.cpu @@ -107,7 +107,11 @@ ENV R_VERSION=4.5.1 RUN /bin/bash <<'EOF' set -Eeuxo pipefail dnf install -y dnf-plugins-core -subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms +if command -v subscription-manager &> /dev/null; then + subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms +else + dnf config-manager --set-enabled crb +fi dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ R-littler R-littler-examples openssl-libs compat-openssl11" diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cuda b/rstudio/rhel9-python-3.12/Dockerfile.cuda index d12083a0d3..cace34175e 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cuda +++ b/rstudio/rhel9-python-3.12/Dockerfile.cuda @@ -121,7 +121,11 @@ ENV R_VERSION=4.5.1 RUN /bin/bash <<'EOF' set -Eeuxo pipefail dnf install -y dnf-plugins-core -subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms +if command -v subscription-manager &> /dev/null; then + subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms +else + dnf config-manager --set-enabled crb +fi dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ R-littler R-littler-examples openssl-libs compat-openssl11" diff --git a/rstudio/rhel9-python-3.12/build-args/cpu.conf b/rstudio/rhel9-python-3.12/build-args/cpu.conf index a876f4d37b..2dec27f449 100644 --- a/rstudio/rhel9-python-3.12/build-args/cpu.conf +++ b/rstudio/rhel9-python-3.12/build-args/cpu.conf @@ -1,3 +1,3 @@ -# Base Image : UBI 9 with Python 3.12 +# Base Image : CentOS Stream 9 with Python 3.12 # Architectures: linux/arm64, linux/x86_64 -BASE_IMAGE=registry.redhat.io/rhel9/python-312:latest +BASE_IMAGE=quay.io/opendatahub/odh-base-image-cpu-py312-c9s:latest diff --git a/rstudio/rhel9-python-3.12/build-args/cuda.conf b/rstudio/rhel9-python-3.12/build-args/cuda.conf index 57885d5e19..d6c3287261 100644 --- a/rstudio/rhel9-python-3.12/build-args/cuda.conf +++ b/rstudio/rhel9-python-3.12/build-args/cuda.conf @@ -1,4 +1,4 @@ -# Base Image : UBI 9 with Python 3.12 +# Base Image : CentOS Stream 9 with Python 3.12 # CUDA Version : 12.8.1 # Architectures: linux/arm64, linux/x86_64 -BASE_IMAGE=quay.io/opendatahub/odh-base-image-cuda-py312-ubi9:v12.8 +BASE_IMAGE=quay.io/opendatahub/odh-base-image-cuda-py312-c9s:v12.8 From 70140c317110d9d04c697ac8b4eae4242607a77d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Tue, 11 Nov 2025 21:47:10 +0100 Subject: [PATCH 27/43] NO-JIRA: workaround(rstudio/rhel): c9s base does not normally have redhat release key (#2664) When we update to latest AIPCC bases that don't remove the ``.repo` files, we will be able to remove the COPYs. ``` Red Hat Universal Base Image 9 (RPMs) - BaseOS 0.0 B/s | 0 B 00:00 Curl error (37): Couldn't read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release] ``` --- rstudio/rhel9-python-3.12/Dockerfile.cpu | 1 + rstudio/rhel9-python-3.12/Dockerfile.cuda | 1 + 2 files changed, 2 insertions(+) diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cpu b/rstudio/rhel9-python-3.12/Dockerfile.cpu index 9bda7a7db0..560dc86f1e 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cpu +++ b/rstudio/rhel9-python-3.12/Dockerfile.cpu @@ -22,6 +22,7 @@ USER root # The Quay-based AIPCC image is "repo-less" by default (https://gitlab.com/redhat/rhel-ai/core/base-images/app#repositories), so dnf cannot upgrade or install packages. # By copying ubi.repo from the public UBI 9 image, we enable package management for upgrades and installations. COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo +COPY --from=ubi-repos /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release # upgrade first to avoid fixable vulnerabilities begin # Problem: The operation would result in removing the following protected packages: systemd diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cuda b/rstudio/rhel9-python-3.12/Dockerfile.cuda index cace34175e..ebd9831362 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cuda +++ b/rstudio/rhel9-python-3.12/Dockerfile.cuda @@ -22,6 +22,7 @@ USER root # The Quay-based AIPCC image is "repo-less" by default (https://gitlab.com/redhat/rhel-ai/core/base-images/app#repositories), so dnf cannot upgrade or install packages. # By copying ubi.repo from the public UBI 9 image, we enable package management for upgrades and installations. COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo +COPY --from=ubi-repos /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release # upgrade first to avoid fixable vulnerabilities begin # Problem: The operation would result in removing the following protected packages: systemd From 27d92117fc10058f37f024b01ccc86eaed7d1bf0 Mon Sep 17 00:00:00 2001 From: aTheo Date: Wed, 12 Nov 2025 08:51:48 +0100 Subject: [PATCH 28/43] RHAIENG-948: rebase cpu images to pull from aipcc base images (#1683) --- codeserver/ubi9-python-3.12/build-args/cpu.conf | 4 ++-- jupyter/datascience/ubi9-python-3.12/build-args/cpu.conf | 4 ++-- jupyter/minimal/ubi9-python-3.12/build-args/cpu.conf | 4 ++-- jupyter/trustyai/ubi9-python-3.12/build-args/cpu.conf | 4 ++-- runtimes/datascience/ubi9-python-3.12/build-args/cpu.conf | 4 ++-- runtimes/minimal/ubi9-python-3.12/build-args/cpu.conf | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/codeserver/ubi9-python-3.12/build-args/cpu.conf b/codeserver/ubi9-python-3.12/build-args/cpu.conf index 4583ee67cb..8fe9d4edc9 100644 --- a/codeserver/ubi9-python-3.12/build-args/cpu.conf +++ b/codeserver/ubi9-python-3.12/build-args/cpu.conf @@ -1,3 +1,3 @@ -# Base Image : UBI 9 with Python 3.12 +# Base Image : RHEL 9.6 with Python 3.12 # Architectures: linux/arm64, linux/ppc64le, linux/x86_64, linux/s360x -BASE_IMAGE=registry.access.redhat.com/ubi9/python-312:latest +BASE_IMAGE=quay.io/aipcc/base-images/cpu:3.0-1761580156 diff --git a/jupyter/datascience/ubi9-python-3.12/build-args/cpu.conf b/jupyter/datascience/ubi9-python-3.12/build-args/cpu.conf index 4583ee67cb..8fe9d4edc9 100644 --- a/jupyter/datascience/ubi9-python-3.12/build-args/cpu.conf +++ b/jupyter/datascience/ubi9-python-3.12/build-args/cpu.conf @@ -1,3 +1,3 @@ -# Base Image : UBI 9 with Python 3.12 +# Base Image : RHEL 9.6 with Python 3.12 # Architectures: linux/arm64, linux/ppc64le, linux/x86_64, linux/s360x -BASE_IMAGE=registry.access.redhat.com/ubi9/python-312:latest +BASE_IMAGE=quay.io/aipcc/base-images/cpu:3.0-1761580156 diff --git a/jupyter/minimal/ubi9-python-3.12/build-args/cpu.conf b/jupyter/minimal/ubi9-python-3.12/build-args/cpu.conf index 4583ee67cb..8fe9d4edc9 100644 --- a/jupyter/minimal/ubi9-python-3.12/build-args/cpu.conf +++ b/jupyter/minimal/ubi9-python-3.12/build-args/cpu.conf @@ -1,3 +1,3 @@ -# Base Image : UBI 9 with Python 3.12 +# Base Image : RHEL 9.6 with Python 3.12 # Architectures: linux/arm64, linux/ppc64le, linux/x86_64, linux/s360x -BASE_IMAGE=registry.access.redhat.com/ubi9/python-312:latest +BASE_IMAGE=quay.io/aipcc/base-images/cpu:3.0-1761580156 diff --git a/jupyter/trustyai/ubi9-python-3.12/build-args/cpu.conf b/jupyter/trustyai/ubi9-python-3.12/build-args/cpu.conf index 4583ee67cb..8fe9d4edc9 100644 --- a/jupyter/trustyai/ubi9-python-3.12/build-args/cpu.conf +++ b/jupyter/trustyai/ubi9-python-3.12/build-args/cpu.conf @@ -1,3 +1,3 @@ -# Base Image : UBI 9 with Python 3.12 +# Base Image : RHEL 9.6 with Python 3.12 # Architectures: linux/arm64, linux/ppc64le, linux/x86_64, linux/s360x -BASE_IMAGE=registry.access.redhat.com/ubi9/python-312:latest +BASE_IMAGE=quay.io/aipcc/base-images/cpu:3.0-1761580156 diff --git a/runtimes/datascience/ubi9-python-3.12/build-args/cpu.conf b/runtimes/datascience/ubi9-python-3.12/build-args/cpu.conf index 4583ee67cb..8fe9d4edc9 100644 --- a/runtimes/datascience/ubi9-python-3.12/build-args/cpu.conf +++ b/runtimes/datascience/ubi9-python-3.12/build-args/cpu.conf @@ -1,3 +1,3 @@ -# Base Image : UBI 9 with Python 3.12 +# Base Image : RHEL 9.6 with Python 3.12 # Architectures: linux/arm64, linux/ppc64le, linux/x86_64, linux/s360x -BASE_IMAGE=registry.access.redhat.com/ubi9/python-312:latest +BASE_IMAGE=quay.io/aipcc/base-images/cpu:3.0-1761580156 diff --git a/runtimes/minimal/ubi9-python-3.12/build-args/cpu.conf b/runtimes/minimal/ubi9-python-3.12/build-args/cpu.conf index 4583ee67cb..8fe9d4edc9 100644 --- a/runtimes/minimal/ubi9-python-3.12/build-args/cpu.conf +++ b/runtimes/minimal/ubi9-python-3.12/build-args/cpu.conf @@ -1,3 +1,3 @@ -# Base Image : UBI 9 with Python 3.12 +# Base Image : RHEL 9.6 with Python 3.12 # Architectures: linux/arm64, linux/ppc64le, linux/x86_64, linux/s360x -BASE_IMAGE=registry.access.redhat.com/ubi9/python-312:latest +BASE_IMAGE=quay.io/aipcc/base-images/cpu:3.0-1761580156 From 7695cc1eae645360994557177cdfce09153a8a7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Wed, 12 Nov 2025 09:36:04 +0100 Subject: [PATCH 29/43] RHAIENG-948: add `subscription-manager refresh` to all UBI9-based Dockerfiles for improved subscription handling (#1686) --- codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu | 2 ++ jupyter/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu | 2 ++ jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu | 2 ++ jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda | 2 ++ jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm | 2 ++ jupyter/trustyai/ubi9-python-3.12/Dockerfile.konflux.cpu | 2 ++ runtimes/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu | 2 ++ runtimes/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu | 2 ++ 8 files changed, 16 insertions(+) diff --git a/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu b/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu index 989651d242..5b3c815347 100644 --- a/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -70,6 +70,8 @@ RUN touch /tmp/control # cpu-base # #################### FROM ${BASE_IMAGE} AS cpu-base +USER 0 +RUN subscription-manager refresh WORKDIR /opt/app-root/bin diff --git a/jupyter/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu b/jupyter/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu index 5ac02beacb..6279bdd573 100644 --- a/jupyter/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/jupyter/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -37,6 +37,8 @@ RUN arch="${TARGETARCH:-$(uname -m)}" && \ # cpu-base # #################### FROM ${BASE_IMAGE} AS cpu-base +USER 0 +RUN subscription-manager refresh WORKDIR /opt/app-root/bin diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu index eece2861a0..bd67f530af 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -28,6 +28,8 @@ RUN ./install_pandoc.sh # cpu-base # #################### FROM ${BASE_IMAGE} AS cpu-base +USER 0 +RUN subscription-manager refresh WORKDIR /opt/app-root/bin diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda index 3c741d9715..b725fbc391 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda @@ -12,6 +12,8 @@ FROM registry.access.redhat.com/ubi9/ubi AS ubi-repos # cuda-base # #################### FROM ${BASE_IMAGE} AS cuda-base +USER 0 +RUN subscription-manager refresh WORKDIR /opt/app-root/bin diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm index 4ae07f9283..a677080a2e 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm @@ -10,6 +10,8 @@ FROM registry.access.redhat.com/ubi9/ubi AS ubi-repos # rocm-base # #################### FROM ${BASE_IMAGE} AS rocm-base +USER 0 +RUN subscription-manager refresh WORKDIR /opt/app-root/bin diff --git a/jupyter/trustyai/ubi9-python-3.12/Dockerfile.konflux.cpu b/jupyter/trustyai/ubi9-python-3.12/Dockerfile.konflux.cpu index 985431abd9..c1fa8ab8fc 100644 --- a/jupyter/trustyai/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/jupyter/trustyai/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -23,6 +23,8 @@ RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ # wheel-cache-base # #################### FROM ${BASE_IMAGE} AS whl-cache +USER 0 +RUN subscription-manager refresh # hadolint ignore=DL3002 USER root diff --git a/runtimes/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu b/runtimes/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu index ca0ceb13b6..c188930875 100644 --- a/runtimes/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/runtimes/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -10,6 +10,8 @@ FROM registry.access.redhat.com/ubi9/ubi AS ubi-repos # cpu-base # #################### FROM ${BASE_IMAGE} AS cpu-base +USER 0 +RUN subscription-manager refresh ARG TARGETARCH diff --git a/runtimes/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu b/runtimes/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu index 3913bec0c2..0000a7c2de 100644 --- a/runtimes/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/runtimes/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -10,6 +10,8 @@ FROM registry.access.redhat.com/ubi9/ubi AS ubi-repos # cpu-base # #################### FROM ${BASE_IMAGE} AS cpu-base +USER 0 +RUN subscription-manager refresh WORKDIR /opt/app-root/bin From 18a2698e421d454c05059e78131ec67bba36c62b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Wed, 12 Nov 2025 10:43:36 +0100 Subject: [PATCH 30/43] AIPCC-6811, RHAIENG-948: update micropipenv installation to include `--extra-index-url` in all Dockerfiles (#2667) --- codeserver/ubi9-python-3.12/Dockerfile.cpu | 2 +- jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu | 2 +- jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu | 2 +- jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda | 2 +- jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm | 2 +- jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda | 2 +- jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda | 2 +- jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm | 2 +- jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm | 2 +- jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda | 2 +- jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu | 2 +- rstudio/c9s-python-3.12/Dockerfile.cpu | 2 +- rstudio/c9s-python-3.12/Dockerfile.cuda | 2 +- rstudio/rhel9-python-3.12/Dockerfile.cpu | 2 +- rstudio/rhel9-python-3.12/Dockerfile.cuda | 2 +- runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu | 2 +- runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu | 2 +- runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda | 2 +- runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda | 2 +- runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm | 2 +- runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm | 2 +- runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda | 2 +- scripts/dockerfile_fragments.py | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) diff --git a/codeserver/ubi9-python-3.12/Dockerfile.cpu b/codeserver/ubi9-python-3.12/Dockerfile.cpu index 51cc5d302b..6c5528993c 100644 --- a/codeserver/ubi9-python-3.12/Dockerfile.cpu +++ b/codeserver/ubi9-python-3.12/Dockerfile.cpu @@ -115,7 +115,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu b/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu index 2902d381a7..6228007343 100644 --- a/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu +++ b/jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu @@ -113,7 +113,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu index 0f3d8d67c5..b86d8e3bc9 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu @@ -45,7 +45,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda index d033c843df..700b22fc55 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda @@ -47,7 +47,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm b/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm index d5753cd9ee..11c52e0e01 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm @@ -45,7 +45,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda b/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda index 21d2a5dee7..9d39f617ce 100644 --- a/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda @@ -63,7 +63,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda b/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda index c6943ce6e8..d299e411b7 100644 --- a/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda @@ -63,7 +63,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm b/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm index f8c7bc1587..fbc8aa8ae1 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm @@ -61,7 +61,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm b/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm index 10fa5b0383..f75c7a4ac9 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm +++ b/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm @@ -61,7 +61,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda b/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda index a8860dbf82..4bf1308cfd 100644 --- a/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda +++ b/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda @@ -63,7 +63,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu b/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu index 3f104f616d..8380b83685 100644 --- a/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu +++ b/jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu @@ -86,7 +86,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/rstudio/c9s-python-3.12/Dockerfile.cpu b/rstudio/c9s-python-3.12/Dockerfile.cpu index 53876ffc0e..d5e8d84bee 100644 --- a/rstudio/c9s-python-3.12/Dockerfile.cpu +++ b/rstudio/c9s-python-3.12/Dockerfile.cpu @@ -13,7 +13,7 @@ FROM ${BASE_IMAGE} AS cpu-base WORKDIR /opt/app-root/bin # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # OS Packages needs to be installed as root diff --git a/rstudio/c9s-python-3.12/Dockerfile.cuda b/rstudio/c9s-python-3.12/Dockerfile.cuda index 5f2e74a15a..d4a45d0500 100644 --- a/rstudio/c9s-python-3.12/Dockerfile.cuda +++ b/rstudio/c9s-python-3.12/Dockerfile.cuda @@ -35,7 +35,7 @@ RUN dnf install -y mesa-libGL && dnf clean all && rm -rf /var/cache/yum USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end WORKDIR /opt/app-root/src diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cpu b/rstudio/rhel9-python-3.12/Dockerfile.cpu index 560dc86f1e..116b4b7aea 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cpu +++ b/rstudio/rhel9-python-3.12/Dockerfile.cpu @@ -44,7 +44,7 @@ RUN dnf install -y perl mesa-libGL && dnf clean all && rm -rf /var/cache/yum USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end WORKDIR /opt/app-root/src diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cuda b/rstudio/rhel9-python-3.12/Dockerfile.cuda index ebd9831362..043770401a 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cuda +++ b/rstudio/rhel9-python-3.12/Dockerfile.cuda @@ -44,7 +44,7 @@ RUN dnf install -y perl mesa-libGL && dnf clean all && rm -rf /var/cache/yum USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end WORKDIR /opt/app-root/src diff --git a/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu b/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu index 560993c3e2..b5ab75da1b 100644 --- a/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu +++ b/runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu @@ -106,7 +106,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu b/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu index 94f0e16041..44611fbaf2 100644 --- a/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu +++ b/runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu @@ -51,7 +51,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda b/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda index df407700d7..7220cce919 100644 --- a/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda +++ b/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda @@ -47,7 +47,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda b/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda index ccefee2bcd..1f78041f64 100644 --- a/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda +++ b/runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda @@ -47,7 +47,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm b/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm index 95fd255e5a..9b46064bb6 100644 --- a/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm +++ b/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm @@ -45,7 +45,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm b/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm index 7668b1e44e..b448336b1e 100644 --- a/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm +++ b/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm @@ -45,7 +45,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda b/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda index 8ad8352c5e..96de9c9695 100644 --- a/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda +++ b/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda @@ -49,7 +49,7 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin diff --git a/scripts/dockerfile_fragments.py b/scripts/dockerfile_fragments.py index 868d9fa383..4fca5be4f5 100755 --- a/scripts/dockerfile_fragments.py +++ b/scripts/dockerfile_fragments.py @@ -39,7 +39,7 @@ def main(): blockinfile( dockerfile, - textwrap.dedent('''RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12"'''), + textwrap.dedent('''RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12"'''), prefix="Install micropipenv and uv to deploy packages from requirements.txt", ) From e98422e1f6bb415c9024940474d2aa574d838818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Dan=C4=9Bk?= Date: Wed, 12 Nov 2025 11:16:06 +0100 Subject: [PATCH 31/43] NO-JIRA: chore: apply changes from `check_dockerfile_alignment.sh` --- .../ubi9-python-3.12/Dockerfile.konflux.cpu | 194 +++++---- .../ubi9-python-3.12/Dockerfile.konflux.cpu | 266 +++++++----- .../ubi9-python-3.12/Dockerfile.konflux.cpu | 62 ++- .../ubi9-python-3.12/Dockerfile.konflux.cuda | 63 ++- .../ubi9-python-3.12/Dockerfile.konflux.rocm | 71 ++- .../ubi9-python-3.12/Dockerfile.konflux.cuda | 89 ++-- .../ubi9-python-3.12/Dockerfile.konflux.cuda | 89 ++-- .../ubi9-python-3.12/Dockerfile.konflux.rocm | 98 +++-- .../ubi9-python-3.12/Dockerfile.konflux.rocm | 97 +++-- .../ubi9-python-3.12/Dockerfile.konflux.cuda | 89 ++-- .../ubi9-python-3.12/Dockerfile.konflux.cpu | 177 +++++--- .../ubi9-python-3.12/Dockerfile.konflux.cpu | 410 ++++++++++-------- .../ubi9-python-3.12/Dockerfile.konflux.cpu | 59 ++- .../ubi9-python-3.12/Dockerfile.konflux.cuda | 46 +- .../ubi9-python-3.12/Dockerfile.konflux.cuda | 46 +- .../ubi9-python-3.12/Dockerfile.konflux.rocm | 55 ++- .../ubi9-python-3.12/Dockerfile.konflux.rocm | 52 ++- .../ubi9-python-3.12/Dockerfile.konflux.cuda | 49 ++- 18 files changed, 1215 insertions(+), 797 deletions(-) diff --git a/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu b/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu index 5b3c815347..d619c50144 100644 --- a/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/codeserver/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -55,13 +55,15 @@ COPY ${CODESERVER_SOURCE_CODE}/devel_env_setup.sh ./ # Important: Since HOME & USER for the python-312 has been changed, # we need to ensure the same cache directory is mounted in # the final stage with the necessary permissions to consume from cache -RUN --mount=type=cache,target=/root/.cache/uv \ - pip install --no-cache-dir uv && \ - # the devel script is ppc64le and s390x specific - sets up build-time dependencies - source ./devel_env_setup.sh && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - UV_LINK_MODE=copy uv pip install --strict --no-deps --refresh --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +RUN --mount=type=cache,target=/root/.cache/uv /bin/bash <<'EOF' +set -Eeuxo pipefail +pip install --no-cache-dir uv +# the devel script is ppc64le and s390x specific - sets up build-time dependencies +source ./devel_env_setup.sh +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +UV_LINK_MODE=copy uv pip install --strict --no-deps --refresh --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +EOF # dummy file to make image build wait for this stage RUN touch /tmp/control @@ -87,32 +89,46 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y tar perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/dnf +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y tar perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/dnf +EOF # (ARCH-ppc64le): since wheels are compiled from source, we need shared libs available at runtime -RUN --mount=type=cache,from=whl-cache,source=/root/OpenBLAS,target=/OpenBlas,rw \ - bash -c ' \ - if [[ $(uname -m) == "ppc64le" ]]; then \ - PREFIX=/usr/ make install -C /OpenBlas; \ - fi ' +RUN --mount=type=cache,from=whl-cache,source=/root/OpenBLAS,target=/OpenBlas,rw /bin/bash <<'EOF' +set -Eeuxo pipefail +if [[ $(uname -m) == "ppc64le" ]]; then + PREFIX=/usr/ make install -C /OpenBlas +fi +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end #################### @@ -157,21 +173,28 @@ COPY --from=rpm-base /tmp/control /dev/null # Install code-server # Note: Use cache mounts, bind mounts fail on konflux # https://redhat-internal.slack.com/archives/C04PZ7H0VA8/p1755628065772589?thread_ts=1755597929.335999&cid=C04PZ7H0VA8 -RUN --mount=type=cache,from=rpm-base,source=/tmp/,target=/code-server-rpm/,rw \ - # EXPLANATION: dnf installation produces an "unsigned rpm" error from Konflux (Conforma) - # since we're building rpm from source, we will simply unpack it over / - # dnf install -y "/code-server-rpm/code-server-${CODESERVER_VERSION/v/}-${TARGETARCH}.rpm" - # dnf -y clean all --enablerepo='*' - dnf install -y cpio && dnf -y clean all && \ - cd / && rpm2cpio "/code-server-rpm/code-server-${CODESERVER_VERSION/v/}-${TARGETARCH}.rpm" | cpio -idmv +RUN --mount=type=cache,from=rpm-base,source=/tmp/,target=/code-server-rpm/,rw /bin/bash <<'EOF' +set -Eeuxo pipefail +# EXPLANATION: dnf installation produces an "unsigned rpm" error from Konflux (Conforma) +# since we're building rpm from source, we will simply unpack it over / +# dnf install -y "/code-server-rpm/code-server-${CODESERVER_VERSION/v/}-${TARGETARCH}.rpm" +# dnf -y clean all --enablerepo='*' +dnf install -y cpio +dnf -y clean all +cd / +rpm2cpio "/code-server-rpm/code-server-${CODESERVER_VERSION/v/}-${TARGETARCH}.rpm" | cpio -idmv +EOF COPY --chown=1001:0 ${CODESERVER_SOURCE_CODE}/utils utils/ # Create and intall the extensions though build-time on a temporary directory. Later this directory will copied on the `/opt/app-root/src/.local/share/code-server/extensions` via run-code-server.sh file when it starts up. # https://coder.com/docs/code-server/FAQ#how-do-i-install-an-extension -RUN mkdir -p /opt/app-root/extensions-temp && \ - code-server --install-extension /opt/app-root/bin/utils/ms-python.python-2025.14.0.vsix --extensions-dir /opt/app-root/extensions-temp && \ - code-server --install-extension /opt/app-root/bin/utils/ms-toolsai.jupyter-2025.8.0.vsix --extensions-dir /opt/app-root/extensions-temp +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +mkdir -p /opt/app-root/extensions-temp +code-server --install-extension /opt/app-root/bin/utils/ms-python.python-2025.14.0.vsix --extensions-dir /opt/app-root/extensions-temp +code-server --install-extension /opt/app-root/bin/utils/ms-toolsai.jupyter-2025.8.0.vsix --extensions-dir /opt/app-root/extensions-temp +EOF # Install NGINX to proxy code-server and pass probes check ENV APP_ROOT=/opt/app-root @@ -188,10 +211,13 @@ ENV NGINX_CONFIGURATION_PATH=${APP_ROOT}/etc/nginx.d \ NGINX_PERL_MODULE_PATH=${APP_ROOT}/etc/perl # Modules does not exist -RUN INSTALL_PKGS="bind-utils nginx nginx-mod-stream nginx-mod-http-perl httpd" && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - dnf -y clean all --enablerepo='*' +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +INSTALL_PKGS="bind-utils nginx nginx-mod-stream nginx-mod-http-perl httpd" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +rpm -V $INSTALL_PKGS +dnf -y clean all --enablerepo='*' +EOF # Configure httpd for CGI processing COPY --chown=1001:0 ${CODESERVER_SOURCE_CODE}/httpd/httpd.conf /etc/httpd/conf/httpd.conf @@ -216,34 +242,37 @@ COPY ${CODESERVER_SOURCE_CODE}/nginx/api/ /opt/app-root/api/ # UID=1001 && GID=0 # UID=&& GID=0 # UID=1001 && GID= -RUN sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ && \ - mkdir -p ${NGINX_APP_ROOT}/api/ && \ - mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - mkdir -p ${NGINX_LOG_PATH} && \ - mkdir -p ${NGINX_PERL_MODULE_PATH} && \ - # Create httpd directories and set permissions - mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chown -R 1001:0 ${NGINX_CONF_PATH} && \ - chown -R 1001:0 ${NGINX_APP_ROOT}/etc && \ - chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chown -R 1001:0 /var/lib/nginx /var/log/nginx /run && \ - chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - chmod ug+rw ${NGINX_CONF_PATH} && \ - chmod -R ug+rwX ${NGINX_APP_ROOT}/etc && \ - chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start && \ - chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run && \ - chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs && \ - # Make CGI script executable - chmod +x /opt/app-root/api/kernels/access.cgi && \ - rpm-file-permissions && \ - # Ensure the temporary directory and target directory have the correct permissions - mkdir -p /opt/app-root/src/.local/share/code-server/extensions && \ - mkdir -p /opt/app-root/src/.local/share/code-server/coder-logs && \ - chown -R 1001:0 /opt/app-root/src/.local/share/code-server && \ - chown -R 1001:0 /opt/app-root/extensions-temp && \ - chown -R 1001:0 /opt/app-root/src/.config/code-server +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ +mkdir -p ${NGINX_APP_ROOT}/api/ +mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +mkdir -p ${NGINX_LOG_PATH} +mkdir -p ${NGINX_PERL_MODULE_PATH} +# Create httpd directories and set permissions +mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs +chown -R 1001:0 ${NGINX_CONF_PATH} +chown -R 1001:0 ${NGINX_APP_ROOT}/etc +chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chown -R 1001:0 /var/lib/nginx /var/log/nginx /run +chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs +chmod ug+rw ${NGINX_CONF_PATH} +chmod -R ug+rwX ${NGINX_APP_ROOT}/etc +chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run +chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs +# Make CGI script executable +chmod +x /opt/app-root/api/kernels/access.cgi +rpm-file-permissions +# Ensure the temporary directory and target directory have the correct permissions +mkdir -p /opt/app-root/src/.local/share/code-server/extensions +mkdir -p /opt/app-root/src/.local/share/code-server/coder-logs +chown -R 1001:0 /opt/app-root/src/.local/share/code-server +chown -R 1001:0 /opt/app-root/extensions-temp +chown -R 1001:0 /opt/app-root/src/.config/code-server +EOF # Launcher COPY --chown=1001:0 ${CODESERVER_SOURCE_CODE}/run-code-server.sh ${CODESERVER_SOURCE_CODE}/run-nginx.sh ./ @@ -261,28 +290,35 @@ COPY --from=whl-cache /tmp/control /dev/null # Install packages and cleanup # (ARCH-ppc64le): install packages (eg. pyarrow) that need to be built from source repository on ppc64le RUN --mount=type=cache,target=/root/.cache/uv \ - --mount=type=cache,from=whl-cache,source=/wheelsdir/,target=/wheelsdir/,rw \ - bash -c ' \ - if [[ $(uname -m) == "ppc64le" ]] || [[ $(uname -m) == "s390x" ]]; then \ - uv pip install /wheelsdir/*.whl; \ - fi ' + --mount=type=cache,from=whl-cache,source=/wheelsdir/,target=/wheelsdir/,rw /bin/bash <<'EOF' +set -Eeuxo pipefail +if [[ $(uname -m) == "ppc64le" ]] || [[ $(uname -m) == "s390x" ]]; then + uv pip install /wheelsdir/*.whl +fi +EOF + # install packages as USER 0 (this will allow us to consume uv cache) -RUN --mount=type=cache,target=/root/.cache/uv \ - echo "Installing softwares and packages" && \ - # we can ensure wheels are consumed from the cache only by restricting internet access for uv install with '--offline' flag - # TODO(jdanek): seen some builds fail on GitHub Actions with --offline and see no need to limit ourselves to the cache, will remove this - UV_LINK_MODE=copy uv pip install --cache-dir /root/.cache/uv --requirements=./pylock.toml && \ - # Note: debugpy wheel availabe on pypi (in uv cache) is none-any but bundles amd64.so files - # Build debugpy from source instead - UV_LINK_MODE=copy uv pip install --no-cache git+https://github.com/microsoft/debugpy.git@v$(grep -A1 '\"debugpy\"' ./pylock.toml | grep -Eo '\b[0-9\.]+\b') && \ - # change ownership to default user (all packages were installed as root and has root:root ownership \ - chown -R 1001:0 /opt/app-root +RUN --mount=type=cache,target=/root/.cache/uv /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# we can ensure wheels are consumed from the cache only by restricting internet access for uv install with '--offline' flag +# TODO(jdanek): seen some builds fail on GitHub Actions with --offline and see no need to limit ourselves to the cache, will remove this +UV_LINK_MODE=copy uv pip install --cache-dir /root/.cache/uv --requirements=./pylock.toml +# Note: debugpy wheel availabe on pypi (in uv cache) is none-any but bundles amd64.so files +# Build debugpy from source instead +UV_LINK_MODE=copy uv pip install --no-cache git+https://github.com/microsoft/debugpy.git@v$(grep -A1 '\"debugpy\"' ./pylock.toml | grep -Eo '\b[0-9\.]+\b') +# change ownership to default user (all packages were installed as root and has root:root ownership +chown -R 1001:0 /opt/app-root +EOF USER 1001 # Fix permissions to support pip in Openshift environments -RUN chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/jupyter/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu b/jupyter/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu index 6279bdd573..8e5018b307 100644 --- a/jupyter/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/jupyter/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -19,19 +19,22 @@ ARG TARGETARCH # Keep s390x special-case from original (create dummy binary) but # include explicit curl/unzip steps from the delta for non-s390x. -RUN arch="${TARGETARCH:-$(uname -m)}" && \ - arch=$(echo "$arch" | cut -d- -f1) && \ - if [ "$arch" = "s390x" ]; then \ - echo "Skipping mongocli build for ${arch}, creating dummy binary"; \ - mkdir -p /tmp && printf '#!/bin/sh\necho "mongocli not supported on s390x"\n' > /tmp/mongocli && \ - chmod +x /tmp/mongocli; \ - else \ - echo "Building mongocli for ${arch}"; \ - curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip && \ - unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip && \ - cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux GOARCH=${arch} GO111MODULE=on go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +arch="${TARGETARCH:-$(uname -m)}" +arch=$(echo "$arch" | cut -d- -f1) +if [ "$arch" = "s390x" ]; then + echo "Skipping mongocli build for ${arch}, creating dummy binary" + mkdir -p /tmp && printf '#!/bin/sh\necho "mongocli not supported on s390x"\n' > /tmp/mongocli + chmod +x /tmp/mongocli +else + echo "Building mongocli for ${arch}" + curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip + unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip + cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ + CGO_ENABLED=1 GOOS=linux GOARCH=${arch} GO111MODULE=on go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +fi +EOF #################### # cpu-base # @@ -55,21 +58,28 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN --mount=type=cache,target=/var/cache/dnf \ - echo "Building for architecture: ${TARGETARCH}" && \ - if [ "$TARGETARCH" = "s390x" ]; then \ - PACKAGES="perl mesa-libGL skopeo gcc gcc-c++ make openssl-devel autoconf automake libtool cmake python3-devel pybind11-devel openblas-devel unixODBC-devel"; \ - else \ - PACKAGES="perl mesa-libGL skopeo"; \ - fi && \ - echo "Installing: $PACKAGES" && \ - dnf install -y $PACKAGES && \ - dnf clean all && rm -rf /var/cache/yum +RUN --mount=type=cache,target=/var/cache/dnf /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Building for architecture: ${TARGETARCH}" +if [ "$TARGETARCH" = "s390x" ]; then + PACKAGES="perl mesa-libGL skopeo gcc gcc-c++ make openssl-devel autoconf automake libtool cmake python3-devel pybind11-devel openblas-devel unixODBC-devel" +else + PACKAGES="perl mesa-libGL skopeo" +fi +echo "Installing: $PACKAGES" +dnf install -y $PACKAGES +dnf clean all +rm -rf /var/cache/yum +EOF RUN /bin/bash <<'EOF' set -Eeuxo pipefail @@ -105,14 +115,18 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ############################## @@ -128,55 +142,57 @@ WORKDIR /tmp/build-wheels # Build pyarrow on ppc64le and s390x RUN --mount=type=cache,target=/root/.cache/pip \ - --mount=type=cache,target=/root/.cache/dnf \ - if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then \ - # Install build dependencies (shared for pyarrow and onnx) - dnf install -y cmake make gcc-c++ pybind11-devel wget && \ - dnf clean all && \ - # Build and collect pyarrow wheel - git clone --depth 1 --branch "apache-arrow-17.0.0" https://github.com/apache/arrow.git && \ - cd arrow/cpp && \ - mkdir release && cd release && \ - ARROW_S3_FLAG="" && \ - if [ "$TARGETARCH" != "s390x" ]; then ARROW_S3_FLAG="-DARROW_S3=ON"; fi && \ - cmake -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DARROW_PYTHON=ON \ - -DARROW_PARQUET=ON \ - -DARROW_ORC=ON \ - -DARROW_FILESYSTEM=ON \ - -DARROW_JSON=ON \ - -DARROW_CSV=ON \ - -DARROW_DATASET=ON \ - -DARROW_DEPENDENCY_SOURCE=BUNDLED \ - -DARROW_WITH_LZ4=OFF \ - -DARROW_WITH_ZSTD=OFF \ - -DARROW_WITH_SNAPPY=OFF \ - ${ARROW_S3_FLAG} \ - -DARROW_SUBSTRAIT=ON \ - -DARROW_BUILD_TESTS=OFF \ - -DARROW_BUILD_BENCHMARKS=OFF \ - .. && \ - make -j$(nproc) VERBOSE=1 && \ - make install -j$(nproc) && \ - cd ../../python && \ - pip install --no-cache-dir -r requirements-build.txt && \ - PYARROW_WITH_PARQUET=1 \ - PYARROW_WITH_DATASET=1 \ - PYARROW_WITH_FILESYSTEM=1 \ - PYARROW_WITH_JSON=1 \ - PYARROW_WITH_CSV=1 \ - PYARROW_PARALLEL=$(nproc) \ - python setup.py build_ext --build-type=release --bundle-arrow-cpp bdist_wheel && \ - mkdir -p /tmp/wheels && \ - cp dist/pyarrow-*.whl /tmp/wheels/ && \ - chmod -R 777 /tmp/wheels && \ - # Ensure wheels directory exists and has content - ls -la /tmp/wheels/; \ - else \ - # Create empty wheels directory for non-s390x - mkdir -p /tmp/wheels; \ - fi + --mount=type=cache,target=/root/.cache/dnf /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then + # Install build dependencies (shared for pyarrow and onnx) + dnf install -y cmake make gcc-c++ pybind11-devel wget + dnf clean all + # Build and collect pyarrow wheel + git clone --depth 1 --branch "apache-arrow-17.0.0" https://github.com/apache/arrow.git + cd arrow/cpp + mkdir release && cd release + ARROW_S3_FLAG="" + if [ "$TARGETARCH" != "s390x" ]; then ARROW_S3_FLAG="-DARROW_S3=ON"; fi + cmake -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DARROW_PYTHON=ON \ + -DARROW_PARQUET=ON \ + -DARROW_ORC=ON \ + -DARROW_FILESYSTEM=ON \ + -DARROW_JSON=ON \ + -DARROW_CSV=ON \ + -DARROW_DATASET=ON \ + -DARROW_DEPENDENCY_SOURCE=BUNDLED \ + -DARROW_WITH_LZ4=OFF \ + -DARROW_WITH_ZSTD=OFF \ + -DARROW_WITH_SNAPPY=OFF \ + ${ARROW_S3_FLAG} \ + -DARROW_SUBSTRAIT=ON \ + -DARROW_BUILD_TESTS=OFF \ + -DARROW_BUILD_BENCHMARKS=OFF \ + .. + make -j$(nproc) VERBOSE=1 + make install -j$(nproc) + cd ../../python + pip install --no-cache-dir -r requirements-build.txt + PYARROW_WITH_PARQUET=1 \ + PYARROW_WITH_DATASET=1 \ + PYARROW_WITH_FILESYSTEM=1 \ + PYARROW_WITH_JSON=1 \ + PYARROW_WITH_CSV=1 \ + PYARROW_PARALLEL=$(nproc) \ + python setup.py build_ext --build-type=release --bundle-arrow-cpp bdist_wheel + mkdir -p /tmp/wheels + cp dist/pyarrow-*.whl /tmp/wheels/ + chmod -R 777 /tmp/wheels + # Ensure wheels directory exists and has content + ls -la /tmp/wheels/ +else + # Create empty wheels directory for non-s390x + mkdir -p /tmp/wheels +fi +EOF ####################################################### # common-builder (for Power-only) @@ -258,6 +274,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 @@ -291,8 +308,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC unixODBC-devel postgresql git-lfs libsndfile libxcrypt-compat && \ - dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC unixODBC-devel postgresql git-lfs libsndfile libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -304,11 +325,14 @@ ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ # Copy wheels from build stage (ppc64le and s390x only) COPY --from=pyarrow-builder /tmp/wheels /tmp/wheels -RUN if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then \ - pip install --no-cache-dir /tmp/wheels/*.whl; \ -else \ - echo "Skipping wheel install for $TARGETARCH"; \ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then + pip install --no-cache-dir /tmp/wheels/*.whl +else + echo "Skipping wheel install for $TARGETARCH" fi +EOF # Copy OpenBLAS,ONNX wheels for Power COPY --from=openblas-builder /root/OpenBLAS-${OPENBLAS_VERSION} /openblas @@ -351,41 +375,43 @@ COPY ${DATASCIENCE_SOURCE_CODE}/pylock.toml ./ # Copy Elyra setup to utils so that it's sourced at startup COPY ${DATASCIENCE_SOURCE_CODE}/setup-elyra.sh ${DATASCIENCE_SOURCE_CODE}/utils ./utils/ -RUN --mount=type=cache,target=/root/.cache/pip \ - echo "Installing software and packages" && \ +RUN --mount=type=cache,target=/root/.cache/pip /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing software and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then + # We need special flags and environment variables when building packages + GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ + CFLAGS="-O3" CXXFLAGS="-O3" \ + uv pip install --strict --no-deps --no-cache --no-config --no-progress \ + --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match \ + --requirements=./pylock.toml +else # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then \ - # We need special flags and environment variables when building packages - GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ - CFLAGS="-O3" CXXFLAGS="-O3" \ - uv pip install --strict --no-deps --no-cache --no-config --no-progress \ - --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match \ - --requirements=./pylock.toml; \ - else \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress \ - --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match \ - --requirements=./pylock.toml; \ - fi && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - mkdir /opt/app-root/pipeline-runtimes && \ - # 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 && \ - # copy jupyter configuration - install -D -m 0644 /opt/app-root/bin/utils/jupyter_server_config.py \ - /opt/app-root/etc/jupyter/jupyter_server_config.py && \ - # Disable announcement plugin of jupyterlab \ - jupyter labextension disable "@jupyterlab/apputils-extension:announcements" && \ - # Apply JupyterLab addons \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P + # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. + uv pip install --strict --no-deps --no-cache --no-config --no-progress \ + --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match \ + --requirements=./pylock.toml +fi +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +mkdir /opt/app-root/pipeline-runtimes +# 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 +# copy jupyter configuration +install -D -m 0644 /opt/app-root/bin/utils/jupyter_server_config.py \ + /opt/app-root/etc/jupyter/jupyter_server_config.py +# Disable announcement plugin of jupyterlab +jupyter labextension disable "@jupyterlab/apputils-extension:announcements" +# Apply JupyterLab addons +/opt/app-root/bin/utils/addons/apply.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu index bd67f530af..9c3871fa36 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -45,25 +45,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end #################### @@ -95,21 +108,24 @@ USER 1001 COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ # Install Python dependencies from requirements.txt file -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Disable announcement plugin of jupyterlab \ - 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.12/site-packages && \ - fix-permissions /opt/app-root -P && \ - # Apply JupyterLab addons \ - /opt/app-root/bin/utils/addons/apply.sh +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Disable announcement plugin of jupyterlab +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.12/site-packages +fix-permissions /opt/app-root -P +# Apply JupyterLab addons +/opt/app-root/bin/utils/addons/apply.sh +EOF WORKDIR /opt/app-root/src diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda index b725fbc391..945ba0492c 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.cuda @@ -29,25 +29,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### @@ -77,6 +90,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 @@ -84,21 +98,24 @@ USER 1001 COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./ # Install Python dependencies from requirements.txt file -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Disable announcement plugin of jupyterlab \ - 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.12/site-packages && \ - fix-permissions /opt/app-root -P && \ - # Apply JupyterLab addons \ - /opt/app-root/bin/utils/addons/apply.sh +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Disable announcement plugin of jupyterlab +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.12/site-packages +fix-permissions /opt/app-root -P +# Apply JupyterLab addons +/opt/app-root/bin/utils/addons/apply.sh +EOF WORKDIR /opt/app-root/src diff --git a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm index a677080a2e..8ff3a46338 100644 --- a/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm +++ b/jupyter/minimal/ubi9-python-3.12/Dockerfile.konflux.rocm @@ -27,25 +27,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################## @@ -65,6 +78,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 @@ -74,22 +88,31 @@ COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ${MINIMAL_SOURCE_CODE}/start-notebook.sh USER 0 # Install Python dependencies from Pipfile.lock file -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Disable announcement plugin of jupyterlab \ - 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 && \ - # Apply JupyterLab addons \ - /opt/app-root/bin/utils/addons/apply.sh - -# Fix permissions to support pip in Openshift environments \ -RUN chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Disable announcement plugin of jupyterlab +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.12/site-packages +fix-permissions /opt/app-root -P +# Apply JupyterLab addons +/opt/app-root/bin/utils/addons/apply.sh +EOF + +# Fix permissions to support pip in Openshift environments +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF USER 1001 WORKDIR /opt/app-root/src diff --git a/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.konflux.cuda b/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.konflux.cuda index 0a087f3ceb..3b105b0336 100644 --- a/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.konflux.cuda +++ b/jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.konflux.cuda @@ -16,10 +16,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # cuda-base # @@ -40,25 +43,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### @@ -80,6 +96,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 @@ -101,7 +118,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC postgresql git-lfs libsndfile && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC postgresql git-lfs libsndfile +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -127,25 +149,28 @@ WORKDIR /opt/app-root/bin # Install Python packages and Jupyterlab extensions from requirements.txt COPY ${PYTORCH_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +# 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 +# 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 +/opt/app-root/bin/utils/addons/apply.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/jupyter/pytorch/ubi9-python-3.12/Dockerfile.konflux.cuda b/jupyter/pytorch/ubi9-python-3.12/Dockerfile.konflux.cuda index 9067136801..c7ef81df1e 100644 --- a/jupyter/pytorch/ubi9-python-3.12/Dockerfile.konflux.cuda +++ b/jupyter/pytorch/ubi9-python-3.12/Dockerfile.konflux.cuda @@ -16,10 +16,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # cuda-base # @@ -40,25 +43,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### @@ -80,6 +96,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 @@ -101,7 +118,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -127,25 +149,28 @@ WORKDIR /opt/app-root/bin # Install Python packages and Jupyterlab extensions from requirements.txt COPY ${PYTORCH_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +# 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 +# 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 +/opt/app-root/bin/utils/addons/apply.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.konflux.rocm b/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.konflux.rocm index 69696aa3fe..c67cb79a6d 100644 --- a/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.konflux.rocm +++ b/jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.konflux.rocm @@ -14,10 +14,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # rocm-base # @@ -38,25 +41,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################## @@ -78,6 +94,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 @@ -99,7 +116,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -124,31 +146,35 @@ WORKDIR /opt/app-root/bin COPY ${PYTORCH_SOURCE_CODE}/pylock.toml ${PYTORCH_SOURCE_CODE}/de-vendor-torch.sh ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh - USER 0 -# De-vendor the ROCm libs that are embedded in Pytorch and fix permissions to support pip in Openshift environments -RUN ./de-vendor-torch.sh && \ - rm ./de-vendor-torch.sh && \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages || true && \ - fix-permissions /opt/app-root -P -USER 1001 +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +# 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 +# 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 +/opt/app-root/bin/utils/addons/apply.sh +# De-vendor the ROCm libs that are embedded in Pytorch +./de-vendor-torch.sh +rm ./de-vendor-torch.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF + +USER 1001 WORKDIR /opt/app-root/src LABEL name="rhoai/odh-workbench-jupyter-pytorch-rocm-py312-rhel9" \ diff --git a/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.konflux.rocm b/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.konflux.rocm index c125fcd479..9785459caa 100644 --- a/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.konflux.rocm +++ b/jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.konflux.rocm @@ -14,10 +14,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # rocm-base # @@ -38,25 +41,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################## @@ -76,6 +92,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 @@ -99,7 +116,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC postgresql git-lfs libsndfile && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC postgresql git-lfs libsndfile +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -125,37 +147,38 @@ WORKDIR /opt/app-root/bin COPY ${TENSORFLOW_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - # Not using --build-constraints=./requirements.txt because error: Unnamed requirements are not allowed as constraints (found: `https://repo.radeon.com/rocm/manylinux/rocm-rel-6.4/ - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh - -# Fix permissions to support pip in Openshift environments \ USER 0 -RUN chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P -USER 1001 + +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +# Not using --build-constraints=./requirements.txt because error: Unnamed requirements are not allowed as constraints (found: `https://repo.radeon.com/rocm/manylinux/rocm-rel-6.4/ +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +# 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 +# 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 +/opt/app-root/bin/utils/addons/apply.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF COPY ${JUPYTER_REUSABLE_UTILS}/usercustomize.pth ${JUPYTER_REUSABLE_UTILS}/monkey_patch_protobuf_6x.py /opt/app-root/lib/python3.12/site-packages/ -USER 0 COPY ${TENSORFLOW_SOURCE_CODE}/utils/link-solibs.sh /tmp/link-solibs.sh RUN /tmp/link-solibs.sh && rm /tmp/link-solibs.sh -USER 1001 +USER 1001 WORKDIR /opt/app-root/src LABEL name="rhoai/odh-workbench-jupyter-tensorflow-rocm-py312-rhel9" \ diff --git a/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.konflux.cuda b/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.konflux.cuda index e5c665cfe7..15ca7dae25 100644 --- a/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.konflux.cuda +++ b/jupyter/tensorflow/ubi9-python-3.12/Dockerfile.konflux.cuda @@ -16,10 +16,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # cuda-base # @@ -40,25 +43,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### @@ -80,6 +96,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 @@ -101,7 +118,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC postgresql git-lfs libsndfile libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -128,25 +150,28 @@ WORKDIR /opt/app-root/bin # Install Python packages and Jupyterlab extensions from requirements.txt COPY ${TENSORFLOW_SOURCE_CODE}/pylock.toml ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # setup path for runtime configuration - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# setup path for runtime configuration +mkdir /opt/app-root/runtimes +# 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 +# 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 +/opt/app-root/bin/utils/addons/apply.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF COPY ${JUPYTER_REUSABLE_UTILS}/usercustomize.pth ${JUPYTER_REUSABLE_UTILS}/monkey_patch_protobuf_6x.py /opt/app-root/lib/python3.12/site-packages/ diff --git a/jupyter/trustyai/ubi9-python-3.12/Dockerfile.konflux.cpu b/jupyter/trustyai/ubi9-python-3.12/Dockerfile.konflux.cpu index c1fa8ab8fc..3bb1248442 100644 --- a/jupyter/trustyai/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/jupyter/trustyai/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -14,10 +14,13 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS mongocli-builder ARG MONGOCLI_VERSION=2.0.4 WORKDIR /tmp/ -RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip -RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip -RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \ - CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip +unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip +cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ +CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/ +EOF #################### # wheel-cache-base # @@ -36,18 +39,22 @@ ARG TRUSTYAI_SOURCE_CODE=jupyter/trustyai/ubi9-python-3.12 COPY ${TRUSTYAI_SOURCE_CODE}/pylock.toml . COPY ${TRUSTYAI_SOURCE_CODE}/devel_env_setup.sh . -RUN --mount=type=cache,target=/root/.cache/uv \ - pip install --no-cache-dir uv && \ - # the devel script is ppc64le and s390x specific - sets up build-time dependencies - source ./devel_env_setup.sh && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - UV_LINK_MODE=copy uv pip install --strict --no-deps --refresh --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +RUN --mount=type=cache,target=/root/.cache/uv /bin/bash <<'EOF' +set -Eeuxo pipefail +pip install --no-cache-dir uv +# the devel script is ppc64le and s390x specific - sets up build-time dependencies +source ./devel_env_setup.sh +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +UV_LINK_MODE=copy uv pip install --strict --no-deps --refresh --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +EOF #################### # cpu-base # #################### FROM ${BASE_IMAGE} AS cpu-base +USER 0 +RUN subscription-manager refresh WORKDIR /opt/app-root/bin @@ -63,25 +70,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end #################### @@ -102,6 +122,7 @@ USER 0 # Dependencies for PDF export begin RUN ./utils/install_pdf_deps.sh ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH" + # Dependencies for PDF export end USER 1001 @@ -124,7 +145,12 @@ WORKDIR /opt/app-root/bin USER root # Install useful OS packages -RUN dnf install -y jq unixODBC unixODBC-devel postgresql git-lfs libsndfile libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y jq unixODBC unixODBC-devel postgresql git-lfs libsndfile libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Copy dynamically-linked mongocli built in earlier build stage COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/ @@ -159,64 +185,77 @@ USER 0 # Install jre that is needed to run the trustyai library # Also install runtime libraries for s390x/ppc64le -RUN INSTALL_PKGS="java-17-openjdk" && \ - ARCH=$(uname -m) && \ - if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then \ - # Add runtime libraries needed for s390x/ppc64le (OpenBLAS for PyTorch/NumPy) - INSTALL_PKGS="$INSTALL_PKGS openblas openblas-threads"; \ - fi && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - dnf -y clean all --enablerepo='*' && \ - # Create symlink for compatibility (openblas package provides libopenblasp.so.0 but PyTorch looks for libopenblas.so.0) - if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then \ - ln -sf /usr/lib64/libopenblasp.so.0 /usr/lib64/libopenblas.so.0 && \ - ldconfig; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +INSTALL_PKGS="java-17-openjdk" +ARCH=$(uname -m) +if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then + # Add runtime libraries needed for s390x/ppc64le (OpenBLAS for PyTorch/NumPy) + INSTALL_PKGS="$INSTALL_PKGS openblas openblas-threads" +fi +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +dnf -y clean all --enablerepo='*' +# Create symlink for compatibility (openblas package provides libopenblasp.so.0 but PyTorch looks for libopenblas.so.0) +if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then + ln -sf /usr/lib64/libopenblasp.so.0 /usr/lib64/libopenblas.so.0 + ldconfig +fi +EOF # Install Python packages and Jupyterlab extensions from requirements.txt COPY ${TRUSTYAI_SOURCE_CODE}/pylock.toml ./ # install openblas for ppc64le -RUN --mount=type=cache,from=whl-cache,source=/root/OpenBLAS/,target=/OpenBlas/,rw \ - bash -c 'ARCH=$(uname -m); \ - if [ "$ARCH" = "ppc64le" ]; then \ - PREFIX=/usr/ make install -C /OpenBlas; \ - fi' +RUN --mount=type=cache,from=whl-cache,source=/root/OpenBLAS/,target=/OpenBlas/,rw /bin/bash <<'EOF' +set -Eeuxo pipefail +ARCH=$(uname -m) +if [ "$ARCH" = "ppc64le" ]; then + PREFIX=/usr/ make install -C /OpenBlas +fi +EOF # Install packages and cleanup # install packages as USER 0 (this will allow us to consume uv cache) RUN --mount=type=cache,from=whl-cache,source=/wheelsdir/,target=/wheelsdir/,rw \ - --mount=type=cache,target=/root/.cache/uv \ - bash -c 'ARCH=$(uname -m); \ - if [ "$ARCH" = "ppc64le" ] || [ "$ARCH" = "s390x" ]; then \ - UV_LINK_MODE=copy uv pip install /wheelsdir/*.whl accelerate --cache-dir /root/.cache/uv; \ - fi' - -RUN --mount=type=cache,target=/root/.cache/uv \ - echo "Installing softwares and packages" && \ - # we can ensure wheels are consumed from the cache only by restricting internet access for uv install with '--offline' flag - UV_LINK_MODE=copy uv pip install --cache-dir /root/.cache/uv --requirements=./pylock.toml && \ - # Note: debugpy wheel availabe on pypi (in uv cache) is none-any but bundles amd64.so files - # Build debugpy from source instead - UV_LINK_MODE=copy uv pip install --no-cache git+https://github.com/microsoft/debugpy.git@v$(grep -A1 '\"debugpy\"' ./pylock.toml | grep -Eo '\b[0-9\.]+\b') && \ - # change ownership to default user (all packages were installed as root and has root:root ownership \ - chown -R 1001:0 /opt/app-root/ && \ - chmod -R g=u /opt/app-root + --mount=type=cache,target=/root/.cache/uv /bin/bash <<'EOF' +set -Eeuxo pipefail +ARCH=$(uname -m) +if [ "$ARCH" = "ppc64le" ] || [ "$ARCH" = "s390x" ]; then + UV_LINK_MODE=copy uv pip install /wheelsdir/*.whl accelerate --cache-dir /root/.cache/uv +fi +EOF + +RUN --mount=type=cache,target=/root/.cache/uv /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# we can ensure wheels are consumed from the cache only by restricting internet access for uv install with '--offline' flag +UV_LINK_MODE=copy uv pip install --cache-dir /root/.cache/uv --requirements=./pylock.toml +# Note: debugpy wheel availabe on pypi (in uv cache) is none-any but bundles amd64.so files +# Build debugpy from source instead +UV_LINK_MODE=copy uv pip install --no-cache git+https://github.com/microsoft/debugpy.git@v$(grep -A1 '\"debugpy\"' ./pylock.toml | grep -Eo '\b[0-9\.]+\b') +# change ownership to default user (all packages were installed as root and has root:root ownership +chown -R 1001:0 /opt/app-root/ +chmod -R g=u /opt/app-root +EOF USER 1001 -RUN # setup path for runtime configuration \ - mkdir /opt/app-root/runtimes && \ - # 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 && \ - # 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 \ - /opt/app-root/bin/utils/addons/apply.sh && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +# TODO: https://issues.redhat.com/browse/RHAIENG-1503 uncomment this +## setup path for runtime configuration +#mkdir /opt/app-root/runtimes +## 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 +## 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 +#/opt/app-root/bin/utils/addons/apply.sh +## Fix permissions to support pip in Openshift environments +#chmod -R g+w /opt/app-root/lib/python3.12/site-packages +#fix-permissions /opt/app-root -P +EOF diff --git a/runtimes/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu b/runtimes/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu index c188930875..a11d08f9ed 100644 --- a/runtimes/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/runtimes/datascience/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -31,32 +31,39 @@ ARG TARGETARCH # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN --mount=type=cache,target=/var/cache/dnf \ - echo "Building for architecture: ${TARGETARCH}" && \ - PACKAGES="perl mesa-libGL skopeo libxcrypt-compat" && \ - # Additional dev tools only for s390x - if [ "$TARGETARCH" = "s390x" ]; then \ - PACKAGES="$PACKAGES gcc gcc-c++ make openssl-devel autoconf automake libtool cmake python3-devel pybind11-devel openblas-devel unixODBC-devel openssl zlib-devel"; \ - fi && \ - if [ "$TARGETARCH" = "ppc64le" ]; then \ - PACKAGES="$PACKAGES git gcc-toolset-13 make wget unzip rust cargo unixODBC-devel cmake ninja-build"; \ - fi && \ - if [ -n "$PACKAGES" ]; then \ - echo "Installing: $PACKAGES" && \ - dnf install -y $PACKAGES && \ - dnf clean all && rm -rf /var/cache/yum; \ - fi +RUN --mount=type=cache,target=/var/cache/dnf /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Building for architecture: ${TARGETARCH}" +PACKAGES="perl mesa-libGL skopeo libxcrypt-compat" +# Additional dev tools only for s390x +if [ "$TARGETARCH" = "s390x" ]; then + PACKAGES="$PACKAGES gcc gcc-c++ make openssl-devel autoconf automake libtool cmake python3-devel pybind11-devel openblas-devel unixODBC-devel openssl zlib-devel" +fi +if [ "$TARGETARCH" = "ppc64le" ]; then + PACKAGES="$PACKAGES git gcc-toolset-13 make wget unzip rust cargo unixODBC-devel cmake ninja-build" +fi +if [ -n "$PACKAGES" ]; then + echo "Installing: $PACKAGES" + dnf install -y $PACKAGES + dnf clean all + rm -rf /var/cache/yum +fi +EOF RUN /bin/bash <<'EOF' set -Eeuxo pipefail if [ "$TARGETARCH" = "ppc64le" ]; then cat > /etc/profile.d/ppc64le.sh <<'PROFILE_EOF' export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ -export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} export OPENBLAS_VERSION=0.3.30 export ONNX_VERSION=1.19.0 export PYARROW_VERSION=17.0.0 @@ -101,14 +108,18 @@ EOF USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ############################## @@ -123,74 +134,79 @@ USER 0 WORKDIR /tmp/build-wheels # Set pyarrow version for s390x -RUN if [ "$TARGETARCH" = "s390x" ]; then \ - echo 'export PYARROW_VERSION=17.0.0' >> /etc/profile.d/s390x.sh; \ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "s390x" ]; then + echo 'export PYARROW_VERSION=17.0.0' >> /etc/profile.d/s390x.sh fi +EOF # Build pyarrow optimized for s390x RUN --mount=type=cache,target=/root/.cache/pip \ - --mount=type=cache,target=/root/.cache/dnf \ - if [ "$TARGETARCH" = "s390x" ]; then \ - # Install build dependencies - dnf install -y cmake make gcc-c++ pybind11-devel wget git \ - openssl-devel zlib-devel bzip2-devel lz4-devel \ - ninja-build && \ - dnf clean all && \ - # Source the environment variables - source /etc/profile.d/s390x.sh && \ - # Clone specific version of arrow - git clone -b apache-arrow-${PYARROW_VERSION} https://github.com/apache/arrow.git && \ - cd arrow && \ - # Set environment variables for build - export ARROW_HOME=/usr/local && \ - export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH && \ - export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH && \ - # Build C++ library first - cd cpp && \ - mkdir build && cd build && \ - cmake -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=$ARROW_HOME \ - -DARROW_PYTHON=ON \ - -DARROW_PARQUET=ON \ - -DARROW_ORC=ON \ - -DARROW_FILESYSTEM=ON \ - -DARROW_JSON=ON \ - -DARROW_CSV=ON \ - -DARROW_DATASET=ON \ - -DARROW_WITH_LZ4=ON \ - -DARROW_WITH_ZSTD=ON \ - -DARROW_WITH_SNAPPY=OFF \ - -DARROW_WITH_BZ2=ON \ - -DARROW_WITH_ZLIB=ON \ - -DARROW_BUILD_TESTS=OFF \ - -DARROW_BUILD_BENCHMARKS=OFF \ - -DARROW_USE_CCACHE=OFF \ - -GNinja \ - .. && \ - ninja install && \ - cd ../../python && \ - # Install Python build requirements - pip install --no-cache-dir -r requirements-build.txt && \ - # Build Python package - PYARROW_WITH_PARQUET=1 \ - PYARROW_WITH_DATASET=1 \ - PYARROW_WITH_FILESYSTEM=1 \ - PYARROW_WITH_JSON=1 \ - PYARROW_WITH_CSV=1 \ - PYARROW_WITH_LZ4=1 \ - PYARROW_WITH_ZSTD=1 \ - PYARROW_WITH_BZ2=1 \ - PYARROW_BUNDLE_ARROW_CPP=1 \ - PYARROW_PARALLEL=$(nproc) \ - python setup.py build_ext --build-type=release --bundle-arrow-cpp bdist_wheel && \ - mkdir -p /tmp/wheels && \ - cp dist/pyarrow-*.whl /tmp/wheels/ && \ - # Ensure wheels directory exists and has content - ls -la /tmp/wheels/; \ - else \ - # Create empty wheels directory for non-s390x - mkdir -p /tmp/wheels; \ - fi + --mount=type=cache,target=/root/.cache/dnf /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "s390x" ]; then + # Install build dependencies + dnf install -y cmake make gcc-c++ pybind11-devel wget git \ + openssl-devel zlib-devel bzip2-devel lz4-devel \ + ninja-build + dnf clean all + # Source the environment variables + source /etc/profile.d/s390x.sh + # Clone specific version of arrow + git clone -b apache-arrow-${PYARROW_VERSION} https://github.com/apache/arrow.git + cd arrow + # Set environment variables for build + export ARROW_HOME=/usr/local + export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} + export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH} + # Build C++ library first + cd cpp + mkdir build && cd build + cmake -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$ARROW_HOME \ + -DARROW_PYTHON=ON \ + -DARROW_PARQUET=ON \ + -DARROW_ORC=ON \ + -DARROW_FILESYSTEM=ON \ + -DARROW_JSON=ON \ + -DARROW_CSV=ON \ + -DARROW_DATASET=ON \ + -DARROW_WITH_LZ4=ON \ + -DARROW_WITH_ZSTD=ON \ + -DARROW_WITH_SNAPPY=OFF \ + -DARROW_WITH_BZ2=ON \ + -DARROW_WITH_ZLIB=ON \ + -DARROW_BUILD_TESTS=OFF \ + -DARROW_BUILD_BENCHMARKS=OFF \ + -DARROW_USE_CCACHE=OFF \ + -GNinja \ + .. + ninja install + cd ../../python + # Install Python build requirements + pip install --no-cache-dir -r requirements-build.txt + # Build Python package + PYARROW_WITH_PARQUET=1 \ + PYARROW_WITH_DATASET=1 \ + PYARROW_WITH_FILESYSTEM=1 \ + PYARROW_WITH_JSON=1 \ + PYARROW_WITH_CSV=1 \ + PYARROW_WITH_LZ4=1 \ + PYARROW_WITH_ZSTD=1 \ + PYARROW_WITH_BZ2=1 \ + PYARROW_BUNDLE_ARROW_CPP=1 \ + PYARROW_PARALLEL=$(nproc) \ + python setup.py build_ext --build-type=release --bundle-arrow-cpp bdist_wheel + mkdir -p /tmp/wheels + cp dist/pyarrow-*.whl /tmp/wheels/ + # Ensure wheels directory exists and has content + ls -la /tmp/wheels/ +else + # Create empty wheels directory for non-s390x + mkdir -p /tmp/wheels +fi +EOF ################################### # openblas builder stage for ppc64le @@ -208,14 +224,18 @@ ENV OPENBLAS_VERSION=0.3.30 RUN echo "openblas-builder stage TARGETARCH: ${TARGETARCH}" # Download and build OpenBLAS -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - source /opt/rh/gcc-toolset-13/enable && \ - wget --progress=dot:giga https://github.com/OpenMathLib/OpenBLAS/releases/download/v${OPENBLAS_VERSION}/OpenBLAS-${OPENBLAS_VERSION}.zip && \ - unzip OpenBLAS-${OPENBLAS_VERSION}.zip && cd OpenBLAS-${OPENBLAS_VERSION} && \ - make -j$(nproc) TARGET=POWER9 BINARY=64 USE_OPENMP=1 USE_THREAD=1 NUM_THREADS=120 DYNAMIC_ARCH=1 INTERFACE64=0; \ - else \ - echo "Not ppc64le, skipping OpenBLAS build" && mkdir -p /root/OpenBLAS-dummy; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ]; then + source /opt/rh/gcc-toolset-13/enable + wget --progress=dot:giga https://github.com/OpenMathLib/OpenBLAS/releases/download/v${OPENBLAS_VERSION}/OpenBLAS-${OPENBLAS_VERSION}.zip + unzip OpenBLAS-${OPENBLAS_VERSION}.zip && cd OpenBLAS-${OPENBLAS_VERSION} + make -j$(nproc) TARGET=POWER9 BINARY=64 USE_OPENMP=1 USE_THREAD=1 NUM_THREADS=120 DYNAMIC_ARCH=1 INTERFACE64=0 +else + echo "Not ppc64le, skipping OpenBLAS build" + mkdir -p /root/OpenBLAS-dummy +fi +EOF ################################### # onnx builder stage for ppc64le @@ -231,18 +251,22 @@ ENV ONNX_VERSION=1.19.0 RUN echo "onnx-builder stage TARGETARCH: ${TARGETARCH}" -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - source /opt/rh/gcc-toolset-13/enable && \ - git clone --recursive https://github.com/onnx/onnx.git && \ - cd onnx && git checkout v${ONNX_VERSION} && \ - git submodule update --init --recursive && \ - pip install --no-cache-dir -r requirements.txt && \ - CMAKE_ARGS="-DPython3_EXECUTABLE=$(which python3.12)" && \ - export CMAKE_ARGS && \ - pip wheel . -w /onnx_wheels; \ - else \ - echo "Not ppc64le, skipping ONNX build" && mkdir -p /onnx_wheels; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ]; then + source /opt/rh/gcc-toolset-13/enable + git clone --recursive https://github.com/onnx/onnx.git + cd onnx && git checkout v${ONNX_VERSION} + git submodule update --init --recursive + pip install --no-cache-dir -r requirements.txt + CMAKE_ARGS="-DPython3_EXECUTABLE=$(which python3.12)" + export CMAKE_ARGS + pip wheel . -w /onnx_wheels +else + echo "Not ppc64le, skipping ONNX build" + mkdir -p /onnx_wheels +fi +EOF ################################### # pyarrow builder stage for ppc64le @@ -258,50 +282,54 @@ ENV PYARROW_VERSION=17.0.0 RUN echo "arrow-builder stage TARGETARCH: ${TARGETARCH}" -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - git clone -b apache-arrow-${PYARROW_VERSION} https://github.com/apache/arrow.git --recursive && \ - cd arrow && rm -rf .git && mkdir dist && \ - pip3 install --no-cache-dir -r python/requirements-build.txt && \ - ARROW_HOME=$(pwd)/dist && \ - export ARROW_HOME && \ - LD_LIBRARY_PATH=$(pwd)/dist/lib:$LD_LIBRARY_PATH && \ - export LD_LIBRARY_PATH && \ - export CMAKE_PREFIX_PATH=$ARROW_HOME:$CMAKE_PREFIX_PATH && \ - export PARQUET_TEST_DATA="${PWD}/cpp/submodules/parquet-testing/data" && \ - export ARROW_TEST_DATA="${PWD}/testing/data" && \ - cmake -S cpp -B cpp/build \ - -DCMAKE_INSTALL_PREFIX=$ARROW_HOME \ - -DCMAKE_BUILD_TYPE=release \ - -DARROW_WITH_BZ2=ON \ - -DARROW_WITH_ZLIB=ON \ - -DARROW_WITH_ZSTD=ON \ - -DARROW_WITH_LZ4=ON \ - -DARROW_WITH_SNAPPY=ON \ - -DARROW_WITH_BROTLI=ON \ - -DARROW_DATASET=ON \ - -DARROW_FILESYSTEM=ON \ - -DARROW_COMPUTE=ON \ - -DARROW_JSON=ON \ - -DARROW_CSV=ON \ - -DARROW_PYTHON=ON \ - -DARROW_PARQUET=ON \ - -DARROW_BUILD_SHARED=ON \ - -DARROW_BUILD_TESTS=OFF && \ - cd cpp/build && \ - make -j20 install && \ - export PYARROW_PARALLEL=20 && \ - export PYARROW_WITH_PARQUET=1 && \ - export PYARROW_WITH_DATASET=1 && \ - export PYARROW_BUNDLE_ARROW_CPP=1 && \ - pip3 install --no-cache-dir wheel && \ - cd ../../python && \ - python setup.py build_ext \ - --build-type=release \ - --bundle-arrow-cpp \ - bdist_wheel --dist-dir /arrowwheels; \ - else \ - echo "Not ppc64le, skipping pyarrow build" && mkdir -p /arrowwheels; \ - fi +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ]; then + git clone -b apache-arrow-${PYARROW_VERSION} https://github.com/apache/arrow.git --recursive + cd arrow && rm -rf .git && mkdir dist + pip3 install --no-cache-dir -r python/requirements-build.txt + ARROW_HOME=$(pwd)/dist + export ARROW_HOME + LD_LIBRARY_PATH=$(pwd)/dist/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} + export LD_LIBRARY_PATH + export CMAKE_PREFIX_PATH=$ARROW_HOME:$CMAKE_PREFIX_PATH + export PARQUET_TEST_DATA="${PWD}/cpp/submodules/parquet-testing/data" + export ARROW_TEST_DATA="${PWD}/testing/data" + cmake -S cpp -B cpp/build \ + -DCMAKE_INSTALL_PREFIX=$ARROW_HOME \ + -DCMAKE_BUILD_TYPE=release \ + -DARROW_WITH_BZ2=ON \ + -DARROW_WITH_ZLIB=ON \ + -DARROW_WITH_ZSTD=ON \ + -DARROW_WITH_LZ4=ON \ + -DARROW_WITH_SNAPPY=ON \ + -DARROW_WITH_BROTLI=ON \ + -DARROW_DATASET=ON \ + -DARROW_FILESYSTEM=ON \ + -DARROW_COMPUTE=ON \ + -DARROW_JSON=ON \ + -DARROW_CSV=ON \ + -DARROW_PYTHON=ON \ + -DARROW_PARQUET=ON \ + -DARROW_BUILD_SHARED=ON \ + -DARROW_BUILD_TESTS=OFF + cd cpp/build + make -j20 install + export PYARROW_PARALLEL=20 + export PYARROW_WITH_PARQUET=1 + export PYARROW_WITH_DATASET=1 + export PYARROW_BUNDLE_ARROW_CPP=1 + pip3 install --no-cache-dir wheel + cd ../../python + python setup.py build_ext \ + --build-type=release \ + --bundle-arrow-cpp \ + bdist_wheel --dist-dir /arrowwheels +else + echo "Not ppc64le, skipping pyarrow build" + mkdir -p /arrowwheels +fi +EOF ####################### # runtime-datascience # @@ -319,25 +347,33 @@ COPY --from=openblas-builder /root/OpenBLAS-* /openblas COPY --from=onnx-builder /onnx_wheels /tmp/onnx_wheels COPY --from=arrow-builder /arrowwheels /tmp/arrowwheels -RUN if [ "$TARGETARCH" = "ppc64le" ]; then \ - echo "Installing ppc64le ONNX, pyarrow wheels and OpenBLAS..." && \ - HOME=/root pip install --no-cache-dir /tmp/onnx_wheels/*.whl /tmp/arrowwheels/*.whl && \ - if [ -d "/openblas" ] && [ "$(ls -A /openblas 2>/dev/null)" ]; then \ - PREFIX=/usr/local make -C /openblas install; \ - fi && rm -rf /openblas /tmp/onnx_wheels /tmp/arrowwheels; \ - else \ - echo "Skipping architecture-specific wheel installs for (${TARGETARCH})" && \ - rm -rf /tmp/wheels /openblas /tmp/onnx_wheels /tmp/arrowwheels; \ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "ppc64le" ]; then + echo "Installing ppc64le ONNX, pyarrow wheels and OpenBLAS..." + HOME=/root pip install --no-cache-dir /tmp/onnx_wheels/*.whl /tmp/arrowwheels/*.whl + if [ -d "/openblas" ] && [ "$(ls -A /openblas 2>/dev/null)" ]; then + PREFIX=/usr/local make -C /openblas install fi + rm -rf /openblas /tmp/onnx_wheels /tmp/arrowwheels +else + echo "Skipping architecture-specific wheel installs for (${TARGETARCH})" + rm -rf /tmp/wheels /openblas /tmp/onnx_wheels /tmp/arrowwheels +fi +EOF USER 0 # Copy wheels from build stage (s390x only) COPY --from=s390x-builder /tmp/wheels /tmp/wheels -RUN if [ "$TARGETARCH" = "s390x" ]; then \ - pip install --no-cache-dir /tmp/wheels/*.whl && rm -rf /tmp/wheels; \ -else \ - echo "Skipping wheel install for $TARGETARCH"; \ +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ "$TARGETARCH" = "s390x" ]; then + pip install --no-cache-dir /tmp/wheels/*.whl + rm -rf /tmp/wheels +else + echo "Skipping wheel install for $TARGETARCH" fi +EOF # Install Python packages from pylock.toml @@ -345,28 +381,30 @@ COPY ${DATASCIENCE_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${DATASCIENCE_SOURCE_CODE}/utils ./utils/ -RUN --mount=type=cache,target=/root/.cache/pip \ - echo "Installing softwares and packages" && \ - if [ "$TARGETARCH" = "ppc64le" ]; then \ - export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig; \ - export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:$LD_LIBRARY_PATH && \ - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml; \ - elif [ "$TARGETARCH" = "s390x" ]; then \ - # For s390x, we need special flags and environment variables for building packages - GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ - CFLAGS="-O3" CXXFLAGS="-O3" \ - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml; \ - else \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml; \ - fi && \ - # change ownership to default user (all packages were installed as root and has root:root ownership - chown -R 1001:0 /opt/app-root/ && \ - chmod -R g=u /opt/app-root && \ - # Fix permissions to support pip in Openshift environments - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN --mount=type=cache,target=/root/.cache/pip /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +if [ "$TARGETARCH" = "ppc64le" ]; then + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig + export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} + uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +elif [ "$TARGETARCH" = "s390x" ]; then + # For s390x, we need special flags and environment variables for building packages + GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ + CFLAGS="-O3" CXXFLAGS="-O3" \ + uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +else + # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, + # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. + uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +fi +# change ownership to default user (all packages were installed as root and has root:root ownership +chown -R 1001:0 /opt/app-root/ +chmod -R g=u /opt/app-root +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF USER 1001 diff --git a/runtimes/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu b/runtimes/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu index 0000a7c2de..090114a3ba 100644 --- a/runtimes/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu +++ b/runtimes/minimal/ubi9-python-3.12/Dockerfile.konflux.cpu @@ -27,32 +27,44 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN ARCH=$(uname -m) && \ - echo "Detected architecture: $ARCH" && \ - PACKAGES="perl mesa-libGL skopeo" && \ - if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then \ - PACKAGES="$PACKAGES gcc g++ make openssl-devel autoconf automake libtool cmake"; \ - fi && \ - dnf install -y $PACKAGES && \ - dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +ARCH=$(uname -m) +echo "Detected architecture: $ARCH" +PACKAGES="perl mesa-libGL skopeo" +if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then + PACKAGES="$PACKAGES gcc g++ make openssl-devel autoconf automake libtool cmake" +fi +dnf install -y $PACKAGES +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end #################### @@ -69,13 +81,16 @@ COPY ${MINIMAL_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${MINIMAL_SOURCE_CODE}/utils ./utils/ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.konflux.cuda b/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.konflux.cuda index 9837967d08..ea54bc5db1 100644 --- a/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.konflux.cuda +++ b/runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.konflux.cuda @@ -27,25 +27,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### @@ -62,13 +75,16 @@ COPY ${PYTORCH_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${PYTORCH_SOURCE_CODE}/utils ./utils/ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/runtimes/pytorch/ubi9-python-3.12/Dockerfile.konflux.cuda b/runtimes/pytorch/ubi9-python-3.12/Dockerfile.konflux.cuda index 73169b4a63..ac153dcbd1 100644 --- a/runtimes/pytorch/ubi9-python-3.12/Dockerfile.konflux.cuda +++ b/runtimes/pytorch/ubi9-python-3.12/Dockerfile.konflux.cuda @@ -27,25 +27,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################### @@ -62,13 +75,16 @@ COPY ${PYTORCH_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${PYTORCH_SOURCE_CODE}/utils ./utils/ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF WORKDIR /opt/app-root/src diff --git a/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.konflux.rocm b/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.konflux.rocm index 6b7dac4bca..1313ea7b55 100644 --- a/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.konflux.rocm +++ b/runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.konflux.rocm @@ -25,25 +25,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ######################## @@ -62,19 +75,23 @@ COPY ${PYTORCH_SOURCE_CODE}/utils ./utils/ # Copy utility script COPY ${PYTORCH_SOURCE_CODE}/de-vendor-torch.sh ./ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml - USER 0 -# De-vendor the ROCm libs that are embedded in Pytorch and fix permissions to support pip in Openshift environments -RUN ./de-vendor-torch.sh && \ - rm ./de-vendor-torch.sh && \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages || true && \ - fix-permissions /opt/app-root -P -USER 1001 +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# De-vendor the ROCm libs that are embedded in Pytorch +./de-vendor-torch.sh +rm ./de-vendor-torch.sh +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF + +USER 1001 WORKDIR /opt/app-root/src LABEL name="rhoai/odh-pipeline-runtime-pytorch-rocm-py312-rhel9" \ diff --git a/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.konflux.rocm b/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.konflux.rocm index 9e84179401..20997f4b7a 100644 --- a/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.konflux.rocm +++ b/runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.konflux.rocm @@ -25,25 +25,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ########################### @@ -61,20 +74,23 @@ COPY ${TENSORFLOW_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${TENSORFLOW_SOURCE_CODE}/utils ./utils/ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - # Not using --build-constraints=./requirements.txt because error: Unnamed requirements are not allowed as constraints (found: `https://repo.radeon.com/rocm/manylinux/rocm-rel-6.4/ - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml - -# Fix permissions to support pip in Openshift environments \ USER 0 -RUN chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P -USER 1001 + +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +# Not using --build-constraints=./requirements.txt because error: Unnamed requirements are not allowed as constraints (found: `https://repo.radeon.com/rocm/manylinux/rocm-rel-6.4/ +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF COPY ${JUPYTER_REUSABLE_UTILS}/usercustomize.pth ${JUPYTER_REUSABLE_UTILS}/monkey_patch_protobuf_6x.py /opt/app-root/lib/python3.12/site-packages/ +USER 1001 WORKDIR /opt/app-root/src LABEL name="rhoai/odh-pipeline-runtime-tensorflow-rocm-py312-rhel9" \ diff --git a/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.konflux.cuda b/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.konflux.cuda index 51a07c005d..ce56e0e866 100644 --- a/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.konflux.cuda +++ b/runtimes/tensorflow/ubi9-python-3.12/Dockerfile.konflux.cuda @@ -29,25 +29,38 @@ COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo # Problem: The operation would result in removing the following protected packages: systemd # (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) # Solution: --best --skip-broken does not work either, so use --nobest -RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 \ - && dnf clean all -y +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + # upgrade first to avoid fixable vulnerabilities end # Install useful OS packages -RUN dnf install -y perl mesa-libGL skopeo libxcrypt-compat && dnf clean all && rm -rf /var/cache/yum +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y perl mesa-libGL skopeo libxcrypt-compat +dnf clean all +rm -rf /var/cache/yum +EOF # Other apps and tools installed as default user USER 1001 # Install micropipenv and uv to deploy packages from requirements.txt begin -RUN pip install --no-cache-dir -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" # Install micropipenv and uv to deploy packages from requirements.txt end # Install the oc client begin -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 && \ - tar -xzvf /tmp/openshift-client-linux.tar.gz oc && \ - rm -f /tmp/openshift-client-linux.tar.gz +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +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 +tar -xzvf /tmp/openshift-client-linux.tar.gz oc +rm -f /tmp/openshift-client-linux.tar.gz +EOF + # Install the oc client end ############################ @@ -65,16 +78,22 @@ COPY ${TENSORFLOW_SOURCE_CODE}/pylock.toml ./ # Copy Elyra dependencies for air-gapped enviroment COPY ${TENSORFLOW_SOURCE_CODE}/utils ./utils/ -RUN echo "Installing softwares and packages" && \ - # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, - # we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. - uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \ - # Fix permissions to support pip in Openshift environments \ - chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \ - fix-permissions /opt/app-root -P +USER 0 + +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF COPY ${JUPYTER_REUSABLE_UTILS}/usercustomize.pth ${JUPYTER_REUSABLE_UTILS}/monkey_patch_protobuf_6x.py /opt/app-root/lib/python3.12/site-packages/ +USER 1001 WORKDIR /opt/app-root/src LABEL name="rhoai/odh-pipeline-runtime-tensorflow-cuda-py312-rhel9" \ From c434a9803eda45c6816176058c89a2741815489b Mon Sep 17 00:00:00 2001 From: konflux-internal-p02 Date: Wed, 12 Nov 2025 14:44:27 +0000 Subject: [PATCH 32/43] Konflux Internal p02 update odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc Signed-off-by: konflux-internal-p02 --- ...mal-cuda-py312-rhel9-poc-pull-request.yaml | 605 ++++++++++++++++++ ...dio-minimal-cuda-py312-rhel9-poc-push.yaml | 602 +++++++++++++++++ 2 files changed, 1207 insertions(+) create mode 100644 .tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-pull-request.yaml create mode 100644 .tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-pull-request.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-pull-request.yaml new file mode 100644 index 0000000000..712f453a05 --- /dev/null +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-pull-request.yaml @@ -0,0 +1,605 @@ +apiVersion: tekton.dev/v1 +kind: PipelineRun +metadata: + annotations: + build.appstudio.openshift.io/repo: https://github.com/red-hat-data-services/notebooks?rev={{revision}} + build.appstudio.redhat.com/commit_sha: '{{revision}}' + build.appstudio.redhat.com/pull_request_number: '{{pull_request_number}}' + build.appstudio.redhat.com/target_branch: '{{target_branch}}' + pipelinesascode.tekton.dev/cancel-in-progress: "true" + pipelinesascode.tekton.dev/max-keep-runs: "3" + pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch + == "R-studio-konflux-poc" + creationTimestamp: null + labels: + appstudio.openshift.io/application: rstudio-poc + appstudio.openshift.io/component: odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc + pipelines.appstudio.openshift.io/type: build + name: odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-on-pull-request + namespace: rhoai-tenant +spec: + params: + - name: git-url + value: '{{source_url}}' + - name: revision + value: '{{revision}}' + - name: output-image + value: quay.io/redhat-user-workloads/rhoai-tenant/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc:on-pr-{{revision}} + - name: image-expires-after + value: 5d + - name: dockerfile + value: rstudio/rhel9-python-3.12/Dockerfile.cuda + - name: path-context + value: . + pipelineSpec: + description: | + This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. + + _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. + This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ + params: + - description: Source Repository URL + name: git-url + type: string + - default: "" + description: Revision of the Source Repository + name: revision + type: string + - description: Fully Qualified Output Image + name: output-image + type: string + - default: . + description: Path to the source code of an application's component from where + to build image. + name: path-context + type: string + - default: Dockerfile + description: Path to the Dockerfile inside the context specified by parameter + path-context + name: dockerfile + type: string + - default: "false" + description: Force rebuild image + name: rebuild + type: string + - default: "false" + description: Skip checks against built image + name: skip-checks + type: string + - default: "false" + description: Execute the build with network isolation + name: hermetic + type: string + - default: "" + description: Build dependencies to be prefetched + name: prefetch-input + type: string + - default: "" + description: Image tag expiration time, time values could be something like + 1h, 2d, 3w for hours, days, and weeks, respectively. + name: image-expires-after + type: string + - default: "false" + description: Build a source image. + name: build-source-image + type: string + - default: "false" + description: Add built image into an OCI image index + name: build-image-index + type: string + - default: docker + description: The format for the resulting image's mediaType. Valid values are + oci or docker. + name: buildah-format + type: string + - default: [] + description: Array of --build-arg values ("arg=value" strings) for buildah + name: build-args + type: array + - default: "" + description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file + name: build-args-file + type: string + - default: "false" + description: Whether to enable privileged mode, should be used only with remote + VMs + name: privileged-nested + type: string + results: + - description: "" + name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - description: "" + name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - description: "" + name: CHAINS-GIT_URL + value: $(tasks.clone-repository.results.url) + - description: "" + name: CHAINS-GIT_COMMIT + value: $(tasks.clone-repository.results.commit) + tasks: + - name: init + params: + - name: image-url + value: $(params.output-image) + - name: rebuild + value: $(params.rebuild) + - name: skip-checks + value: $(params.skip-checks) + taskRef: + params: + - name: name + value: init + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 + - name: kind + value: task + resolver: bundles + - name: clone-repository + params: + - name: url + value: $(params.git-url) + - name: revision + value: $(params.revision) + - name: ociStorage + value: $(params.output-image).git + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - init + taskRef: + params: + - name: name + value: git-clone-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3dc39eae48745a96097c07c577b944d6203a91c35d3f71d9ed5feab41d327a6a + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + workspaces: + - name: basic-auth + workspace: git-auth + - name: prefetch-dependencies + params: + - name: input + value: $(params.prefetch-input) + - name: SOURCE_ARTIFACT + value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) + - name: ociStorage + value: $(params.output-image).prefetch + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - clone-repository + taskRef: + params: + - name: name + value: prefetch-dependencies-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:5946ca57aa29f162e11b74984ec58960f55f9fb6a0e97c6c9215c4161f768726 + - name: kind + value: task + resolver: bundles + workspaces: + - name: git-basic-auth + workspace: git-auth + - name: netrc + workspace: netrc + - name: build-container + params: + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: PRIVILEGED_NESTED + value: $(params.privileged-nested) + - name: SOURCE_URL + value: $(tasks.clone-repository.results.url) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - prefetch-dependencies + taskRef: + params: + - name: name + value: buildah-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:27b04ea788cf64fd38c7d151feb5e1ca408804fa5a70cf704ae746a086ee92b8 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-image-index + params: + - name: IMAGE + value: $(params.output-image) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: ALWAYS_BUILD_INDEX + value: $(params.build-image-index) + - name: IMAGES + value: + - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + runAfter: + - build-container + taskRef: + params: + - name: name + value: build-image-index + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:31197f4ee71be47c6f491e888ff266cbbb8ad5ed1c7c4141cc14f002d1802a50 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-source-image + params: + - name: BINARY_IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: BINARY_IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: source-build-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:282cb5a9119a87e88559444feff67d76d6f356d03654b4845632c049b2314735 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - input: $(params.build-source-image) + operator: in + values: + - "true" + - name: deprecated-base-image-check + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: deprecated-image-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clair-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clair-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: ecosystem-cert-preflight-checks + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: ecosystem-cert-preflight-checks + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-snyk-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-snyk-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clamav-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clamav-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-coverity-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - coverity-availability-check + taskRef: + params: + - name: name + value: sast-coverity-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - input: $(tasks.coverity-availability-check.results.STATUS) + operator: in + values: + - success + - name: coverity-availability-check + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: coverity-availability-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-shell-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-shell-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-unicode-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-unicode-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: apply-tags + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: apply-tags + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:4c2b0a2d2904108f8d19edfa878df6cd49ed19aab73ab6fc6a435fba0265f771 + - name: kind + value: task + resolver: bundles + - name: push-dockerfile + params: + - name: IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: push-dockerfile-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:13633d5ba8445c0f732a0a5d1b33ffbb708398e45ef1647542b0ab22fee25a6a + - name: kind + value: task + resolver: bundles + - name: rpms-signature-scan + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: rpms-signature-scan + - name: bundle + value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + workspaces: + - name: git-auth + optional: true + - name: netrc + optional: true + taskRunTemplate: + serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc + workspaces: + - name: git-auth + secret: + secretName: '{{ git_auth_secret }}' +status: {} diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml new file mode 100644 index 0000000000..c6d1eda9fe --- /dev/null +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml @@ -0,0 +1,602 @@ +apiVersion: tekton.dev/v1 +kind: PipelineRun +metadata: + annotations: + build.appstudio.openshift.io/repo: https://github.com/red-hat-data-services/notebooks?rev={{revision}} + build.appstudio.redhat.com/commit_sha: '{{revision}}' + build.appstudio.redhat.com/target_branch: '{{target_branch}}' + pipelinesascode.tekton.dev/cancel-in-progress: "false" + pipelinesascode.tekton.dev/max-keep-runs: "3" + pipelinesascode.tekton.dev/on-cel-expression: event == "push" && target_branch + == "R-studio-konflux-poc" + creationTimestamp: null + labels: + appstudio.openshift.io/application: rstudio-poc + appstudio.openshift.io/component: odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc + pipelines.appstudio.openshift.io/type: build + name: odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-on-push + namespace: rhoai-tenant +spec: + params: + - name: git-url + value: '{{source_url}}' + - name: revision + value: '{{revision}}' + - name: output-image + value: quay.io/redhat-user-workloads/rhoai-tenant/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc:{{revision}} + - name: dockerfile + value: rstudio/rhel9-python-3.12/Dockerfile.cuda + - name: path-context + value: . + pipelineSpec: + description: | + This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. + + _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. + This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ + params: + - description: Source Repository URL + name: git-url + type: string + - default: "" + description: Revision of the Source Repository + name: revision + type: string + - description: Fully Qualified Output Image + name: output-image + type: string + - default: . + description: Path to the source code of an application's component from where + to build image. + name: path-context + type: string + - default: Dockerfile + description: Path to the Dockerfile inside the context specified by parameter + path-context + name: dockerfile + type: string + - default: "false" + description: Force rebuild image + name: rebuild + type: string + - default: "false" + description: Skip checks against built image + name: skip-checks + type: string + - default: "false" + description: Execute the build with network isolation + name: hermetic + type: string + - default: "" + description: Build dependencies to be prefetched + name: prefetch-input + type: string + - default: "" + description: Image tag expiration time, time values could be something like + 1h, 2d, 3w for hours, days, and weeks, respectively. + name: image-expires-after + type: string + - default: "false" + description: Build a source image. + name: build-source-image + type: string + - default: "false" + description: Add built image into an OCI image index + name: build-image-index + type: string + - default: docker + description: The format for the resulting image's mediaType. Valid values are + oci or docker. + name: buildah-format + type: string + - default: [] + description: Array of --build-arg values ("arg=value" strings) for buildah + name: build-args + type: array + - default: "" + description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file + name: build-args-file + type: string + - default: "false" + description: Whether to enable privileged mode, should be used only with remote + VMs + name: privileged-nested + type: string + results: + - description: "" + name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - description: "" + name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - description: "" + name: CHAINS-GIT_URL + value: $(tasks.clone-repository.results.url) + - description: "" + name: CHAINS-GIT_COMMIT + value: $(tasks.clone-repository.results.commit) + tasks: + - name: init + params: + - name: image-url + value: $(params.output-image) + - name: rebuild + value: $(params.rebuild) + - name: skip-checks + value: $(params.skip-checks) + taskRef: + params: + - name: name + value: init + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 + - name: kind + value: task + resolver: bundles + - name: clone-repository + params: + - name: url + value: $(params.git-url) + - name: revision + value: $(params.revision) + - name: ociStorage + value: $(params.output-image).git + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - init + taskRef: + params: + - name: name + value: git-clone-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3dc39eae48745a96097c07c577b944d6203a91c35d3f71d9ed5feab41d327a6a + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + workspaces: + - name: basic-auth + workspace: git-auth + - name: prefetch-dependencies + params: + - name: input + value: $(params.prefetch-input) + - name: SOURCE_ARTIFACT + value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) + - name: ociStorage + value: $(params.output-image).prefetch + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - clone-repository + taskRef: + params: + - name: name + value: prefetch-dependencies-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:5946ca57aa29f162e11b74984ec58960f55f9fb6a0e97c6c9215c4161f768726 + - name: kind + value: task + resolver: bundles + workspaces: + - name: git-basic-auth + workspace: git-auth + - name: netrc + workspace: netrc + - name: build-container + params: + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: PRIVILEGED_NESTED + value: $(params.privileged-nested) + - name: SOURCE_URL + value: $(tasks.clone-repository.results.url) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - prefetch-dependencies + taskRef: + params: + - name: name + value: buildah-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:27b04ea788cf64fd38c7d151feb5e1ca408804fa5a70cf704ae746a086ee92b8 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-image-index + params: + - name: IMAGE + value: $(params.output-image) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: ALWAYS_BUILD_INDEX + value: $(params.build-image-index) + - name: IMAGES + value: + - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + runAfter: + - build-container + taskRef: + params: + - name: name + value: build-image-index + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:31197f4ee71be47c6f491e888ff266cbbb8ad5ed1c7c4141cc14f002d1802a50 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-source-image + params: + - name: BINARY_IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: BINARY_IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: source-build-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:282cb5a9119a87e88559444feff67d76d6f356d03654b4845632c049b2314735 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - input: $(params.build-source-image) + operator: in + values: + - "true" + - name: deprecated-base-image-check + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: deprecated-image-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clair-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clair-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: ecosystem-cert-preflight-checks + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: ecosystem-cert-preflight-checks + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-snyk-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-snyk-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clamav-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clamav-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-coverity-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - coverity-availability-check + taskRef: + params: + - name: name + value: sast-coverity-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - input: $(tasks.coverity-availability-check.results.STATUS) + operator: in + values: + - success + - name: coverity-availability-check + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: coverity-availability-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-shell-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-shell-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-unicode-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-unicode-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: apply-tags + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: apply-tags + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:4c2b0a2d2904108f8d19edfa878df6cd49ed19aab73ab6fc6a435fba0265f771 + - name: kind + value: task + resolver: bundles + - name: push-dockerfile + params: + - name: IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: push-dockerfile-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:13633d5ba8445c0f732a0a5d1b33ffbb708398e45ef1647542b0ab22fee25a6a + - name: kind + value: task + resolver: bundles + - name: rpms-signature-scan + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: rpms-signature-scan + - name: bundle + value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + workspaces: + - name: git-auth + optional: true + - name: netrc + optional: true + taskRunTemplate: + serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc + workspaces: + - name: git-auth + secret: + secretName: '{{ git_auth_secret }}' +status: {} From 84ccfd7fbd651c2cde3c30d0f5f8b43aa849dc57 Mon Sep 17 00:00:00 2001 From: konflux-internal-p02 Date: Wed, 12 Nov 2025 14:46:39 +0000 Subject: [PATCH 33/43] Konflux Internal p02 update odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc Signed-off-by: konflux-internal-p02 --- ...imal-cpu-py312-rhel9-poc-pull-request.yaml | 605 ++++++++++++++++++ ...udio-minimal-cpu-py312-rhel9-poc-push.yaml | 602 +++++++++++++++++ 2 files changed, 1207 insertions(+) create mode 100644 .tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-pull-request.yaml create mode 100644 .tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-pull-request.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-pull-request.yaml new file mode 100644 index 0000000000..fcc1dcc617 --- /dev/null +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-pull-request.yaml @@ -0,0 +1,605 @@ +apiVersion: tekton.dev/v1 +kind: PipelineRun +metadata: + annotations: + build.appstudio.openshift.io/repo: https://github.com/red-hat-data-services/notebooks?rev={{revision}} + build.appstudio.redhat.com/commit_sha: '{{revision}}' + build.appstudio.redhat.com/pull_request_number: '{{pull_request_number}}' + build.appstudio.redhat.com/target_branch: '{{target_branch}}' + pipelinesascode.tekton.dev/cancel-in-progress: "true" + pipelinesascode.tekton.dev/max-keep-runs: "3" + pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch + == "R-studio-konflux-poc" + creationTimestamp: null + labels: + appstudio.openshift.io/application: rstudio-poc + appstudio.openshift.io/component: odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc + pipelines.appstudio.openshift.io/type: build + name: odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-on-pull-request + namespace: rhoai-tenant +spec: + params: + - name: git-url + value: '{{source_url}}' + - name: revision + value: '{{revision}}' + - name: output-image + value: quay.io/redhat-user-workloads/rhoai-tenant/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc:on-pr-{{revision}} + - name: image-expires-after + value: 5d + - name: dockerfile + value: rstudio/rhel9-python-3.12/Dockerfile.cpu + - name: path-context + value: . + pipelineSpec: + description: | + This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. + + _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. + This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ + params: + - description: Source Repository URL + name: git-url + type: string + - default: "" + description: Revision of the Source Repository + name: revision + type: string + - description: Fully Qualified Output Image + name: output-image + type: string + - default: . + description: Path to the source code of an application's component from where + to build image. + name: path-context + type: string + - default: Dockerfile + description: Path to the Dockerfile inside the context specified by parameter + path-context + name: dockerfile + type: string + - default: "false" + description: Force rebuild image + name: rebuild + type: string + - default: "false" + description: Skip checks against built image + name: skip-checks + type: string + - default: "false" + description: Execute the build with network isolation + name: hermetic + type: string + - default: "" + description: Build dependencies to be prefetched + name: prefetch-input + type: string + - default: "" + description: Image tag expiration time, time values could be something like + 1h, 2d, 3w for hours, days, and weeks, respectively. + name: image-expires-after + type: string + - default: "false" + description: Build a source image. + name: build-source-image + type: string + - default: "false" + description: Add built image into an OCI image index + name: build-image-index + type: string + - default: docker + description: The format for the resulting image's mediaType. Valid values are + oci or docker. + name: buildah-format + type: string + - default: [] + description: Array of --build-arg values ("arg=value" strings) for buildah + name: build-args + type: array + - default: "" + description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file + name: build-args-file + type: string + - default: "false" + description: Whether to enable privileged mode, should be used only with remote + VMs + name: privileged-nested + type: string + results: + - description: "" + name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - description: "" + name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - description: "" + name: CHAINS-GIT_URL + value: $(tasks.clone-repository.results.url) + - description: "" + name: CHAINS-GIT_COMMIT + value: $(tasks.clone-repository.results.commit) + tasks: + - name: init + params: + - name: image-url + value: $(params.output-image) + - name: rebuild + value: $(params.rebuild) + - name: skip-checks + value: $(params.skip-checks) + taskRef: + params: + - name: name + value: init + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 + - name: kind + value: task + resolver: bundles + - name: clone-repository + params: + - name: url + value: $(params.git-url) + - name: revision + value: $(params.revision) + - name: ociStorage + value: $(params.output-image).git + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - init + taskRef: + params: + - name: name + value: git-clone-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3dc39eae48745a96097c07c577b944d6203a91c35d3f71d9ed5feab41d327a6a + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + workspaces: + - name: basic-auth + workspace: git-auth + - name: prefetch-dependencies + params: + - name: input + value: $(params.prefetch-input) + - name: SOURCE_ARTIFACT + value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) + - name: ociStorage + value: $(params.output-image).prefetch + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - clone-repository + taskRef: + params: + - name: name + value: prefetch-dependencies-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:5946ca57aa29f162e11b74984ec58960f55f9fb6a0e97c6c9215c4161f768726 + - name: kind + value: task + resolver: bundles + workspaces: + - name: git-basic-auth + workspace: git-auth + - name: netrc + workspace: netrc + - name: build-container + params: + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: PRIVILEGED_NESTED + value: $(params.privileged-nested) + - name: SOURCE_URL + value: $(tasks.clone-repository.results.url) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - prefetch-dependencies + taskRef: + params: + - name: name + value: buildah-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:27b04ea788cf64fd38c7d151feb5e1ca408804fa5a70cf704ae746a086ee92b8 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-image-index + params: + - name: IMAGE + value: $(params.output-image) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: ALWAYS_BUILD_INDEX + value: $(params.build-image-index) + - name: IMAGES + value: + - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + runAfter: + - build-container + taskRef: + params: + - name: name + value: build-image-index + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:31197f4ee71be47c6f491e888ff266cbbb8ad5ed1c7c4141cc14f002d1802a50 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-source-image + params: + - name: BINARY_IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: BINARY_IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: source-build-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:282cb5a9119a87e88559444feff67d76d6f356d03654b4845632c049b2314735 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - input: $(params.build-source-image) + operator: in + values: + - "true" + - name: deprecated-base-image-check + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: deprecated-image-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clair-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clair-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: ecosystem-cert-preflight-checks + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: ecosystem-cert-preflight-checks + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-snyk-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-snyk-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clamav-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clamav-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-coverity-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - coverity-availability-check + taskRef: + params: + - name: name + value: sast-coverity-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - input: $(tasks.coverity-availability-check.results.STATUS) + operator: in + values: + - success + - name: coverity-availability-check + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: coverity-availability-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-shell-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-shell-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-unicode-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-unicode-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: apply-tags + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: apply-tags + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:4c2b0a2d2904108f8d19edfa878df6cd49ed19aab73ab6fc6a435fba0265f771 + - name: kind + value: task + resolver: bundles + - name: push-dockerfile + params: + - name: IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: push-dockerfile-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:13633d5ba8445c0f732a0a5d1b33ffbb708398e45ef1647542b0ab22fee25a6a + - name: kind + value: task + resolver: bundles + - name: rpms-signature-scan + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: rpms-signature-scan + - name: bundle + value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + workspaces: + - name: git-auth + optional: true + - name: netrc + optional: true + taskRunTemplate: + serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc + workspaces: + - name: git-auth + secret: + secretName: '{{ git_auth_secret }}' +status: {} diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml new file mode 100644 index 0000000000..4078dee898 --- /dev/null +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml @@ -0,0 +1,602 @@ +apiVersion: tekton.dev/v1 +kind: PipelineRun +metadata: + annotations: + build.appstudio.openshift.io/repo: https://github.com/red-hat-data-services/notebooks?rev={{revision}} + build.appstudio.redhat.com/commit_sha: '{{revision}}' + build.appstudio.redhat.com/target_branch: '{{target_branch}}' + pipelinesascode.tekton.dev/cancel-in-progress: "false" + pipelinesascode.tekton.dev/max-keep-runs: "3" + pipelinesascode.tekton.dev/on-cel-expression: event == "push" && target_branch + == "R-studio-konflux-poc" + creationTimestamp: null + labels: + appstudio.openshift.io/application: rstudio-poc + appstudio.openshift.io/component: odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc + pipelines.appstudio.openshift.io/type: build + name: odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-on-push + namespace: rhoai-tenant +spec: + params: + - name: git-url + value: '{{source_url}}' + - name: revision + value: '{{revision}}' + - name: output-image + value: quay.io/redhat-user-workloads/rhoai-tenant/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc:{{revision}} + - name: dockerfile + value: rstudio/rhel9-python-3.12/Dockerfile.cpu + - name: path-context + value: . + pipelineSpec: + description: | + This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. + + _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. + This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ + params: + - description: Source Repository URL + name: git-url + type: string + - default: "" + description: Revision of the Source Repository + name: revision + type: string + - description: Fully Qualified Output Image + name: output-image + type: string + - default: . + description: Path to the source code of an application's component from where + to build image. + name: path-context + type: string + - default: Dockerfile + description: Path to the Dockerfile inside the context specified by parameter + path-context + name: dockerfile + type: string + - default: "false" + description: Force rebuild image + name: rebuild + type: string + - default: "false" + description: Skip checks against built image + name: skip-checks + type: string + - default: "false" + description: Execute the build with network isolation + name: hermetic + type: string + - default: "" + description: Build dependencies to be prefetched + name: prefetch-input + type: string + - default: "" + description: Image tag expiration time, time values could be something like + 1h, 2d, 3w for hours, days, and weeks, respectively. + name: image-expires-after + type: string + - default: "false" + description: Build a source image. + name: build-source-image + type: string + - default: "false" + description: Add built image into an OCI image index + name: build-image-index + type: string + - default: docker + description: The format for the resulting image's mediaType. Valid values are + oci or docker. + name: buildah-format + type: string + - default: [] + description: Array of --build-arg values ("arg=value" strings) for buildah + name: build-args + type: array + - default: "" + description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file + name: build-args-file + type: string + - default: "false" + description: Whether to enable privileged mode, should be used only with remote + VMs + name: privileged-nested + type: string + results: + - description: "" + name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - description: "" + name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - description: "" + name: CHAINS-GIT_URL + value: $(tasks.clone-repository.results.url) + - description: "" + name: CHAINS-GIT_COMMIT + value: $(tasks.clone-repository.results.commit) + tasks: + - name: init + params: + - name: image-url + value: $(params.output-image) + - name: rebuild + value: $(params.rebuild) + - name: skip-checks + value: $(params.skip-checks) + taskRef: + params: + - name: name + value: init + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 + - name: kind + value: task + resolver: bundles + - name: clone-repository + params: + - name: url + value: $(params.git-url) + - name: revision + value: $(params.revision) + - name: ociStorage + value: $(params.output-image).git + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - init + taskRef: + params: + - name: name + value: git-clone-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3dc39eae48745a96097c07c577b944d6203a91c35d3f71d9ed5feab41d327a6a + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + workspaces: + - name: basic-auth + workspace: git-auth + - name: prefetch-dependencies + params: + - name: input + value: $(params.prefetch-input) + - name: SOURCE_ARTIFACT + value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) + - name: ociStorage + value: $(params.output-image).prefetch + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - clone-repository + taskRef: + params: + - name: name + value: prefetch-dependencies-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:5946ca57aa29f162e11b74984ec58960f55f9fb6a0e97c6c9215c4161f768726 + - name: kind + value: task + resolver: bundles + workspaces: + - name: git-basic-auth + workspace: git-auth + - name: netrc + workspace: netrc + - name: build-container + params: + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: PRIVILEGED_NESTED + value: $(params.privileged-nested) + - name: SOURCE_URL + value: $(tasks.clone-repository.results.url) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - prefetch-dependencies + taskRef: + params: + - name: name + value: buildah-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:27b04ea788cf64fd38c7d151feb5e1ca408804fa5a70cf704ae746a086ee92b8 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-image-index + params: + - name: IMAGE + value: $(params.output-image) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: ALWAYS_BUILD_INDEX + value: $(params.build-image-index) + - name: IMAGES + value: + - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + runAfter: + - build-container + taskRef: + params: + - name: name + value: build-image-index + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:31197f4ee71be47c6f491e888ff266cbbb8ad5ed1c7c4141cc14f002d1802a50 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-source-image + params: + - name: BINARY_IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: BINARY_IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: source-build-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:282cb5a9119a87e88559444feff67d76d6f356d03654b4845632c049b2314735 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - input: $(params.build-source-image) + operator: in + values: + - "true" + - name: deprecated-base-image-check + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: deprecated-image-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clair-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clair-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: ecosystem-cert-preflight-checks + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: ecosystem-cert-preflight-checks + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-snyk-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-snyk-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clamav-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clamav-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-coverity-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - coverity-availability-check + taskRef: + params: + - name: name + value: sast-coverity-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - input: $(tasks.coverity-availability-check.results.STATUS) + operator: in + values: + - success + - name: coverity-availability-check + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: coverity-availability-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-shell-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-shell-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-unicode-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-unicode-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: apply-tags + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: apply-tags + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:4c2b0a2d2904108f8d19edfa878df6cd49ed19aab73ab6fc6a435fba0265f771 + - name: kind + value: task + resolver: bundles + - name: push-dockerfile + params: + - name: IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: push-dockerfile-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:13633d5ba8445c0f732a0a5d1b33ffbb708398e45ef1647542b0ab22fee25a6a + - name: kind + value: task + resolver: bundles + - name: rpms-signature-scan + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: rpms-signature-scan + - name: bundle + value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + workspaces: + - name: git-auth + optional: true + - name: netrc + optional: true + taskRunTemplate: + serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc + workspaces: + - name: git-auth + secret: + secretName: '{{ git_auth_secret }}' +status: {} From 1f350a0ddc312d3c70946c43b28bf22bc94a4389 Mon Sep 17 00:00:00 2001 From: Alex Fan <91211463+alexxfan@users.noreply.github.com> Date: Wed, 12 Nov 2025 14:53:05 +0000 Subject: [PATCH 34/43] Delete .tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-pull-request.yaml --- ...mal-cuda-py312-rhel9-poc-pull-request.yaml | 605 ------------------ 1 file changed, 605 deletions(-) delete mode 100644 .tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-pull-request.yaml diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-pull-request.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-pull-request.yaml deleted file mode 100644 index 712f453a05..0000000000 --- a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-pull-request.yaml +++ /dev/null @@ -1,605 +0,0 @@ -apiVersion: tekton.dev/v1 -kind: PipelineRun -metadata: - annotations: - build.appstudio.openshift.io/repo: https://github.com/red-hat-data-services/notebooks?rev={{revision}} - build.appstudio.redhat.com/commit_sha: '{{revision}}' - build.appstudio.redhat.com/pull_request_number: '{{pull_request_number}}' - build.appstudio.redhat.com/target_branch: '{{target_branch}}' - pipelinesascode.tekton.dev/cancel-in-progress: "true" - pipelinesascode.tekton.dev/max-keep-runs: "3" - pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch - == "R-studio-konflux-poc" - creationTimestamp: null - labels: - appstudio.openshift.io/application: rstudio-poc - appstudio.openshift.io/component: odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc - pipelines.appstudio.openshift.io/type: build - name: odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-on-pull-request - namespace: rhoai-tenant -spec: - params: - - name: git-url - value: '{{source_url}}' - - name: revision - value: '{{revision}}' - - name: output-image - value: quay.io/redhat-user-workloads/rhoai-tenant/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc:on-pr-{{revision}} - - name: image-expires-after - value: 5d - - name: dockerfile - value: rstudio/rhel9-python-3.12/Dockerfile.cuda - - name: path-context - value: . - pipelineSpec: - description: | - This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. - - _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. - This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ - params: - - description: Source Repository URL - name: git-url - type: string - - default: "" - description: Revision of the Source Repository - name: revision - type: string - - description: Fully Qualified Output Image - name: output-image - type: string - - default: . - description: Path to the source code of an application's component from where - to build image. - name: path-context - type: string - - default: Dockerfile - description: Path to the Dockerfile inside the context specified by parameter - path-context - name: dockerfile - type: string - - default: "false" - description: Force rebuild image - name: rebuild - type: string - - default: "false" - description: Skip checks against built image - name: skip-checks - type: string - - default: "false" - description: Execute the build with network isolation - name: hermetic - type: string - - default: "" - description: Build dependencies to be prefetched - name: prefetch-input - type: string - - default: "" - description: Image tag expiration time, time values could be something like - 1h, 2d, 3w for hours, days, and weeks, respectively. - name: image-expires-after - type: string - - default: "false" - description: Build a source image. - name: build-source-image - type: string - - default: "false" - description: Add built image into an OCI image index - name: build-image-index - type: string - - default: docker - description: The format for the resulting image's mediaType. Valid values are - oci or docker. - name: buildah-format - type: string - - default: [] - description: Array of --build-arg values ("arg=value" strings) for buildah - name: build-args - type: array - - default: "" - description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file - name: build-args-file - type: string - - default: "false" - description: Whether to enable privileged mode, should be used only with remote - VMs - name: privileged-nested - type: string - results: - - description: "" - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - description: "" - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - description: "" - name: CHAINS-GIT_URL - value: $(tasks.clone-repository.results.url) - - description: "" - name: CHAINS-GIT_COMMIT - value: $(tasks.clone-repository.results.commit) - tasks: - - name: init - params: - - name: image-url - value: $(params.output-image) - - name: rebuild - value: $(params.rebuild) - - name: skip-checks - value: $(params.skip-checks) - taskRef: - params: - - name: name - value: init - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 - - name: kind - value: task - resolver: bundles - - name: clone-repository - params: - - name: url - value: $(params.git-url) - - name: revision - value: $(params.revision) - - name: ociStorage - value: $(params.output-image).git - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - init - taskRef: - params: - - name: name - value: git-clone-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3dc39eae48745a96097c07c577b944d6203a91c35d3f71d9ed5feab41d327a6a - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - workspaces: - - name: basic-auth - workspace: git-auth - - name: prefetch-dependencies - params: - - name: input - value: $(params.prefetch-input) - - name: SOURCE_ARTIFACT - value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) - - name: ociStorage - value: $(params.output-image).prefetch - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - clone-repository - taskRef: - params: - - name: name - value: prefetch-dependencies-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:5946ca57aa29f162e11b74984ec58960f55f9fb6a0e97c6c9215c4161f768726 - - name: kind - value: task - resolver: bundles - workspaces: - - name: git-basic-auth - workspace: git-auth - - name: netrc - workspace: netrc - - name: build-container - params: - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: PRIVILEGED_NESTED - value: $(params.privileged-nested) - - name: SOURCE_URL - value: $(tasks.clone-repository.results.url) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - prefetch-dependencies - taskRef: - params: - - name: name - value: buildah-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:27b04ea788cf64fd38c7d151feb5e1ca408804fa5a70cf704ae746a086ee92b8 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-image-index - params: - - name: IMAGE - value: $(params.output-image) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: ALWAYS_BUILD_INDEX - value: $(params.build-image-index) - - name: IMAGES - value: - - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - runAfter: - - build-container - taskRef: - params: - - name: name - value: build-image-index - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:31197f4ee71be47c6f491e888ff266cbbb8ad5ed1c7c4141cc14f002d1802a50 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-source-image - params: - - name: BINARY_IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: BINARY_IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: source-build-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:282cb5a9119a87e88559444feff67d76d6f356d03654b4845632c049b2314735 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - input: $(params.build-source-image) - operator: in - values: - - "true" - - name: deprecated-base-image-check - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: deprecated-image-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clair-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clair-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: ecosystem-cert-preflight-checks - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: ecosystem-cert-preflight-checks - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-snyk-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-snyk-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clamav-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clamav-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-coverity-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - coverity-availability-check - taskRef: - params: - - name: name - value: sast-coverity-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - input: $(tasks.coverity-availability-check.results.STATUS) - operator: in - values: - - success - - name: coverity-availability-check - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: coverity-availability-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-shell-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-shell-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-unicode-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-unicode-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: apply-tags - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: apply-tags - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:4c2b0a2d2904108f8d19edfa878df6cd49ed19aab73ab6fc6a435fba0265f771 - - name: kind - value: task - resolver: bundles - - name: push-dockerfile - params: - - name: IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: push-dockerfile-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:13633d5ba8445c0f732a0a5d1b33ffbb708398e45ef1647542b0ab22fee25a6a - - name: kind - value: task - resolver: bundles - - name: rpms-signature-scan - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: rpms-signature-scan - - name: bundle - value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - workspaces: - - name: git-auth - optional: true - - name: netrc - optional: true - taskRunTemplate: - serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc - workspaces: - - name: git-auth - secret: - secretName: '{{ git_auth_secret }}' -status: {} From 89724a36704260baefaec1da97a245c29552bc9c Mon Sep 17 00:00:00 2001 From: Alex Fan <91211463+alexxfan@users.noreply.github.com> Date: Wed, 12 Nov 2025 14:53:26 +0000 Subject: [PATCH 35/43] Delete .tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-pull-request.yaml --- ...imal-cpu-py312-rhel9-poc-pull-request.yaml | 605 ------------------ 1 file changed, 605 deletions(-) delete mode 100644 .tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-pull-request.yaml diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-pull-request.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-pull-request.yaml deleted file mode 100644 index fcc1dcc617..0000000000 --- a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-pull-request.yaml +++ /dev/null @@ -1,605 +0,0 @@ -apiVersion: tekton.dev/v1 -kind: PipelineRun -metadata: - annotations: - build.appstudio.openshift.io/repo: https://github.com/red-hat-data-services/notebooks?rev={{revision}} - build.appstudio.redhat.com/commit_sha: '{{revision}}' - build.appstudio.redhat.com/pull_request_number: '{{pull_request_number}}' - build.appstudio.redhat.com/target_branch: '{{target_branch}}' - pipelinesascode.tekton.dev/cancel-in-progress: "true" - pipelinesascode.tekton.dev/max-keep-runs: "3" - pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch - == "R-studio-konflux-poc" - creationTimestamp: null - labels: - appstudio.openshift.io/application: rstudio-poc - appstudio.openshift.io/component: odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc - pipelines.appstudio.openshift.io/type: build - name: odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-on-pull-request - namespace: rhoai-tenant -spec: - params: - - name: git-url - value: '{{source_url}}' - - name: revision - value: '{{revision}}' - - name: output-image - value: quay.io/redhat-user-workloads/rhoai-tenant/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc:on-pr-{{revision}} - - name: image-expires-after - value: 5d - - name: dockerfile - value: rstudio/rhel9-python-3.12/Dockerfile.cpu - - name: path-context - value: . - pipelineSpec: - description: | - This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. - - _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. - This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ - params: - - description: Source Repository URL - name: git-url - type: string - - default: "" - description: Revision of the Source Repository - name: revision - type: string - - description: Fully Qualified Output Image - name: output-image - type: string - - default: . - description: Path to the source code of an application's component from where - to build image. - name: path-context - type: string - - default: Dockerfile - description: Path to the Dockerfile inside the context specified by parameter - path-context - name: dockerfile - type: string - - default: "false" - description: Force rebuild image - name: rebuild - type: string - - default: "false" - description: Skip checks against built image - name: skip-checks - type: string - - default: "false" - description: Execute the build with network isolation - name: hermetic - type: string - - default: "" - description: Build dependencies to be prefetched - name: prefetch-input - type: string - - default: "" - description: Image tag expiration time, time values could be something like - 1h, 2d, 3w for hours, days, and weeks, respectively. - name: image-expires-after - type: string - - default: "false" - description: Build a source image. - name: build-source-image - type: string - - default: "false" - description: Add built image into an OCI image index - name: build-image-index - type: string - - default: docker - description: The format for the resulting image's mediaType. Valid values are - oci or docker. - name: buildah-format - type: string - - default: [] - description: Array of --build-arg values ("arg=value" strings) for buildah - name: build-args - type: array - - default: "" - description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file - name: build-args-file - type: string - - default: "false" - description: Whether to enable privileged mode, should be used only with remote - VMs - name: privileged-nested - type: string - results: - - description: "" - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - description: "" - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - description: "" - name: CHAINS-GIT_URL - value: $(tasks.clone-repository.results.url) - - description: "" - name: CHAINS-GIT_COMMIT - value: $(tasks.clone-repository.results.commit) - tasks: - - name: init - params: - - name: image-url - value: $(params.output-image) - - name: rebuild - value: $(params.rebuild) - - name: skip-checks - value: $(params.skip-checks) - taskRef: - params: - - name: name - value: init - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 - - name: kind - value: task - resolver: bundles - - name: clone-repository - params: - - name: url - value: $(params.git-url) - - name: revision - value: $(params.revision) - - name: ociStorage - value: $(params.output-image).git - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - init - taskRef: - params: - - name: name - value: git-clone-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3dc39eae48745a96097c07c577b944d6203a91c35d3f71d9ed5feab41d327a6a - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - workspaces: - - name: basic-auth - workspace: git-auth - - name: prefetch-dependencies - params: - - name: input - value: $(params.prefetch-input) - - name: SOURCE_ARTIFACT - value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) - - name: ociStorage - value: $(params.output-image).prefetch - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - clone-repository - taskRef: - params: - - name: name - value: prefetch-dependencies-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:5946ca57aa29f162e11b74984ec58960f55f9fb6a0e97c6c9215c4161f768726 - - name: kind - value: task - resolver: bundles - workspaces: - - name: git-basic-auth - workspace: git-auth - - name: netrc - workspace: netrc - - name: build-container - params: - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: PRIVILEGED_NESTED - value: $(params.privileged-nested) - - name: SOURCE_URL - value: $(tasks.clone-repository.results.url) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - prefetch-dependencies - taskRef: - params: - - name: name - value: buildah-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:27b04ea788cf64fd38c7d151feb5e1ca408804fa5a70cf704ae746a086ee92b8 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-image-index - params: - - name: IMAGE - value: $(params.output-image) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: ALWAYS_BUILD_INDEX - value: $(params.build-image-index) - - name: IMAGES - value: - - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - runAfter: - - build-container - taskRef: - params: - - name: name - value: build-image-index - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:31197f4ee71be47c6f491e888ff266cbbb8ad5ed1c7c4141cc14f002d1802a50 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-source-image - params: - - name: BINARY_IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: BINARY_IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: source-build-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:282cb5a9119a87e88559444feff67d76d6f356d03654b4845632c049b2314735 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - input: $(params.build-source-image) - operator: in - values: - - "true" - - name: deprecated-base-image-check - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: deprecated-image-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clair-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clair-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: ecosystem-cert-preflight-checks - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: ecosystem-cert-preflight-checks - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-snyk-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-snyk-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clamav-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clamav-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-coverity-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - coverity-availability-check - taskRef: - params: - - name: name - value: sast-coverity-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - input: $(tasks.coverity-availability-check.results.STATUS) - operator: in - values: - - success - - name: coverity-availability-check - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: coverity-availability-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-shell-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-shell-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-unicode-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-unicode-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: apply-tags - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: apply-tags - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:4c2b0a2d2904108f8d19edfa878df6cd49ed19aab73ab6fc6a435fba0265f771 - - name: kind - value: task - resolver: bundles - - name: push-dockerfile - params: - - name: IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: push-dockerfile-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:13633d5ba8445c0f732a0a5d1b33ffbb708398e45ef1647542b0ab22fee25a6a - - name: kind - value: task - resolver: bundles - - name: rpms-signature-scan - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: rpms-signature-scan - - name: bundle - value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - workspaces: - - name: git-auth - optional: true - - name: netrc - optional: true - taskRunTemplate: - serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc - workspaces: - - name: git-auth - secret: - secretName: '{{ git_auth_secret }}' -status: {} From d2e75d2052a9c2d608f798c6dcbf0fe4ba896fa4 Mon Sep 17 00:00:00 2001 From: Alex Fan Date: Wed, 12 Nov 2025 15:13:10 +0000 Subject: [PATCH 36/43] use dockerfile.konflux with ubi image with sha --- ...udio-minimal-cpu-py312-rhel9-poc-push.yaml | 2 +- ...dio-minimal-cuda-py312-rhel9-poc-push.yaml | 2 +- .../rhel9-python-3.12/Dockerfile.cpu.konflux | 279 +++++++++++++++++ .../rhel9-python-3.12/Dockerfile.cuda.konflux | 294 ++++++++++++++++++ 4 files changed, 575 insertions(+), 2 deletions(-) create mode 100644 rstudio/rhel9-python-3.12/Dockerfile.cpu.konflux create mode 100644 rstudio/rhel9-python-3.12/Dockerfile.cuda.konflux diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml index 4078dee898..458cd13d45 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml @@ -25,7 +25,7 @@ spec: - name: output-image value: quay.io/redhat-user-workloads/rhoai-tenant/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc:{{revision}} - name: dockerfile - value: rstudio/rhel9-python-3.12/Dockerfile.cpu + value: rstudio/rhel9-python-3.12/Dockerfile.cpu.konflux - name: path-context value: . pipelineSpec: diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml index c6d1eda9fe..33c4033aac 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml @@ -25,7 +25,7 @@ spec: - name: output-image value: quay.io/redhat-user-workloads/rhoai-tenant/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc:{{revision}} - name: dockerfile - value: rstudio/rhel9-python-3.12/Dockerfile.cuda + value: rstudio/rhel9-python-3.12/Dockerfile.cuda.konflux - name: path-context value: . pipelineSpec: diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cpu.konflux b/rstudio/rhel9-python-3.12/Dockerfile.cpu.konflux new file mode 100644 index 0000000000..993c4bb5c8 --- /dev/null +++ b/rstudio/rhel9-python-3.12/Dockerfile.cpu.konflux @@ -0,0 +1,279 @@ +ARG TARGETARCH + +######################### +# configuration args # +######################### +ARG BASE_IMAGE + +# External image alias for UBI repository configuration +FROM registry.access.redhat.com/ubi9/ubi@sha256:bbac76ac0310eefd6298ed3ab3c1710e1c842f1f778800de0f49e660b402bdc5 AS ubi-repos + +#################### +# cpu-base # +#################### +FROM ${BASE_IMAGE} AS cpu-base + +WORKDIR /opt/app-root/bin + +# OS Packages needs to be installed as root +USER root + +# Inject the official UBI 9 repository configuration into the AIPCC base image. +# The Quay-based AIPCC image is "repo-less" by default (https://gitlab.com/redhat/rhel-ai/core/base-images/app#repositories), so dnf cannot upgrade or install packages. +# By copying ubi.repo from the public UBI 9 image, we enable package management for upgrades and installations. +COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo +COPY --from=ubi-repos /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release + +# upgrade first to avoid fixable vulnerabilities begin +# Problem: The operation would result in removing the following protected packages: systemd +# (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) +# Solution: --best --skip-broken does not work either, so use --nobest +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + +# upgrade first to avoid fixable vulnerabilities end + +# Install useful OS packages +# remove skopeo, CVE-2025-4674 +RUN dnf install -y perl mesa-libGL && dnf clean all && rm -rf /var/cache/yum + +# Other apps and tools installed as default user +USER 1001 + +# Install micropipenv and uv to deploy packages from requirements.txt begin +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +# Install micropipenv and uv to deploy packages from requirements.txt end + +WORKDIR /opt/app-root/src + +##################### +# cpu-rstudio # +##################### +FROM cpu-base AS cpu-rstudio + +ARG RSTUDIO_SOURCE_CODE=rstudio/rhel9-python-3.12 +ARG TARGETARCH + +WORKDIR /opt/app-root/bin + +# TODO THIS SHOULD BE REMOVED +# Access the client's secret for the subscription manager from the environment variable +ARG SECRET_DIR=/opt/app-root/src/.sec +ARG SERVERURL_DEFAULT="" +ARG BASEURL_DEFAULT="" +# TILL HERE + +LABEL name="odh-notebook-rstudio-server-rhel9-python-3.12" \ + summary="RStudio Server image with python 3.12 based on Red Hat Enterprise Linux 9" \ + description="RStudio Server image with python 3.12 based on Red Hat Enterprise Linux 9" \ + io.k8s.display-name="RStudio Server image with python 3.12 based on Red Hat Enterprise Linux 9" \ + io.k8s.description="RStudio Server image with python 3.12 based on Red Hat Enterprise Linux 9" \ + authoritative-source-url="https://github.com/opendatahub-io/notebooks" \ + io.openshift.build.commit.ref="main" \ + io.openshift.build.source-location="https://github.com/opendatahub-io/notebooks/tree/main/rstudio/rhel9-python-3.12" \ + io.openshift.build.image="quay.io/opendatahub/workbench-images:rstudio-rhel9-python-3.12" + +USER 0 + +# TODO THIS SHOULD BE REMOVED in favor of: https://issues.redhat.com/browse/RHOAIENG-32541 +# uncomment the below line if you fall on this error: subscription-manager is disabled when running inside a container. Please refer to your host system for subscription management. +#RUN sed -i 's/\(def in_container():\)/\1\n return False/g' /usr/lib64/python*/*-packages/rhsm/config.py + +# If necessary, run the subscription manager command using the provided credentials. Only include --serverurl and --baseurl if they are provided +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ -d "${SECRET_DIR}" ]; then + SERVERURL=$(cat ${SECRET_DIR}/SERVERURL 2>/dev/null || echo ${SERVERURL_DEFAULT}) + BASEURL=$(cat ${SECRET_DIR}/BASEURL 2>/dev/null || echo ${BASEURL_DEFAULT}) + USERNAME=$(cat ${SECRET_DIR}/USERNAME) + PASSWORD=$(cat ${SECRET_DIR}/PASSWORD) + subscription-manager register \ + ${SERVERURL:+--serverurl=$SERVERURL} \ + ${BASEURL:+--baseurl=$BASEURL} \ + --username=$USERNAME \ + --password=$PASSWORD \ + --force \ + --auto-attach +fi +EOF + +# TILL HERE + +ENV R_VERSION=4.5.1 + +# Install R +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y dnf-plugins-core +if command -v subscription-manager &> /dev/null; then + subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms +else + dnf config-manager --set-enabled crb +fi +dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm +INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ +R-littler R-littler-examples openssl-libs compat-openssl11" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +echo 'options(repos = c(CRAN = "https://cran.rstudio.com/"), download.file.method = "libcurl")' >> /usr/lib64/R/etc/Rprofile.site +(umask 002;touch /usr/lib64/R/etc/Renviron.site) +dnf -y clean all --enablerepo='*' +EOF + +# set R library to default (used in install.r from littler) +ENV LIBLOC=/usr/lib64/R/library +ENV R_LIBS_USER=/opt/app-root/bin/Rpackages/4.5 + +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +chmod -R a+w ${LIBLOC} +# create User R Library path +mkdir -p ${R_LIBS_USER} +chmod -R a+w ${R_LIBS_USER} +EOF + +WORKDIR /tmp/ +COPY /rstudio/utils /tmp/utils + +# Install RStudio +ARG RSTUDIO_RPM=rstudio-server-rhel-2025.09.0-387-x86_64.rpm +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +wget --progress=dot:giga https://download2.rstudio.org/server/rhel9/x86_64/${RSTUDIO_RPM} +dnf install -y ${RSTUDIO_RPM} +rm ${RSTUDIO_RPM} +dnf -y clean all --enablerepo='*' +# Specific RStudio config and fixes +chmod 1777 /var/run/rstudio-server +mkdir -p /usr/share/doc/R +# package installation +# install necessary texlive-framed package to make Knit R markup to PDF rendering possible +dnf install -y libgit2-devel.x86_64 libcurl-devel harfbuzz-devel.x86_64 fribidi-devel.x86_64 cmake "flexiblas-*" texlive-framed +dnf clean all +rm -rf /var/cache/yum +(cd /tmp/utils && ./cve_remediation.sh) +EOF + +COPY ${RSTUDIO_SOURCE_CODE}/rsession.conf /etc/rstudio/rsession.conf + +# # Install R packages +# # https://cran.r-project.org/web/packages +# COPY ${RSTUDIO_SOURCE_CODE}/install_packages.R ./ +# RUN /bin/bash <<'EOF' +# set -Eeuxo pipefail +# R -f ./install_packages.R +# rm ./install_packages.R +# EOF + +ENV APP_ROOT=/opt/app-root + +# Install NGINX to proxy RStudio and pass probes check +ENV NGINX_VERSION=1.24 \ + NGINX_SHORT_VER=124 \ + NGINX_CONFIGURATION_PATH=${APP_ROOT}/etc/nginx.d \ + NGINX_CONF_PATH=/etc/nginx/nginx.conf \ + NGINX_DEFAULT_CONF_PATH=${APP_ROOT}/etc/nginx.default.d \ + NGINX_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/nginx \ + NGINX_APP_ROOT=${APP_ROOT} \ + NGINX_LOG_PATH=/var/log/nginx \ + NGINX_PERL_MODULE_PATH=${APP_ROOT}/etc/perl + +# Modules does not exist +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y module enable nginx:$NGINX_VERSION +INSTALL_PKGS="nss_wrapper bind-utils gettext hostname nginx nginx-mod-stream nginx-mod-http-perl httpd" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +rpm -V $INSTALL_PKGS +nginx -v 2>&1 | grep -qe "nginx/$NGINX_VERSION\." && echo "Found VERSION $NGINX_VERSION" +dnf -y clean all --enablerepo='*' +EOF + +# Configure httpd for CGI processing +COPY --chown=1001:0 ${RSTUDIO_SOURCE_CODE}/httpd/httpd.conf /etc/httpd/conf/httpd.conf +COPY --chown=1001:0 ${RSTUDIO_SOURCE_CODE}/httpd/rstudio-cgi.conf /etc/httpd/conf.d/rstudio-cgi.conf + +# Copy extra files to the image. +COPY --chown=1001:0 ${RSTUDIO_SOURCE_CODE}/nginx/root/ / + +# Configure nginx +COPY ${RSTUDIO_SOURCE_CODE}/nginx/serverconf/ /opt/app-root/etc/nginx.default.d/ +COPY ${RSTUDIO_SOURCE_CODE}/nginx/httpconf/ /opt/app-root/etc/nginx.d/ +COPY ${RSTUDIO_SOURCE_CODE}/nginx/api/ /opt/app-root/api/ + +# Changing ownership and user rights to support following use-cases: +# 1) running container on OpenShift, whose default security model +# is to run the container under random UID, but GID=0 +# 2) for working root-less container with UID=1001, which does not have +# to have GID=0 +# 3) for default use-case, that is running container directly on operating system, +# with default UID and GID (1001:0) +# Supported combinations of UID:GID are thus following: +# UID=1001 && GID=0 +# UID=&& GID=0 +# UID=1001 && GID= +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ +mkdir -p ${NGINX_APP_ROOT}/api/ +mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +mkdir -p ${NGINX_LOG_PATH} +mkdir -p ${NGINX_PERL_MODULE_PATH} +# Create httpd directories and set permissions +mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs +chown -R 1001:0 ${NGINX_CONF_PATH} +chown -R 1001:0 ${NGINX_APP_ROOT}/etc +chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chown -R 1001:0 /var/lib/nginx /var/log/nginx /run +chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs +chmod ug+rw ${NGINX_CONF_PATH} +chmod -R ug+rwX ${NGINX_APP_ROOT}/etc +chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run +chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs +# Make CGI scripts executable and set proper ownership +chmod +x /opt/app-root/api/kernels/access.cgi +chmod +x /opt/app-root/api/probe.cgi +chown -R 1001:0 /opt/app-root/api +rpm-file-permissions +EOF + +# Launcher +WORKDIR /opt/app-root/bin + +COPY ${RSTUDIO_SOURCE_CODE}/utils utils/ +COPY ${RSTUDIO_SOURCE_CODE}/run-rstudio.sh ${RSTUDIO_SOURCE_CODE}/setup_rstudio.py ${RSTUDIO_SOURCE_CODE}/rsession.sh ${RSTUDIO_SOURCE_CODE}/run-nginx.sh ./ + +# TODO THIS SHOULD BE REMOVED in favor of: https://issues.redhat.com/browse/RHOAIENG-32541 +# Unregister the system +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ -d "${SECRET_DIR}" ]; then + subscription-manager remove --all && subscription-manager unregister && subscription-manager clean +fi +EOF + +# TILL HERE + +USER 1001 + +COPY ${RSTUDIO_SOURCE_CODE}/pylock.toml ./ + +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF + +WORKDIR /opt/app-root/src + +CMD ["/opt/app-root/bin/run-rstudio.sh"] diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cuda.konflux b/rstudio/rhel9-python-3.12/Dockerfile.cuda.konflux new file mode 100644 index 0000000000..bca4dc4995 --- /dev/null +++ b/rstudio/rhel9-python-3.12/Dockerfile.cuda.konflux @@ -0,0 +1,294 @@ +ARG TARGETARCH + +######################### +# configuration args # +######################### +ARG BASE_IMAGE + +# External image alias for UBI repository configuration +FROM registry.access.redhat.com/ubi9/ubi@sha256:bbac76ac0310eefd6298ed3ab3c1710e1c842f1f778800de0f49e660b402bdc5 AS ubi-repos + +#################### +# cuda-base # +#################### +FROM ${BASE_IMAGE} AS cuda-base + +WORKDIR /opt/app-root/bin + +# OS Packages needs to be installed as root +USER root + +# Inject the official UBI 9 repository configuration into the AIPCC base image. +# The Quay-based AIPCC image is "repo-less" by default (https://gitlab.com/redhat/rhel-ai/core/base-images/app#repositories), so dnf cannot upgrade or install packages. +# By copying ubi.repo from the public UBI 9 image, we enable package management for upgrades and installations. +COPY --from=ubi-repos /etc/yum.repos.d/ubi.repo /etc/yum.repos.d/ubi.repo +COPY --from=ubi-repos /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release + +# upgrade first to avoid fixable vulnerabilities begin +# Problem: The operation would result in removing the following protected packages: systemd +# (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages) +# Solution: --best --skip-broken does not work either, so use --nobest +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0 +dnf clean all -y +EOF + +# upgrade first to avoid fixable vulnerabilities end + +# Install useful OS packages +# remove skopeo, CVE-2025-4674 +RUN dnf install -y perl mesa-libGL && dnf clean all && rm -rf /var/cache/yum + +# Other apps and tools installed as default user +USER 1001 + +# Install micropipenv and uv to deploy packages from requirements.txt begin +RUN pip install --no-cache-dir --extra-index-url https://pypi.org/simple -U "micropipenv[toml]==1.9.0" "uv==0.8.12" +# Install micropipenv and uv to deploy packages from requirements.txt end + +WORKDIR /opt/app-root/src + +################ +# cuda-rstudio # +################ +FROM cuda-base AS cuda-rstudio + +ARG RSTUDIO_SOURCE_CODE=rstudio/rhel9-python-3.12 +ARG TARGETARCH + +WORKDIR /opt/app-root/bin + +# TODO THIS SHOULD BE REMOVED +# Access the client's secret for the subscription manager from the environment variable +ARG SECRET_DIR=/opt/app-root/src/.sec +ARG SERVERURL_DEFAULT="" +ARG BASEURL_DEFAULT="" +# TILL HERE + +LABEL name="odh-notebook-rstudio-server-rhel9-python-3.12" \ + summary="RStudio Server image with python 3.12 based on Red Hat Enterprise Linux 9" \ + description="RStudio Server image with python 3.12 based on Red Hat Enterprise Linux 9" \ + io.k8s.display-name="RStudio Server image with python 3.12 based on Red Hat Enterprise Linux 9" \ + io.k8s.description="RStudio Server image with python 3.12 based on Red Hat Enterprise Linux 9" \ + authoritative-source-url="https://github.com/opendatahub-io/notebooks" \ + io.openshift.build.commit.ref="main" \ + io.openshift.build.source-location="https://github.com/opendatahub-io/notebooks/tree/main/rstudio/rhel9-python-3.12" \ + io.openshift.build.image="quay.io/opendatahub/workbench-images:rstudio-rhel9-python-3.12" + +USER 0 + +# TEST THIS PART OF CODE IF INSTALED WELL +# Set this flag so that libraries can find the location of CUDA +ENV XLA_FLAGS=--xla_gpu_cuda_data_dir=/usr/local/cuda + +# Install CUDA toolkit 12.8 +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y install cuda-toolkit-12-8 +dnf -y clean all --enablerepo="*" +EOF + +WORKDIR /opt/app-root/src +# TILL HERE + +# TODO THIS SHOULD BE REMOVED in favor of: https://issues.redhat.com/browse/RHOAIENG-32541 +# uncomment the below line if you fall on this error: subscription-manager is disabled when running inside a container. Please refer to your host system for subscription management. +#RUN sed -i 's/\(def in_container():\)/\1\n return False/g' /usr/lib64/python*/*-packages/rhsm/config.py + +# If necessary, run the subscription manager command using the provided credentials. Only include --serverurl and --baseurl if they are provided +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ -d "${SECRET_DIR}" ]; then + SERVERURL=$(cat ${SECRET_DIR}/SERVERURL 2>/dev/null || echo ${SERVERURL_DEFAULT}) + BASEURL=$(cat ${SECRET_DIR}/BASEURL 2>/dev/null || echo ${BASEURL_DEFAULT}) + USERNAME=$(cat ${SECRET_DIR}/USERNAME) + PASSWORD=$(cat ${SECRET_DIR}/PASSWORD) + subscription-manager register \ + ${SERVERURL:+--serverurl=$SERVERURL} \ + ${BASEURL:+--baseurl=$BASEURL} \ + --username=$USERNAME \ + --password=$PASSWORD \ + --force \ + --auto-attach +fi +EOF + +# TILL HERE + +ENV R_VERSION=4.5.1 + +# Install R +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf install -y dnf-plugins-core +if command -v subscription-manager &> /dev/null; then + subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms +else + dnf config-manager --set-enabled crb +fi +dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm +INSTALL_PKGS="R-core R-core-devel R-java R-Rcpp R-highlight \ +R-littler R-littler-examples openssl-libs compat-openssl11" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +echo 'options(repos = c(CRAN = "https://cran.rstudio.com/"), download.file.method = "libcurl")' >> /usr/lib64/R/etc/Rprofile.site +(umask 002;touch /usr/lib64/R/etc/Renviron.site) +dnf -y clean all --enablerepo='*' +EOF + +# set R library to default (used in install.r from littler) +ENV LIBLOC=/usr/lib64/R/library +ENV R_LIBS_USER=/opt/app-root/bin/Rpackages/4.5 + +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +chmod -R a+w ${LIBLOC} +# create User R Library path +mkdir -p ${R_LIBS_USER} +chmod -R a+w ${R_LIBS_USER} +EOF + +WORKDIR /tmp/ +COPY /rstudio/utils /tmp/utils + +# Install RStudio +ARG RSTUDIO_RPM=rstudio-server-rhel-2025.09.0-387-x86_64.rpm +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +wget --progress=dot:giga https://download2.rstudio.org/server/rhel9/x86_64/${RSTUDIO_RPM} +dnf install -y ${RSTUDIO_RPM} +rm ${RSTUDIO_RPM} +dnf -y clean all --enablerepo='*' +# Specific RStudio config and fixes +chmod 1777 /var/run/rstudio-server +mkdir -p /usr/share/doc/R +# package installation +# install necessary texlive-framed package to make Knit R markup to PDF rendering possible +dnf install -y libgit2-devel.x86_64 libcurl-devel harfbuzz-devel.x86_64 fribidi-devel.x86_64 cmake "flexiblas-*" texlive-framed +dnf clean all +rm -rf /var/cache/yum +(cd /tmp/utils && ./cve_remediation.sh) +EOF + +COPY ${RSTUDIO_SOURCE_CODE}/rsession.conf /etc/rstudio/rsession.conf + +# # Install R packages +# # https://cran.r-project.org/web/packages +# COPY ${RSTUDIO_SOURCE_CODE}/install_packages.R ./ +# RUN /bin/bash <<'EOF' +# set -Eeuxo pipefail +# R -f ./install_packages.R +# rm ./install_packages.R +# EOF + +ENV APP_ROOT=/opt/app-root + +# Install NGINX to proxy RStudio and pass probes check +ENV NGINX_VERSION=1.24 \ + NGINX_VERSION=1.24 \ + NGINX_SHORT_VER=124 \ + NGINX_CONFIGURATION_PATH=${APP_ROOT}/etc/nginx.d \ + NGINX_CONF_PATH=/etc/nginx/nginx.conf \ + NGINX_DEFAULT_CONF_PATH=${APP_ROOT}/etc/nginx.default.d \ + NGINX_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/nginx \ + NGINX_APP_ROOT=${APP_ROOT} \ + NGINX_LOG_PATH=/var/log/nginx \ + NGINX_PERL_MODULE_PATH=${APP_ROOT}/etc/perl + +# Modules does not exist +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +dnf -y module enable nginx:$NGINX_VERSION +INSTALL_PKGS="nss_wrapper bind-utils gettext hostname nginx nginx-mod-stream nginx-mod-http-perl httpd" +dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS +rpm -V $INSTALL_PKGS +nginx -v 2>&1 | grep -qe "nginx/$NGINX_VERSION\." && echo "Found VERSION $NGINX_VERSION" +dnf -y clean all --enablerepo='*' +EOF + +# Configure httpd for CGI processing +COPY --chown=1001:0 ${RSTUDIO_SOURCE_CODE}/httpd/httpd.conf /etc/httpd/conf/httpd.conf +COPY --chown=1001:0 ${RSTUDIO_SOURCE_CODE}/httpd/rstudio-cgi.conf /etc/httpd/conf.d/rstudio-cgi.conf + +# Copy extra files to the image. +COPY --chown=1001:0 ${RSTUDIO_SOURCE_CODE}/nginx/root/ / + +# Configure nginx +COPY ${RSTUDIO_SOURCE_CODE}/nginx/serverconf/ /opt/app-root/etc/nginx.default.d/ +COPY ${RSTUDIO_SOURCE_CODE}/nginx/httpconf/ /opt/app-root/etc/nginx.d/ +COPY ${RSTUDIO_SOURCE_CODE}/nginx/api/ /opt/app-root/api/ + +# Changing ownership and user rights to support following use-cases: +# 1) running container on OpenShift, whose default security model +# is to run the container under random UID, but GID=0 +# 2) for working root-less container with UID=1001, which does not have +# to have GID=0 +# 3) for default use-case, that is running container directly on operating system, +# with default UID and GID (1001:0) +# Supported combinations of UID:GID are thus following: +# UID=1001 && GID=0 +# UID=&& GID=0 +# UID=1001 && GID= +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +sed -i -f ${NGINX_APP_ROOT}/nginxconf.sed ${NGINX_CONF_PATH} +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.d/ +mkdir -p ${NGINX_APP_ROOT}/etc/nginx.default.d/ +mkdir -p ${NGINX_APP_ROOT}/api/ +mkdir -p ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +mkdir -p ${NGINX_LOG_PATH} +mkdir -p ${NGINX_PERL_MODULE_PATH} +# Create httpd directories and set permissions +mkdir -p /var/log/httpd /var/run/httpd /etc/httpd/logs +chown -R 1001:0 ${NGINX_CONF_PATH} +chown -R 1001:0 ${NGINX_APP_ROOT}/etc +chown -R 1001:0 ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chown -R 1001:0 /var/lib/nginx /var/log/nginx /run +chown -R 1001:0 /var/log/httpd /var/run/httpd /etc/httpd/logs +chmod ug+rw ${NGINX_CONF_PATH} +chmod -R ug+rwX ${NGINX_APP_ROOT}/etc +chmod -R ug+rwX ${NGINX_CONTAINER_SCRIPTS_PATH}/nginx-start +chmod -R ug+rwX /var/lib/nginx /var/log/nginx /run +chmod -R ug+rwX /var/log/httpd /var/run/httpd /etc/httpd/logs +# Make CGI scripts executable and set proper ownership +chmod +x /opt/app-root/api/kernels/access.cgi +chmod +x /opt/app-root/api/probe.cgi +chown -R 1001:0 /opt/app-root/api +rpm-file-permissions +EOF + +# Launcher +WORKDIR /opt/app-root/bin + +COPY ${RSTUDIO_SOURCE_CODE}/utils utils/ +COPY ${RSTUDIO_SOURCE_CODE}/run-rstudio.sh ${RSTUDIO_SOURCE_CODE}/setup_rstudio.py ${RSTUDIO_SOURCE_CODE}/rsession.sh ${RSTUDIO_SOURCE_CODE}/run-nginx.sh ./ + +# TODO THIS SHOULD BE REMOVED in favor of: https://issues.redhat.com/browse/RHOAIENG-32541 +# Unregister the system +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +if [ -d "${SECRET_DIR}" ]; then + subscription-manager remove --all && subscription-manager unregister && subscription-manager clean +fi +EOF + +# TILL HERE + +USER 1001 + +COPY ${RSTUDIO_SOURCE_CODE}/pylock.toml ./ + +RUN /bin/bash <<'EOF' +set -Eeuxo pipefail +echo "Installing softwares and packages" +# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`, +# we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common. +uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml +# Fix permissions to support pip in Openshift environments +chmod -R g+w /opt/app-root/lib/python3.12/site-packages +fix-permissions /opt/app-root -P +EOF + +WORKDIR /opt/app-root/src + +CMD ["/opt/app-root/bin/run-rstudio.sh"] From 878f047912eadd072688740931eb61f3d7af4ba3 Mon Sep 17 00:00:00 2001 From: Alex Fan Date: Thu, 13 Nov 2025 11:34:18 +0000 Subject: [PATCH 37/43] add build arg file --- .../odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml | 2 ++ ...odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml index 458cd13d45..fa0d081d2e 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml @@ -28,6 +28,8 @@ spec: value: rstudio/rhel9-python-3.12/Dockerfile.cpu.konflux - name: path-context value: . + - name: build-args-file + value: rstudio/rhel9-python-3.12/build-args/cpu.conf pipelineSpec: description: | This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml index 33c4033aac..716db6e78e 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml @@ -28,6 +28,8 @@ spec: value: rstudio/rhel9-python-3.12/Dockerfile.cuda.konflux - name: path-context value: . + - name: build-args-file + value: rstudio/rhel9-python-3.12/build-args/cuda.conf pipelineSpec: description: | This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. From 5c59c3c6584cc260de46b908b7d340e7cc5c2c7d Mon Sep 17 00:00:00 2001 From: Alex Fan Date: Thu, 13 Nov 2025 14:16:51 +0000 Subject: [PATCH 38/43] update pipelines to multiarch --- ...udio-minimal-cpu-py312-rhel9-poc-push.yaml | 573 +----------------- ...dio-minimal-cuda-py312-rhel9-poc-push.yaml | 573 +----------------- 2 files changed, 16 insertions(+), 1130 deletions(-) diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml index fa0d081d2e..7a2e5a7f1f 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml @@ -30,571 +30,14 @@ spec: value: . - name: build-args-file value: rstudio/rhel9-python-3.12/build-args/cpu.conf - pipelineSpec: - description: | - This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. - - _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. - This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ - params: - - description: Source Repository URL - name: git-url - type: string - - default: "" - description: Revision of the Source Repository - name: revision - type: string - - description: Fully Qualified Output Image - name: output-image - type: string - - default: . - description: Path to the source code of an application's component from where - to build image. - name: path-context - type: string - - default: Dockerfile - description: Path to the Dockerfile inside the context specified by parameter - path-context - name: dockerfile - type: string - - default: "false" - description: Force rebuild image - name: rebuild - type: string - - default: "false" - description: Skip checks against built image - name: skip-checks - type: string - - default: "false" - description: Execute the build with network isolation - name: hermetic - type: string - - default: "" - description: Build dependencies to be prefetched - name: prefetch-input - type: string - - default: "" - description: Image tag expiration time, time values could be something like - 1h, 2d, 3w for hours, days, and weeks, respectively. - name: image-expires-after - type: string - - default: "false" - description: Build a source image. - name: build-source-image - type: string - - default: "false" - description: Add built image into an OCI image index - name: build-image-index - type: string - - default: docker - description: The format for the resulting image's mediaType. Valid values are - oci or docker. - name: buildah-format - type: string - - default: [] - description: Array of --build-arg values ("arg=value" strings) for buildah - name: build-args - type: array - - default: "" - description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file - name: build-args-file - type: string - - default: "false" - description: Whether to enable privileged mode, should be used only with remote - VMs - name: privileged-nested - type: string - results: - - description: "" - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - description: "" - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - description: "" - name: CHAINS-GIT_URL - value: $(tasks.clone-repository.results.url) - - description: "" - name: CHAINS-GIT_COMMIT - value: $(tasks.clone-repository.results.commit) - tasks: - - name: init - params: - - name: image-url - value: $(params.output-image) - - name: rebuild - value: $(params.rebuild) - - name: skip-checks - value: $(params.skip-checks) - taskRef: - params: - - name: name - value: init - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 - - name: kind - value: task - resolver: bundles - - name: clone-repository - params: - - name: url - value: $(params.git-url) - - name: revision - value: $(params.revision) - - name: ociStorage - value: $(params.output-image).git - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - init - taskRef: - params: - - name: name - value: git-clone-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3dc39eae48745a96097c07c577b944d6203a91c35d3f71d9ed5feab41d327a6a - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - workspaces: - - name: basic-auth - workspace: git-auth - - name: prefetch-dependencies - params: - - name: input - value: $(params.prefetch-input) - - name: SOURCE_ARTIFACT - value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) - - name: ociStorage - value: $(params.output-image).prefetch - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - clone-repository - taskRef: - params: - - name: name - value: prefetch-dependencies-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:5946ca57aa29f162e11b74984ec58960f55f9fb6a0e97c6c9215c4161f768726 - - name: kind - value: task - resolver: bundles - workspaces: - - name: git-basic-auth - workspace: git-auth - - name: netrc - workspace: netrc - - name: build-container - params: - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: PRIVILEGED_NESTED - value: $(params.privileged-nested) - - name: SOURCE_URL - value: $(tasks.clone-repository.results.url) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - prefetch-dependencies - taskRef: - params: - - name: name - value: buildah-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:27b04ea788cf64fd38c7d151feb5e1ca408804fa5a70cf704ae746a086ee92b8 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-image-index - params: - - name: IMAGE - value: $(params.output-image) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: ALWAYS_BUILD_INDEX - value: $(params.build-image-index) - - name: IMAGES - value: - - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - runAfter: - - build-container - taskRef: - params: - - name: name - value: build-image-index - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:31197f4ee71be47c6f491e888ff266cbbb8ad5ed1c7c4141cc14f002d1802a50 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-source-image - params: - - name: BINARY_IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: BINARY_IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: source-build-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:282cb5a9119a87e88559444feff67d76d6f356d03654b4845632c049b2314735 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - input: $(params.build-source-image) - operator: in - values: - - "true" - - name: deprecated-base-image-check - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: deprecated-image-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clair-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clair-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: ecosystem-cert-preflight-checks - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: ecosystem-cert-preflight-checks - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-snyk-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-snyk-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clamav-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clamav-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-coverity-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - coverity-availability-check - taskRef: - params: - - name: name - value: sast-coverity-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - input: $(tasks.coverity-availability-check.results.STATUS) - operator: in - values: - - success - - name: coverity-availability-check - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: coverity-availability-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-shell-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-shell-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-unicode-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-unicode-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: apply-tags - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: apply-tags - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:4c2b0a2d2904108f8d19edfa878df6cd49ed19aab73ab6fc6a435fba0265f771 - - name: kind - value: task - resolver: bundles - - name: push-dockerfile - params: - - name: IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: push-dockerfile-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:13633d5ba8445c0f732a0a5d1b33ffbb708398e45ef1647542b0ab22fee25a6a - - name: kind - value: task - resolver: bundles - - name: rpms-signature-scan - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: rpms-signature-scan - - name: bundle - value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - workspaces: - - name: git-auth - optional: true - - name: netrc - optional: true + - name: build-platforms + value: + - linux/x86_64 + - linux-m2xlarge/arm64 + - name: hermetic + value: false + pipelineRef: + name: multiarch-push-pipeline taskRunTemplate: serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc workspaces: diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml index 716db6e78e..e26ec94f8a 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml @@ -30,571 +30,14 @@ spec: value: . - name: build-args-file value: rstudio/rhel9-python-3.12/build-args/cuda.conf - pipelineSpec: - description: | - This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. - - _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. - This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ - params: - - description: Source Repository URL - name: git-url - type: string - - default: "" - description: Revision of the Source Repository - name: revision - type: string - - description: Fully Qualified Output Image - name: output-image - type: string - - default: . - description: Path to the source code of an application's component from where - to build image. - name: path-context - type: string - - default: Dockerfile - description: Path to the Dockerfile inside the context specified by parameter - path-context - name: dockerfile - type: string - - default: "false" - description: Force rebuild image - name: rebuild - type: string - - default: "false" - description: Skip checks against built image - name: skip-checks - type: string - - default: "false" - description: Execute the build with network isolation - name: hermetic - type: string - - default: "" - description: Build dependencies to be prefetched - name: prefetch-input - type: string - - default: "" - description: Image tag expiration time, time values could be something like - 1h, 2d, 3w for hours, days, and weeks, respectively. - name: image-expires-after - type: string - - default: "false" - description: Build a source image. - name: build-source-image - type: string - - default: "false" - description: Add built image into an OCI image index - name: build-image-index - type: string - - default: docker - description: The format for the resulting image's mediaType. Valid values are - oci or docker. - name: buildah-format - type: string - - default: [] - description: Array of --build-arg values ("arg=value" strings) for buildah - name: build-args - type: array - - default: "" - description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file - name: build-args-file - type: string - - default: "false" - description: Whether to enable privileged mode, should be used only with remote - VMs - name: privileged-nested - type: string - results: - - description: "" - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - description: "" - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - description: "" - name: CHAINS-GIT_URL - value: $(tasks.clone-repository.results.url) - - description: "" - name: CHAINS-GIT_COMMIT - value: $(tasks.clone-repository.results.commit) - tasks: - - name: init - params: - - name: image-url - value: $(params.output-image) - - name: rebuild - value: $(params.rebuild) - - name: skip-checks - value: $(params.skip-checks) - taskRef: - params: - - name: name - value: init - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 - - name: kind - value: task - resolver: bundles - - name: clone-repository - params: - - name: url - value: $(params.git-url) - - name: revision - value: $(params.revision) - - name: ociStorage - value: $(params.output-image).git - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - init - taskRef: - params: - - name: name - value: git-clone-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3dc39eae48745a96097c07c577b944d6203a91c35d3f71d9ed5feab41d327a6a - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - workspaces: - - name: basic-auth - workspace: git-auth - - name: prefetch-dependencies - params: - - name: input - value: $(params.prefetch-input) - - name: SOURCE_ARTIFACT - value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) - - name: ociStorage - value: $(params.output-image).prefetch - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - clone-repository - taskRef: - params: - - name: name - value: prefetch-dependencies-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:5946ca57aa29f162e11b74984ec58960f55f9fb6a0e97c6c9215c4161f768726 - - name: kind - value: task - resolver: bundles - workspaces: - - name: git-basic-auth - workspace: git-auth - - name: netrc - workspace: netrc - - name: build-container - params: - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: PRIVILEGED_NESTED - value: $(params.privileged-nested) - - name: SOURCE_URL - value: $(tasks.clone-repository.results.url) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - prefetch-dependencies - taskRef: - params: - - name: name - value: buildah-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:27b04ea788cf64fd38c7d151feb5e1ca408804fa5a70cf704ae746a086ee92b8 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-image-index - params: - - name: IMAGE - value: $(params.output-image) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: ALWAYS_BUILD_INDEX - value: $(params.build-image-index) - - name: IMAGES - value: - - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) - - name: BUILDAH_FORMAT - value: $(params.buildah-format) - runAfter: - - build-container - taskRef: - params: - - name: name - value: build-image-index - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:31197f4ee71be47c6f491e888ff266cbbb8ad5ed1c7c4141cc14f002d1802a50 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-source-image - params: - - name: BINARY_IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: BINARY_IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: source-build-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:282cb5a9119a87e88559444feff67d76d6f356d03654b4845632c049b2314735 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - input: $(params.build-source-image) - operator: in - values: - - "true" - - name: deprecated-base-image-check - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: deprecated-image-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clair-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clair-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: ecosystem-cert-preflight-checks - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: ecosystem-cert-preflight-checks - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-snyk-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-snyk-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clamav-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clamav-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-coverity-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - coverity-availability-check - taskRef: - params: - - name: name - value: sast-coverity-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - input: $(tasks.coverity-availability-check.results.STATUS) - operator: in - values: - - success - - name: coverity-availability-check - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: coverity-availability-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-shell-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-shell-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-unicode-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-unicode-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: apply-tags - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: apply-tags - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:4c2b0a2d2904108f8d19edfa878df6cd49ed19aab73ab6fc6a435fba0265f771 - - name: kind - value: task - resolver: bundles - - name: push-dockerfile - params: - - name: IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: push-dockerfile-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:13633d5ba8445c0f732a0a5d1b33ffbb708398e45ef1647542b0ab22fee25a6a - - name: kind - value: task - resolver: bundles - - name: rpms-signature-scan - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: rpms-signature-scan - - name: bundle - value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - workspaces: - - name: git-auth - optional: true - - name: netrc - optional: true + - name: build-platforms + value: + - linux/x86_64 + - linux-m2xlarge/arm64 + - name: hermetic + value: false + pipelineRef: + name: multiarch-push-pipeline taskRunTemplate: serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc workspaces: From 461198a0613be3df9781d409aa9bbb53a3f34c89 Mon Sep 17 00:00:00 2001 From: Alex Fan <91211463+alexxfan@users.noreply.github.com> Date: Thu, 13 Nov 2025 14:29:07 +0000 Subject: [PATCH 39/43] Revert "update pipelines to multiarch" --- ...udio-minimal-cpu-py312-rhel9-poc-push.yaml | 573 +++++++++++++++++- ...dio-minimal-cuda-py312-rhel9-poc-push.yaml | 573 +++++++++++++++++- 2 files changed, 1130 insertions(+), 16 deletions(-) diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml index 7a2e5a7f1f..fa0d081d2e 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml @@ -30,14 +30,571 @@ spec: value: . - name: build-args-file value: rstudio/rhel9-python-3.12/build-args/cpu.conf - - name: build-platforms - value: - - linux/x86_64 - - linux-m2xlarge/arm64 - - name: hermetic - value: false - pipelineRef: - name: multiarch-push-pipeline + pipelineSpec: + description: | + This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. + + _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. + This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ + params: + - description: Source Repository URL + name: git-url + type: string + - default: "" + description: Revision of the Source Repository + name: revision + type: string + - description: Fully Qualified Output Image + name: output-image + type: string + - default: . + description: Path to the source code of an application's component from where + to build image. + name: path-context + type: string + - default: Dockerfile + description: Path to the Dockerfile inside the context specified by parameter + path-context + name: dockerfile + type: string + - default: "false" + description: Force rebuild image + name: rebuild + type: string + - default: "false" + description: Skip checks against built image + name: skip-checks + type: string + - default: "false" + description: Execute the build with network isolation + name: hermetic + type: string + - default: "" + description: Build dependencies to be prefetched + name: prefetch-input + type: string + - default: "" + description: Image tag expiration time, time values could be something like + 1h, 2d, 3w for hours, days, and weeks, respectively. + name: image-expires-after + type: string + - default: "false" + description: Build a source image. + name: build-source-image + type: string + - default: "false" + description: Add built image into an OCI image index + name: build-image-index + type: string + - default: docker + description: The format for the resulting image's mediaType. Valid values are + oci or docker. + name: buildah-format + type: string + - default: [] + description: Array of --build-arg values ("arg=value" strings) for buildah + name: build-args + type: array + - default: "" + description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file + name: build-args-file + type: string + - default: "false" + description: Whether to enable privileged mode, should be used only with remote + VMs + name: privileged-nested + type: string + results: + - description: "" + name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - description: "" + name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - description: "" + name: CHAINS-GIT_URL + value: $(tasks.clone-repository.results.url) + - description: "" + name: CHAINS-GIT_COMMIT + value: $(tasks.clone-repository.results.commit) + tasks: + - name: init + params: + - name: image-url + value: $(params.output-image) + - name: rebuild + value: $(params.rebuild) + - name: skip-checks + value: $(params.skip-checks) + taskRef: + params: + - name: name + value: init + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 + - name: kind + value: task + resolver: bundles + - name: clone-repository + params: + - name: url + value: $(params.git-url) + - name: revision + value: $(params.revision) + - name: ociStorage + value: $(params.output-image).git + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - init + taskRef: + params: + - name: name + value: git-clone-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3dc39eae48745a96097c07c577b944d6203a91c35d3f71d9ed5feab41d327a6a + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + workspaces: + - name: basic-auth + workspace: git-auth + - name: prefetch-dependencies + params: + - name: input + value: $(params.prefetch-input) + - name: SOURCE_ARTIFACT + value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) + - name: ociStorage + value: $(params.output-image).prefetch + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - clone-repository + taskRef: + params: + - name: name + value: prefetch-dependencies-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:5946ca57aa29f162e11b74984ec58960f55f9fb6a0e97c6c9215c4161f768726 + - name: kind + value: task + resolver: bundles + workspaces: + - name: git-basic-auth + workspace: git-auth + - name: netrc + workspace: netrc + - name: build-container + params: + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: PRIVILEGED_NESTED + value: $(params.privileged-nested) + - name: SOURCE_URL + value: $(tasks.clone-repository.results.url) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - prefetch-dependencies + taskRef: + params: + - name: name + value: buildah-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:27b04ea788cf64fd38c7d151feb5e1ca408804fa5a70cf704ae746a086ee92b8 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-image-index + params: + - name: IMAGE + value: $(params.output-image) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: ALWAYS_BUILD_INDEX + value: $(params.build-image-index) + - name: IMAGES + value: + - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + runAfter: + - build-container + taskRef: + params: + - name: name + value: build-image-index + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:31197f4ee71be47c6f491e888ff266cbbb8ad5ed1c7c4141cc14f002d1802a50 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-source-image + params: + - name: BINARY_IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: BINARY_IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: source-build-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:282cb5a9119a87e88559444feff67d76d6f356d03654b4845632c049b2314735 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - input: $(params.build-source-image) + operator: in + values: + - "true" + - name: deprecated-base-image-check + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: deprecated-image-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clair-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clair-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: ecosystem-cert-preflight-checks + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: ecosystem-cert-preflight-checks + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-snyk-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-snyk-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clamav-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clamav-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-coverity-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - coverity-availability-check + taskRef: + params: + - name: name + value: sast-coverity-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - input: $(tasks.coverity-availability-check.results.STATUS) + operator: in + values: + - success + - name: coverity-availability-check + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: coverity-availability-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-shell-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-shell-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-unicode-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-unicode-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: apply-tags + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: apply-tags + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:4c2b0a2d2904108f8d19edfa878df6cd49ed19aab73ab6fc6a435fba0265f771 + - name: kind + value: task + resolver: bundles + - name: push-dockerfile + params: + - name: IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: push-dockerfile-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:13633d5ba8445c0f732a0a5d1b33ffbb708398e45ef1647542b0ab22fee25a6a + - name: kind + value: task + resolver: bundles + - name: rpms-signature-scan + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: rpms-signature-scan + - name: bundle + value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + workspaces: + - name: git-auth + optional: true + - name: netrc + optional: true taskRunTemplate: serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc workspaces: diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml index e26ec94f8a..716db6e78e 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml @@ -30,14 +30,571 @@ spec: value: . - name: build-args-file value: rstudio/rhel9-python-3.12/build-args/cuda.conf - - name: build-platforms - value: - - linux/x86_64 - - linux-m2xlarge/arm64 - - name: hermetic - value: false - pipelineRef: - name: multiarch-push-pipeline + pipelineSpec: + description: | + This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. + + _Uses `buildah` to create a container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. + This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-oci-ta?tab=tags)_ + params: + - description: Source Repository URL + name: git-url + type: string + - default: "" + description: Revision of the Source Repository + name: revision + type: string + - description: Fully Qualified Output Image + name: output-image + type: string + - default: . + description: Path to the source code of an application's component from where + to build image. + name: path-context + type: string + - default: Dockerfile + description: Path to the Dockerfile inside the context specified by parameter + path-context + name: dockerfile + type: string + - default: "false" + description: Force rebuild image + name: rebuild + type: string + - default: "false" + description: Skip checks against built image + name: skip-checks + type: string + - default: "false" + description: Execute the build with network isolation + name: hermetic + type: string + - default: "" + description: Build dependencies to be prefetched + name: prefetch-input + type: string + - default: "" + description: Image tag expiration time, time values could be something like + 1h, 2d, 3w for hours, days, and weeks, respectively. + name: image-expires-after + type: string + - default: "false" + description: Build a source image. + name: build-source-image + type: string + - default: "false" + description: Add built image into an OCI image index + name: build-image-index + type: string + - default: docker + description: The format for the resulting image's mediaType. Valid values are + oci or docker. + name: buildah-format + type: string + - default: [] + description: Array of --build-arg values ("arg=value" strings) for buildah + name: build-args + type: array + - default: "" + description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file + name: build-args-file + type: string + - default: "false" + description: Whether to enable privileged mode, should be used only with remote + VMs + name: privileged-nested + type: string + results: + - description: "" + name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - description: "" + name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - description: "" + name: CHAINS-GIT_URL + value: $(tasks.clone-repository.results.url) + - description: "" + name: CHAINS-GIT_COMMIT + value: $(tasks.clone-repository.results.commit) + tasks: + - name: init + params: + - name: image-url + value: $(params.output-image) + - name: rebuild + value: $(params.rebuild) + - name: skip-checks + value: $(params.skip-checks) + taskRef: + params: + - name: name + value: init + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 + - name: kind + value: task + resolver: bundles + - name: clone-repository + params: + - name: url + value: $(params.git-url) + - name: revision + value: $(params.revision) + - name: ociStorage + value: $(params.output-image).git + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - init + taskRef: + params: + - name: name + value: git-clone-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3dc39eae48745a96097c07c577b944d6203a91c35d3f71d9ed5feab41d327a6a + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + workspaces: + - name: basic-auth + workspace: git-auth + - name: prefetch-dependencies + params: + - name: input + value: $(params.prefetch-input) + - name: SOURCE_ARTIFACT + value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) + - name: ociStorage + value: $(params.output-image).prefetch + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - clone-repository + taskRef: + params: + - name: name + value: prefetch-dependencies-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:5946ca57aa29f162e11b74984ec58960f55f9fb6a0e97c6c9215c4161f768726 + - name: kind + value: task + resolver: bundles + workspaces: + - name: git-basic-auth + workspace: git-auth + - name: netrc + workspace: netrc + - name: build-container + params: + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: PRIVILEGED_NESTED + value: $(params.privileged-nested) + - name: SOURCE_URL + value: $(tasks.clone-repository.results.url) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - prefetch-dependencies + taskRef: + params: + - name: name + value: buildah-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-buildah-oci-ta:0.6@sha256:27b04ea788cf64fd38c7d151feb5e1ca408804fa5a70cf704ae746a086ee92b8 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-image-index + params: + - name: IMAGE + value: $(params.output-image) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: ALWAYS_BUILD_INDEX + value: $(params.build-image-index) + - name: IMAGES + value: + - $(tasks.build-container.results.IMAGE_URL)@$(tasks.build-container.results.IMAGE_DIGEST) + - name: BUILDAH_FORMAT + value: $(params.buildah-format) + runAfter: + - build-container + taskRef: + params: + - name: name + value: build-image-index + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:31197f4ee71be47c6f491e888ff266cbbb8ad5ed1c7c4141cc14f002d1802a50 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-source-image + params: + - name: BINARY_IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: BINARY_IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: source-build-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:282cb5a9119a87e88559444feff67d76d6f356d03654b4845632c049b2314735 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - input: $(params.build-source-image) + operator: in + values: + - "true" + - name: deprecated-base-image-check + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: deprecated-image-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clair-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clair-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: ecosystem-cert-preflight-checks + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: ecosystem-cert-preflight-checks + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:9568c51a5158d534248908b9b561cf67d2826ed4ea164ffd95628bb42380e6ec + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-snyk-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-snyk-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clamav-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clamav-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-coverity-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - coverity-availability-check + taskRef: + params: + - name: name + value: sast-coverity-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - input: $(tasks.coverity-availability-check.results.STATUS) + operator: in + values: + - success + - name: coverity-availability-check + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: coverity-availability-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-shell-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-shell-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-unicode-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-unicode-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: apply-tags + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: apply-tags + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:4c2b0a2d2904108f8d19edfa878df6cd49ed19aab73ab6fc6a435fba0265f771 + - name: kind + value: task + resolver: bundles + - name: push-dockerfile + params: + - name: IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: push-dockerfile-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:13633d5ba8445c0f732a0a5d1b33ffbb708398e45ef1647542b0ab22fee25a6a + - name: kind + value: task + resolver: bundles + - name: rpms-signature-scan + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: rpms-signature-scan + - name: bundle + value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + workspaces: + - name: git-auth + optional: true + - name: netrc + optional: true taskRunTemplate: serviceAccountName: build-pipeline-odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc workspaces: From cc307b9b5aa0e9fd2cbc39922cc561fa53f50998 Mon Sep 17 00:00:00 2001 From: Alex Fan Date: Thu, 13 Nov 2025 14:31:37 +0000 Subject: [PATCH 40/43] add multi-arch --- ...-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml | 6 ++++++ ...workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml index fa0d081d2e..c21b3c8cd0 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml @@ -30,6 +30,12 @@ spec: value: . - name: build-args-file value: rstudio/rhel9-python-3.12/build-args/cpu.conf + - name: build-platforms + value: + - linux/x86_64 + - linux-m2xlarge/arm64 + - name: hermetic + value: false pipelineSpec: description: | This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml index 716db6e78e..5e3edd4a82 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml @@ -30,6 +30,12 @@ spec: value: . - name: build-args-file value: rstudio/rhel9-python-3.12/build-args/cuda.conf + - name: build-platforms + value: + - linux/x86_64 + - linux-m2xlarge/arm64 + - name: hermetic + value: false pipelineSpec: description: | This pipeline is ideal for building container images from a Containerfile while maintaining trust after pipeline customization. From 50f39fceb68c9e9c191324d1ed92972a8a7dacd5 Mon Sep 17 00:00:00 2001 From: "konflux-internal-p02[bot]" <170854209+konflux-internal-p02[bot]@users.noreply.github.com> Date: Sat, 15 Nov 2025 05:07:22 +0000 Subject: [PATCH 41/43] Update Konflux references Signed-off-by: konflux-internal-p02 <170854209+konflux-internal-p02[bot]@users.noreply.github.com> --- .tekton/multiarch-push-pipeline.yaml | 34 +++++++++---------- ...udio-minimal-cpu-py312-rhel9-poc-push.yaml | 12 +++---- ...dio-minimal-cuda-py312-rhel9-poc-push.yaml | 12 +++---- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/.tekton/multiarch-push-pipeline.yaml b/.tekton/multiarch-push-pipeline.yaml index 765029f0d3..d905697786 100644 --- a/.tekton/multiarch-push-pipeline.yaml +++ b/.tekton/multiarch-push-pipeline.yaml @@ -39,7 +39,7 @@ spec: - name: name value: slack-webhook-notification - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-slack-webhook-notification:0.1@sha256:4e68fe2225debc256d403b828ed358345bb56d03327b46d55cb6c42911375750 + value: quay.io/konflux-ci/tekton-catalog/task-slack-webhook-notification:0.1@sha256:69945a30c11387a766e3d0ae33991b68e865a290c09da1fea44f193d358926ba - name: kind value: task resolver: bundles @@ -183,7 +183,7 @@ spec: - name: name value: init - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:bbf313b09740fb39b3343bc69ee94b2a2c21d16a9304f9b7c111c305558fc346 + value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:3ca52e1d8885fc229bd9067275f44d5b21a9a609981d0324b525ddeca909bf10 - name: kind value: task resolver: bundles @@ -206,7 +206,7 @@ spec: - name: name value: git-clone-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3a920a83fc0135aaae2730fe9d446eb2da2ffc9d63a34bceea04afd24653bdee + value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:3dc39eae48745a96097c07c577b944d6203a91c35d3f71d9ed5feab41d327a6a - name: kind value: task resolver: bundles @@ -235,7 +235,7 @@ spec: - name: name value: prefetch-dependencies-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:970285e3b0495961199523b566e0dd92ec2e29bedbcf61d8fc67106b06d0f923 + value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:5946ca57aa29f162e11b74984ec58960f55f9fb6a0e97c6c9215c4161f768726 - name: kind value: task resolver: bundles @@ -287,7 +287,7 @@ spec: - name: name value: buildah-remote-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-buildah-remote-oci-ta:0.6@sha256:ac05dabe8b6b446f974cf2b6ef1079cfaa9443d7078c2ebe3ec79aa650e1b5b2 + value: quay.io/konflux-ci/tekton-catalog/task-buildah-remote-oci-ta:0.6@sha256:17b267b5ae3deca5905d930e54337b89df45d3579f33b7fab4df74ee644cded4 - name: kind value: task resolver: bundles @@ -318,7 +318,7 @@ spec: - name: name value: build-image-index - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:d94cad7f41be61074dd21c7dff26dab9217c3435a16f62813c1cb8382dd9aae6 + value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:31197f4ee71be47c6f491e888ff266cbbb8ad5ed1c7c4141cc14f002d1802a50 - name: kind value: task resolver: bundles @@ -344,7 +344,7 @@ spec: - name: name value: source-build-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:2a290f91fdccf4c9ef726a1605163bc14904e1dbf9837ac6d2621caddd10f98e + value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.3@sha256:282cb5a9119a87e88559444feff67d76d6f356d03654b4845632c049b2314735 - name: kind value: task resolver: bundles @@ -370,7 +370,7 @@ spec: - name: name value: deprecated-image-check - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 + value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:462baed733dfc38aca5395499e92f19b6f13a74c2e88fe5d86c3cffa2f899b57 - name: kind value: task resolver: bundles @@ -397,7 +397,7 @@ spec: - name: name value: clair-scan - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:a7cc183967f89c4ac100d04ab8f81e54733beee60a0528208107c9a22d3c43af + value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:8ec7d7b9438ace5ef3fb03a533d9440d0fd81e51c73b0dc1eb51602fb7cd044e - name: kind value: task resolver: bundles @@ -443,7 +443,7 @@ spec: - name: name value: sast-snyk-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:181d63c126e3119a9d57b8feed4eb66a875b5208c3e90724c22758e65dca8733 + value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:8ad28b7783837a24acbc9a8494c935e796e591ce476085ad5899bebd7e53f077 - name: kind value: task resolver: bundles @@ -465,7 +465,7 @@ spec: - name: name value: clamav-scan - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:b0bd59748cda4a7abf311e4f448e6c1d00c6b6d8c0ecc1c2eb33e08dc0e0b802 + value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3 - name: kind value: task resolver: bundles @@ -510,7 +510,7 @@ spec: - name: name value: sast-coverity-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:cdbe1a968676e4f5519b082bf1e27a4cdcf66dd60af66dbc26b3e604f957f7e9 + value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:78f5244a8cfd28c890ed62db7e4ff1fc97ff39876d37fb19f1b0c2c286a4002c - name: kind value: task resolver: bundles @@ -531,7 +531,7 @@ spec: - name: name value: coverity-availability-check - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:db2b267dc15e4ed17f704ee91b8e9b38068e1a35b1018a328fdca621819d74c6 + value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:36400873d3031df128c55aa71ee11d322c3e55fd8f13dc5779098fbc117c0aa3 - name: kind value: task resolver: bundles @@ -557,7 +557,7 @@ spec: - name: name value: sast-shell-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:f950c3cefcff91de751f4d24a297c3312a2b265dd54478193ba1330791976c35 + value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:d44336d7bcbd1f7cedee639357a493bd1f661e2859e49e11a34644bdf6819c4e - name: kind value: task resolver: bundles @@ -583,7 +583,7 @@ spec: - name: name value: sast-unicode-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1cf8f6f6e991e1820cbebddaf9f38442a2ea5669956c9ffc2b7e4698ae7e99be + value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:e5a8d3e8e7be7246a1460385b95c084ea6e8fe7520d40fe4389deb90f1bf5176 - name: kind value: task resolver: bundles @@ -608,7 +608,7 @@ spec: - name: name value: apply-tags - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:f44be1bf0262471f2f503f5e19da5f0628dcaf968c86272a2ad6b4871e708448 + value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:4c2b0a2d2904108f8d19edfa878df6cd49ed19aab73ab6fc6a435fba0265f771 - name: kind value: task resolver: bundles @@ -631,7 +631,7 @@ spec: - name: name value: push-dockerfile-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:14fba04580b236e4206a904b86ee2fd8eeaa4163f7619a9c2602d361e4f74c51 + value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:13633d5ba8445c0f732a0a5d1b33ffbb708398e45ef1647542b0ab22fee25a6a - name: kind value: task resolver: bundles diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml index c21b3c8cd0..b72ec0ecf1 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml @@ -317,7 +317,7 @@ spec: - name: name value: deprecated-image-check - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 + value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:462baed733dfc38aca5395499e92f19b6f13a74c2e88fe5d86c3cffa2f899b57 - name: kind value: task resolver: bundles @@ -385,7 +385,7 @@ spec: - name: name value: sast-snyk-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 + value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:8ad28b7783837a24acbc9a8494c935e796e591ce476085ad5899bebd7e53f077 - name: kind value: task resolver: bundles @@ -452,7 +452,7 @@ spec: - name: name value: sast-coverity-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 + value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:78f5244a8cfd28c890ed62db7e4ff1fc97ff39876d37fb19f1b0c2c286a4002c - name: kind value: task resolver: bundles @@ -473,7 +473,7 @@ spec: - name: name value: coverity-availability-check - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c + value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:36400873d3031df128c55aa71ee11d322c3e55fd8f13dc5779098fbc117c0aa3 - name: kind value: task resolver: bundles @@ -499,7 +499,7 @@ spec: - name: name value: sast-shell-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed + value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:d44336d7bcbd1f7cedee639357a493bd1f661e2859e49e11a34644bdf6819c4e - name: kind value: task resolver: bundles @@ -525,7 +525,7 @@ spec: - name: name value: sast-unicode-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 + value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:e5a8d3e8e7be7246a1460385b95c084ea6e8fe7520d40fe4389deb90f1bf5176 - name: kind value: task resolver: bundles diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml index 5e3edd4a82..6612e8cae2 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml @@ -317,7 +317,7 @@ spec: - name: name value: deprecated-image-check - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:f59175d9a0a60411738228dfe568af4684af4aa5e7e05c832927cb917801d489 + value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:462baed733dfc38aca5395499e92f19b6f13a74c2e88fe5d86c3cffa2f899b57 - name: kind value: task resolver: bundles @@ -385,7 +385,7 @@ spec: - name: name value: sast-snyk-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:60f2dac41844d222086ff7f477e51f3563716b183d87db89f603d6f604c21760 + value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:8ad28b7783837a24acbc9a8494c935e796e591ce476085ad5899bebd7e53f077 - name: kind value: task resolver: bundles @@ -452,7 +452,7 @@ spec: - name: name value: sast-coverity-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:ae62d14c999fd93246fef4e57d28570fa5200c3266b9a3263a39965e5a5b02d7 + value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:78f5244a8cfd28c890ed62db7e4ff1fc97ff39876d37fb19f1b0c2c286a4002c - name: kind value: task resolver: bundles @@ -473,7 +473,7 @@ spec: - name: name value: coverity-availability-check - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:5623e48314ffd583e9cab383011dc0763b6c92b09c4f427b8bfcca885394a21c + value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:36400873d3031df128c55aa71ee11d322c3e55fd8f13dc5779098fbc117c0aa3 - name: kind value: task resolver: bundles @@ -499,7 +499,7 @@ spec: - name: name value: sast-shell-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:1f0fcba24ebc447d9f8a2ea2e8f262fa435d6c523ca6b0346cd67261551fc9ed + value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:d44336d7bcbd1f7cedee639357a493bd1f661e2859e49e11a34644bdf6819c4e - name: kind value: task resolver: bundles @@ -525,7 +525,7 @@ spec: - name: name value: sast-unicode-check-oci-ta - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:1833c618170ab9deb8455667f220df8e88d16ccd630a2361366f594e2bdcb712 + value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:e5a8d3e8e7be7246a1460385b95c084ea6e8fe7520d40fe4389deb90f1bf5176 - name: kind value: task resolver: bundles From 5dc59460532090557e280190c54ac903c90145e0 Mon Sep 17 00:00:00 2001 From: "konflux-internal-p02[bot]" <170854209+konflux-internal-p02[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 01:27:30 +0000 Subject: [PATCH 42/43] Update registry.access.redhat.com/ubi9/ubi Docker digest to dcd8128 Signed-off-by: konflux-internal-p02 <170854209+konflux-internal-p02[bot]@users.noreply.github.com> --- rstudio/rhel9-python-3.12/Dockerfile.cpu.konflux | 2 +- rstudio/rhel9-python-3.12/Dockerfile.cuda.konflux | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cpu.konflux b/rstudio/rhel9-python-3.12/Dockerfile.cpu.konflux index 993c4bb5c8..484e184c65 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cpu.konflux +++ b/rstudio/rhel9-python-3.12/Dockerfile.cpu.konflux @@ -6,7 +6,7 @@ ARG TARGETARCH ARG BASE_IMAGE # External image alias for UBI repository configuration -FROM registry.access.redhat.com/ubi9/ubi@sha256:bbac76ac0310eefd6298ed3ab3c1710e1c842f1f778800de0f49e660b402bdc5 AS ubi-repos +FROM registry.access.redhat.com/ubi9/ubi@sha256:dcd8128d7620b06e4bce291f30db6ffcfa339b04e6d66081e36eb8e2b1b700f8 AS ubi-repos #################### # cpu-base # diff --git a/rstudio/rhel9-python-3.12/Dockerfile.cuda.konflux b/rstudio/rhel9-python-3.12/Dockerfile.cuda.konflux index bca4dc4995..654fc70401 100644 --- a/rstudio/rhel9-python-3.12/Dockerfile.cuda.konflux +++ b/rstudio/rhel9-python-3.12/Dockerfile.cuda.konflux @@ -6,7 +6,7 @@ ARG TARGETARCH ARG BASE_IMAGE # External image alias for UBI repository configuration -FROM registry.access.redhat.com/ubi9/ubi@sha256:bbac76ac0310eefd6298ed3ab3c1710e1c842f1f778800de0f49e660b402bdc5 AS ubi-repos +FROM registry.access.redhat.com/ubi9/ubi@sha256:dcd8128d7620b06e4bce291f30db6ffcfa339b04e6d66081e36eb8e2b1b700f8 AS ubi-repos #################### # cuda-base # From 4dbce7fd15692e1d54a64cc4930e51dd3082b9ef Mon Sep 17 00:00:00 2001 From: "konflux-internal-p02[bot]" <170854209+konflux-internal-p02[bot]@users.noreply.github.com> Date: Sat, 20 Dec 2025 05:02:51 +0000 Subject: [PATCH 43/43] Update quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2 Docker digest to c02429b Signed-off-by: konflux-internal-p02 <170854209+konflux-internal-p02[bot]@users.noreply.github.com> --- .../odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml | 2 +- ...odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml index b72ec0ecf1..864dcf86f1 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cpu-py312-rhel9-poc-push.yaml @@ -587,7 +587,7 @@ spec: - name: name value: rpms-signature-scan - name: bundle - value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 + value: quay.io/konflux-ci/tekton-catalog/task-rpms-signature-scan:0.2@sha256:c02429b45145fc7f2b1fa94ec2f48c0d8ac203fd4385796b4c93e5d0dec967f8 - name: kind value: task resolver: bundles diff --git a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml index 6612e8cae2..ca7e7e6014 100644 --- a/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml +++ b/.tekton/odh-workbench-rstudio-minimal-cuda-py312-rhel9-poc-push.yaml @@ -587,7 +587,7 @@ spec: - name: name value: rpms-signature-scan - name: bundle - value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:78c8d7960c6db284356d94aaae64d1fca34fff4de6a6e20d897a088af0c81cf5 + value: quay.io/konflux-ci/konflux-vanguard/task-rpms-signature-scan:0.2@sha256:c02429b45145fc7f2b1fa94ec2f48c0d8ac203fd4385796b4c93e5d0dec967f8 - name: kind value: task resolver: bundles