diff --git a/.github/workflows/params-env.yaml b/.github/workflows/params-env.yaml index b65c88d5c6..433d217aac 100644 --- a/.github/workflows/params-env.yaml +++ b/.github/workflows/params-env.yaml @@ -6,9 +6,9 @@ on: # yamllint disable-line rule:truthy paths: - 'manifests/base/commit.env' - 'manifests/base/params.env' + - 'manifests/base/commit-latest.env' + - 'manifests/base/params-latest.env' - 'ci/check-params-env.sh' - - 'ci/check-runtime-images.sh' - - 'manifests/base/runtime-*-imagestream.yaml' workflow_dispatch: permissions: @@ -28,7 +28,3 @@ jobs: run: | bash ./ci/check-params-env.sh - - name: Validate references for runtime images - id: validate-runtime-images-references - run: | - bash ./ci/check-runtime-images.sh diff --git a/ci/check-params-env.sh b/ci/check-params-env.sh index aa61671bdc..72f4e06416 100755 --- a/ci/check-params-env.sh +++ b/ci/check-params-env.sh @@ -20,12 +20,15 @@ # ----------------------------- GLOBAL VARIABLES ----------------------------- # +COMMIT_LATEST_ENV_PATH="manifests/base/commit-latest.env" COMMIT_ENV_PATH="manifests/base/commit.env" +PARAMS_LATEST_ENV_PATH="manifests/base/params-latest.env" PARAMS_ENV_PATH="manifests/base/params.env" # This value needs to be updated everytime we deliberately change number of the -# images we want to have in the `params.env` file. +# images we want to have in the `params.env` or `params-latest.env` file. EXPECTED_NUM_RECORDS=24 +EXPECTED_ADDI_RUNTIME_RECORDS=6 # Number of attempts for the skopeo tool to gather data from the repository. SKOPEO_RETRY=3 @@ -39,14 +42,17 @@ SIZE_ABSOLUTE_TRESHOLD=100 # ---------------------------- DEFINED FUNCTIONS ----------------------------- # function check_variables_uniq() { - local env_file_path="${1}" - local allow_value_duplicity="${2:=false}" + local env_file_path_1="${1}" + local env_file_path_2="${2}" + local allow_value_duplicity="${3:=false}" + local is_params_env="${4:=false}" local ret_code=0 + - echo "Checking that all variables in the file '${env_file_path}' are unique and expected" + echo "Checking that all variables in the file '${env_file_path_1}' & '${env_file_path_2}' are unique and expected" local content - content=$(sed 's#\(.*\)=.*#\1#' "${env_file_path}" | sort) + content=$(sed 's#\(.*\)=.*#\1#' "${env_file_path_1}"; sed 's#\(.*\)=.*#\1#' "${env_file_path_2}" | sort) local num_records num_records=$(echo "${content}" | wc -l) @@ -61,9 +67,9 @@ function check_variables_uniq() { # ---- if test "${allow_value_duplicity}" = "false"; then - echo "Checking that all values assigned to variables in the file '${env_file_path}' are unique and expected" + echo "Checking that all values assigned to variables in the file '${env_file_path_1}' & '${env_file_path_2}' are unique and expected" - content=$(sed 's#.*=\(.*\)#\1#' "${env_file_path}" | sort) + content=$(sed 's#\(.*\)=.*#\1#' "${env_file_path_1}"; sed 's#\(.*\)=.*#\1#' "${env_file_path_2}" | sort) local num_values num_values=$(echo "${content}" | wc -l) @@ -78,8 +84,13 @@ function check_variables_uniq() { fi # ---- - echo "Checking that there are expected number of records in the file '${env_file_path}'" + echo "Checking that there are expected number of records in the file '${env_file_path_1}' + '${env_file_path_2}'" + if test "${is_params_env}" = "true"; then + # In case of params.env file, we need to additionally the number of + # runtime images that are defined in the file + EXPECTED_NUM_RECORDS=$((EXPECTED_NUM_RECORDS + EXPECTED_ADDI_RUNTIME_RECORDS)) + fi test "${num_records}" -eq "${EXPECTED_NUM_RECORDS}" || { echo "Number of records in the file is incorrect - expected '${EXPECTED_NUM_RECORDS}' but got '${num_records}'!" ret_code=1 @@ -102,97 +113,97 @@ function check_image_variable_matches_name_and_commitref_and_size() { local expected_img_size case "${image_variable}" in - odh-minimal-notebook-image-n) + odh-workbench-jupyter-minimal-cpu-py311-ubi9-n) expected_name="odh-notebook-jupyter-minimal-ubi9-python-3.11" expected_commitref="main" expected_build_name="jupyter-minimal-ubi9-python-3.11-amd64" expected_img_size=624 ;; - odh-minimal-notebook-image-n-1) + odh-workbench-jupyter-minimal-cpu-py311-ubi9-n-1) expected_name="odh-notebook-jupyter-minimal-ubi9-python-3.11" expected_commitref="2024b" expected_build_name="jupyter-minimal-ubi9-python-3.11-amd64" expected_img_size=503 ;; - odh-minimal-gpu-notebook-image-n) + odh-workbench-jupyter-minimal-cuda-py311-ubi9-n) expected_name="odh-notebook-jupyter-cuda-minimal-ubi9-python-3.11" expected_commitref="main" expected_build_name="cuda-jupyter-minimal-ubi9-python-3.11-amd64" expected_img_size=5025 ;; - odh-minimal-gpu-notebook-image-n-1) + odh-workbench-jupyter-minimal-cuda-py311-ubi9-n-1) expected_name="odh-notebook-jupyter-minimal-ubi9-python-3.11" expected_commitref="2024b" expected_build_name="cuda-jupyter-minimal-ubi9-python-3.11-amd64" expected_img_size=5157 ;; - odh-pytorch-gpu-notebook-image-n) + odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n) expected_name="odh-notebook-jupyter-cuda-pytorch-ubi9-python-3.11" expected_commitref="main" expected_build_name="cuda-jupyter-pytorch-ubi9-python-3.11-amd64" expected_img_size=8571 ;; - odh-pytorch-gpu-notebook-image-n-1) + odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n-1) expected_name="odh-notebook-jupyter-pytorch-ubi9-python-3.11" expected_commitref="2024b" expected_build_name="jupyter-pytorch-ubi9-python-3.11-amd64" expected_img_size=8571 ;; - odh-generic-data-science-notebook-image-n) + odh-workbench-jupyter-datascience-cpu-py311-ubi9-n) expected_name="odh-notebook-jupyter-datascience-ubi9-python-3.11" expected_commitref="main" expected_build_name="jupyter-datascience-ubi9-python-3.11-amd64" expected_img_size=1067 ;; - odh-generic-data-science-notebook-image-n-1) + odh-workbench-jupyter-datascience-cpu-py311-ubi9-n-1) expected_name="odh-notebook-jupyter-datascience-ubi9-python-3.11" expected_commitref="2024b" expected_build_name="jupyter-datascience-ubi9-python-3.11-amd64" expected_img_size=904 ;; - odh-tensorflow-gpu-notebook-image-n) + odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n) expected_name="odh-notebook-cuda-jupyter-tensorflow-ubi9-python-3.11" expected_commitref="main" expected_build_name="cuda-jupyter-tensorflow-ubi9-python-3.11-amd64" expected_img_size=8037 ;; - odh-tensorflow-gpu-notebook-image-n-1) + odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n-1) expected_name="odh-notebook-cuda-jupyter-tensorflow-ubi9-python-3.11" expected_commitref="2024b" expected_build_name="cuda-jupyter-tensorflow-ubi9-python-3.11-amd64" expected_img_size=8211 ;; - odh-trustyai-notebook-image-n) + odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n) expected_name="odh-notebook-jupyter-trustyai-ubi9-python-3.11" expected_commitref="main" expected_build_name="jupyter-trustyai-ubi9-python-3.11-amd64" expected_img_size=4369 ;; - odh-trustyai-notebook-image-n-1) + odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n-1) expected_name="odh-notebook-jupyter-trustyai-ubi9-python-3.11" expected_commitref="2024b" expected_build_name="jupyter-trustyai-ubi9-python-3.11-amd64" expected_img_size=4197 ;; - odh-codeserver-notebook-image-n) + odh-workbench-codeserver-datascience-cpu-py311-ubi9-n) expected_name="odh-notebook-code-server-ubi9-python-3.11" expected_commitref="main" expected_build_name="codeserver-ubi9-python-3.11-amd64" expected_img_size=893 ;; - odh-codeserver-notebook-image-n-1) + odh-workbench-codeserver-datascience-cpu-py311-ubi9-n-1) expected_name="odh-notebook-code-server-ubi9-python-3.11" expected_commitref="2024b" expected_build_name="codeserver-ubi9-python-3.11-amd64" expected_img_size=850 ;; - odh-rstudio-notebook-image-n) + odh-workbench-rstudio-minimal-cpu-py311-c9s-n) expected_name="odh-notebook-rstudio-server-c9s-python-3.11" expected_commitref="main" expected_build_name="rstudio-c9s-python-3.11-amd64" expected_img_size=1349 ;; - odh-rstudio-notebook-image-n-1) + odh-workbench-rstudio-minimal-cpu-py311-c9s-n-1) expected_name="odh-notebook-rstudio-server-c9s-python-3.11" expected_commitref="2024b" expected_build_name="rstudio-c9s-python-3.11-amd64" @@ -201,54 +212,91 @@ function check_image_variable_matches_name_and_commitref_and_size() { # For both RStudio GPU workbenches - the final name labels are identical to plain RStudio ones # This is because the very same RStudio Dockerfile is used but different base images in both cases # We should consider what to do with this - in ideal case, we should have different labels for these cases. - odh-rstudio-gpu-notebook-image-n) + odh-workbench-rstudio-minimal-cuda-py311-c9s-n) expected_name="odh-notebook-rstudio-server-cuda-c9s-python-3.11" expected_commitref="main" expected_build_name="cuda-rstudio-c9s-python-3.11-amd64" expected_img_size=6473 ;; - odh-rstudio-gpu-notebook-image-n-1) + odh-workbench-rstudio-minimal-cuda-py311-c9s-n-1) expected_name="odh-notebook-rstudio-server-c9s-python-3.11" expected_commitref="2024b" expected_build_name="cuda-rstudio-c9s-python-3.11-amd64" expected_img_size=7184 ;; - odh-rocm-minimal-notebook-image-n) + odh-workbench-jupyter-minimal-rocm-py311-ubi9-n) expected_name="odh-notebook-jupyter-rocm-minimal-ubi9-python-3.11" expected_commitref="main" expected_build_name="rocm-jupyter-minimal-ubi9-python-3.11-amd64" expected_img_size=5891 ;; - odh-rocm-minimal-notebook-image-n-1) + odh-workbench-jupyter-minimal-rocm-py311-ubi9-n-1) expected_name="odh-notebook-jupyter-minimal-ubi9-python-3.11" expected_commitref="2024b" expected_build_name="rocm-jupyter-minimal-ubi9-python-3.11-amd64" expected_img_size=4830 ;; - odh-rocm-pytorch-notebook-image-n) + odh-workbench-jupyter-pytorch-rocm-py311-ubi9-n) expected_name="odh-notebook-jupyter-rocm-pytorch-ubi9-python-3.11" expected_commitref="main" expected_build_name="rocm-jupyter-pytorch-ubi9-python-3.11-amd64" expected_img_size=7531 ;; - odh-rocm-pytorch-notebook-image-n-1) + odh-workbench-jupyter-pytorch-rocm-py311-ubi9-n-1) expected_name="odh-notebook-jupyter-rocm-pytorch-ubi9-python-3.11" expected_commitref="2024b" expected_build_name="rocm-jupyter-pytorch-ubi9-python-3.11-amd64" expected_img_size=6571 ;; - odh-rocm-tensorflow-notebook-image-n) + odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-n) expected_name="odh-notebook-jupyter-rocm-tensorflow-ubi9-python-3.11" expected_commitref="main" expected_build_name="rocm-jupyter-tensorflow-ubi9-python-3.11-amd64" expected_img_size=6828 ;; - odh-rocm-tensorflow-notebook-image-n-1) + odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-n-1) expected_name="odh-notebook-jupyter-rocm-tensorflow-ubi9-python-3.11" expected_commitref="2024b" expected_build_name="rocm-jupyter-tensorflow-ubi9-python-3.11-amd64" expected_img_size=5782 ;; + # The following are pipeline runtime images + odh-pipeline-runtime-minimal-cpu-py311-ubi9-n) + expected_name="odh-notebook-runtime-minimal-ubi9-python-3.11" + expected_commitref="main" + expected_build_name="runtime-minimal-ubi9-python-3.11-amd64" + expected_img_size=570 + ;; + odh-pipeline-runtime-datascience-cpu-py311-ubi9-n) + expected_name="odh-notebook-runtime-datascience-ubi9-python-3.11" + expected_commitref="main" + expected_build_name="runtime-datascience-ubi9-python-3.11-amd64" + expected_img_size=954 + ;; + odh-pipeline-runtime-pytorch-cuda-py311-ubi9-n) + expected_name="odh-notebook-runtime-pytorch-ubi9-python-3.11" + expected_commitref="main" + expected_build_name="runtime-cuda-pytorch-ubi9-python-3.11-amd64" + expected_img_size=8506 + ;; + odh-pipeline-runtime-pytorch-rocm-py311-ubi9-n) + expected_name="odh-notebook-runtime-rocm-pytorch-ubi9-python-3.11" + expected_commitref="main" + expected_build_name="rocm-runtime-pytorch-ubi9-python-3.11-amd64" + expected_img_size=7413 + ;; + odh-pipeline-runtime-tensorflow-cuda-py311-ubi9-n) + expected_name="odh-notebook-cuda-runtime-tensorflow-ubi9-python-3.11" + expected_commitref="main" + expected_build_name="runtime-cuda-tensorflow-ubi9-python-3.11-amd64" + expected_img_size=7917 + ;; + odh-pipeline-runtime-tensorflow-rocm-py311-ubi9-n) + expected_name="odh-notebook-rocm-runtime-tensorflow-ubi9-python-3.11" + expected_commitref="main" + expected_build_name="rocm-runtime-tensorflow-ubi9-python-3.11-amd64" + expected_img_size=6705 + ;; *) echo "Unimplemented variable name: '${image_variable}'" return 1 @@ -294,23 +342,28 @@ function check_image_variable_matches_name_and_commitref_and_size() { function check_image_commit_id_matches_metadata() { local image_variable="${1}" local image_commit_id="${2}" + local is_pipeline_runtime="false" local short_image_commit_id # We're interested only in the first 7 characters of the commit ID short_image_commit_id=${image_commit_id:0:7} local file_image_commit_id + # Check if the image variable is a pipeline runtime image + if [[ "${image_variable}" == *"odh-pipeline-runtime-"* ]]; then + is_pipeline_runtime="true" + fi + file_image_commit_id=$(cat "${COMMIT_ENV_PATH}" "${COMMIT_LATEST_ENV_PATH}" | sed 's#-commit##' | grep "${image_variable}=" | cut --delimiter "=" --field 2) - file_image_commit_id=$(sed 's#-commit##' "${COMMIT_ENV_PATH}" | grep "${image_variable}=" | cut --delimiter "=" --field 2) - test -n "${file_image_commit_id}" || { - echo "Couldn't retrieve commit id for image variable '${image_variable}' in '${COMMIT_ENV_PATH}'!" + test -n "${file_image_commit_id}" || test "${is_pipeline_runtime}" = "true" || { + echo "Couldn't retrieve commit id for image variable '${image_variable}' in '${COMMIT_ENV_PATH}' or '${COMMIT_LATEST_ENV_PATH}'!" return 1 } - test "${short_image_commit_id}" = "${file_image_commit_id}" || { + test "${short_image_commit_id}" = "${file_image_commit_id}" || test "${is_pipeline_runtime}" = "true" || { echo "Image commit IDs for image variable '${image_variable}' don't equal!" echo "Image commit ID gathered from image: '${short_image_commit_id}'" - echo "Image commit ID in '${COMMIT_ENV_PATH}': '${file_image_commit_id}'" + echo "Image commit ID in '${COMMIT_ENV_PATH}'or '${COMMIT_LATEST_ENV_PATH}': '${file_image_commit_id}'" return 1 } } @@ -407,66 +460,75 @@ function check_image() { ret_code=0 -echo "Starting check of image references in files: '${COMMIT_ENV_PATH}' and '${PARAMS_ENV_PATH}'" +echo "Starting check of image references in files: '${COMMIT_LATEST_ENV_PATH}', '${COMMIT_ENV_PATH}' , '${PARAMS_LATEST_ENV_PATH}' and '${PARAMS_ENV_PATH}'" echo "---------------------------------------------" -check_variables_uniq "${COMMIT_ENV_PATH}" "true" || { - echo "ERROR: Variable names in the '${COMMIT_ENV_PATH}' file failed validation!" +check_variables_uniq "${COMMIT_ENV_PATH}" "${COMMIT_LATEST_ENV_PATH}" "true" "false" || { + echo "ERROR: Variable names in the '${COMMIT_ENV_PATH}' & '${COMMIT_LATEST_ENV_PATH}' file failed validation!" echo "----------------------------------------------------" ret_code=1 } -check_variables_uniq "${PARAMS_ENV_PATH}" "false" || { - echo "ERROR: Variable names in the '${PARAMS_ENV_PATH}' file failed validation!" +check_variables_uniq "${PARAMS_ENV_PATH}" "${PARAMS_LATEST_ENV_PATH}" "false" "true" || { + echo "ERROR: Variable names in the '${PARAMS_ENV_PATH}' & '${PARAMS_LATEST_ENV_PATH}' file failed validation!" echo "----------------------------------------------------" ret_code=1 } -while IFS= read -r LINE; do - echo "Checking format of: '${LINE}'" - [[ "${LINE}" = *[[:space:]]* ]] && { - echo "ERROR: Line contains white-space and it shouldn't!" - echo "--------------------------------------------------" - ret_code=1 - continue - } - [[ "${LINE}" != *=* ]] && { - echo "ERROR: Line doesn't contain '=' and it should!" - echo "----------------------------------------------" - ret_code=1 - continue - } +process_file() { + local_ret_code=0 + while IFS= read -r LINE; do + echo "Checking format of: '${LINE}'" + [[ "${LINE}" = *[[:space:]]* ]] && { + echo "ERROR: Line contains white-space and it shouldn't!" + echo "--------------------------------------------------" + local_ret_code=1 + continue + } + [[ "${LINE}" != *=* ]] && { + echo "ERROR: Line doesn't contain '=' and it should!" + echo "----------------------------------------------" + local_ret_code=1 + continue + } - IMAGE_VARIABLE=$(echo "${LINE}" | cut --delimiter '=' --field 1) - IMAGE_URL=$(echo "${LINE}" | cut --delimiter '=' --field 2) + IMAGE_VARIABLE=$(echo "${LINE}" | cut --delimiter '=' --field 1) + IMAGE_URL=$(echo "${LINE}" | cut --delimiter '=' --field 2) - test -n "${IMAGE_VARIABLE}" || { - echo "ERROR: Couldn't parse image variable - got empty value!" - echo "-------------------------------------------------------" - ret_code=1 - continue - } + test -n "${IMAGE_VARIABLE}" || { + echo "ERROR: Couldn't parse image variable - got empty value!" + echo "-------------------------------------------------------" + local_ret_code=1 + continue + } - test -n "${IMAGE_URL}" || { - echo "ERROR: Couldn't parse image URL - got empty value!" - echo "--------------------------------------------------" - ret_code=1 - continue - } + test -n "${IMAGE_URL}" || { + echo "ERROR: Couldn't parse image URL - got empty value!" + echo "--------------------------------------------------" + local_ret_code=1 + continue + } + + check_image "${IMAGE_VARIABLE}" "${IMAGE_URL}" || { + echo "ERROR: Image definition for '${IMAGE_VARIABLE}' isn't okay!" + echo "------------------------" + local_ret_code=1 + continue + } + done < "${1}" + return "${local_ret_code}" +} - check_image "${IMAGE_VARIABLE}" "${IMAGE_URL}" || { - echo "ERROR: Image definition for '${IMAGE_VARIABLE}' isn't okay!" +for file_ in "${PARAMS_ENV_PATH}" "${PARAMS_LATEST_ENV_PATH}"; do + echo "Checking file: '${file_}'" + if process_file "${file_}" -eq 0; then + echo "Validation of '${file_}' was successful! Congrats :)" + echo "------------------------" + else + echo "The '${file_}' file isn't valid, please check above!" echo "------------------------" ret_code=1 - continue - } -done < "${PARAMS_ENV_PATH}" - -echo "" -if test "${ret_code}" -eq 0; then - echo "Validation of '${PARAMS_ENV_PATH}' was successful! Congrats :)" -else - echo "The '${PARAMS_ENV_PATH}' file isn't valid, please check above!" -fi + fi +done exit "${ret_code}" diff --git a/ci/check-runtime-images.sh b/ci/check-runtime-images.sh deleted file mode 100755 index 17505ea6bf..0000000000 --- a/ci/check-runtime-images.sh +++ /dev/null @@ -1,222 +0,0 @@ -#!/bin/bash -# -# This script serves to check and validate the definitions for runtime images. -# It does just a brief check of the metadata defined in the json file: -# 1. checks that given `.metadata.image_name` is valid and can be accessed by skopeo tool -# 2. checks that tag in `.metadata.tags[0]` can be found in the output from skopeo tool -# -# THIS FILE DOESN'T CHECK THAT THE USED LINK TO IMAGE IS THE LATEST ONE AVAILABLE! -# -# This script uses `skopeo` and `jq` tools installed locally for retrieving -# information about the particular remote images. -# -# Local execution: ./ci/check-runtime-image.sh -# Note: please execute from the root directory so that relative path matches -# -# In case of the PR on GitHub, this check is tied to GitHub actions automatically, -# see `.github/workflows` directory. - -# ---------------------------- DEFINED FUNCTIONS ----------------------------- # - -# Expected commit reference for the runtime images -EXPECTED_COMMIT_REF="main" - -# Number of attempts for the skopeo tool to gather data from the repository. -SKOPEO_RETRY=3 - -# Size change tresholds: -# Max percentual change -SIZE_PERCENTUAL_TRESHOLD=10 -# Max absolute change in MB -SIZE_ABSOLUTE_TRESHOLD=100 - -function check_image_size() { - local img_name="${1}" - local actual_img_size="${2}" - - local expected_img_size - - case "${img_name}" in - odh-notebook-runtime-datascience-ubi9-python-3.11) - expected_img_size=973 - ;; - odh-notebook-runtime-pytorch-ubi9-python-3.11) - expected_img_size=8530 - ;; - odh-notebook-runtime-rocm-pytorch-ubi9-python-3.11) - expected_img_size=7439 - ;; - odh-notebook-rocm-runtime-tensorflow-ubi9-python-3.11) - expected_img_size=6731 - ;; - odh-notebook-cuda-runtime-tensorflow-ubi9-python-3.11) - expected_img_size=7992 - ;; - odh-notebook-runtime-minimal-ubi9-python-3.11) - expected_img_size=589 - ;; - *) - echo "Unimplemented image name: '${img_name}'" - return 1 - esac - - # Check the size change constraints now - if test -z "${expected_img_size}" || test "${expected_img_size}" -eq 0; then - echo "Expected image size is undefined or empty, please check the pre-defined values!" - return 1 - fi - - # 1. Percentual size change - percent_change=$((100 * actual_img_size / expected_img_size - 100)) - abs_percent_change=${percent_change#-*} - test ${abs_percent_change} -le ${SIZE_PERCENTUAL_TRESHOLD} || { - echo "Image size changed by ${abs_percent_change}% (expected: ${expected_img_size} MB; actual: ${actual_img_size} MB; treshold: ${SIZE_PERCENTUAL_TRESHOLD}%)." - return 1 - } - # 2. Absolute size change - size_difference=$((actual_img_size - expected_img_size)) - abs_size_difference=${size_difference#-*} - test ${abs_size_difference} -le ${SIZE_ABSOLUTE_TRESHOLD} || { - echo "Image size changed by ${abs_size_difference} MB (expected: ${expected_img_size} MB; actual: ${actual_img_size} MB; treshold: ${SIZE_ABSOLUTE_TRESHOLD} MB)." - return 1 - } -} - -function check_image() { - local runtime_image_file="${1}" - - echo "---------------------------------------------" - echo "Checking file: '${runtime_image_file}'" - - local runtime_image_metadata - local img_tag - local img_url - local img_metadata_config - local img_created - local img_commit_ref - local img_name - - runtime_image_metadata=$(yq -r '.spec.tags[0].annotations."opendatahub.io/runtime-image-metadata"' "${runtime_image_file}") || { - echo "ERROR: Couldn't parse runtime image metadata for '${runtime_image_file}' file!" - return 1 - } - echo "Runtime image metadata: '${runtime_image_metadata}'" - - # There are 2 places in the current runtime imagestreams where the image url is saved today. - img_url_from=$(yq -r '.spec.tags[0].from.name' "${runtime_image_file}") || { - echo "ERROR: Couldn't parse image URL from '.spec.tags[0].from.name' field for '${runtime_image_file}' file!" - return 1 - } - echo "Image URL from '.spec.tags[0].from.name' field: '${img_url_from}'" - - img_tag=$(echo "${runtime_image_metadata}" | jq -r '.[0].metadata.tags[0]') || { - echo "ERROR: Couldn't parse image tags metadata for '${runtime_image_file}' runtime image file!" - return 1 - } - echo "Image tag: '${img_tag}'" - - img_url=$(echo "${runtime_image_metadata}" | jq -r '.[0].metadata.image_name') || { - echo "ERROR: Couldn't parse image URL from image JSON metadata for '${runtime_image_file}' runtime image file!" - return 1 - } - echo "Image URL from JSON metadata: '${img_url}'" - - test "${img_url_from}" == "${img_url}" || { - echo "ERROR: The image URL in '.spec.tags[0].from.name' doesn't match what is provide in JSON metadata in '${runtime_image_file}' runtime image file!" - return 1 - } - - img_metadata_config="$(skopeo inspect --retry-times "${SKOPEO_RETRY}" --config "docker://${img_url}")" || { - echo "ERROR: Couldn't download '${img_url}' image config metadata with skopeo tool!" - return 1 - } - - img_created=$(echo "${img_metadata_config}" | jq --raw-output '.created') || { - echo "Couldn't parse '.created' from image metadata!" - return 1 - } - echo "Image created: '${img_created}'" - - img_commit_ref=$(echo "${img_metadata_config}" | jq --raw-output '.config.Labels."io.openshift.build.commit.ref"') || { - echo "Couldn't parse '.Labels."io.openshift.build.commit.ref"' from image metadata!" - return 1 - } - echo "Image commit ref: '${img_commit_ref}'" - - img_name=$(echo "${img_metadata_config}" | jq --raw-output '.config.Labels.name') || { - echo "Couldn't parse '.Labels.name' from image metadata!" - return 1 - } - echo "Image name: '${img_name}'" - - local expected_string="runtime-${img_tag}-ubi" - # workaround as we have a mismatch in the naming in the dockerfile: - # https://github.com/opendatahub-io/notebooks/blob/6d0d410abfcf91b42962acce15fe2c80d056912d/runtimes/rocm-tensorflow/ubi9-python-3.11/Dockerfile.rocm#L67 - if test "${expected_string}" == "runtime-rocm-tensorflow-ubi"; then - expected_string="rocm-runtime-tensorflow-ubi" - fi - echo "Checking that '${expected_string}' is present in the image metadata" - echo "${img_metadata_config}" | grep --quiet "${expected_string}" || { - echo "ERROR: The string '${expected_string}' isn't present in the image metadata at all. Please check that the referenced image '${img_url}' is the correct one!" - return 1 - } - - test "${EXPECTED_COMMIT_REF}" == "${img_commit_ref}" || { - echo "ERROR: The image 'io.openshift.build.commit.ref' label is '${img_commit_ref}' but should be '${EXPECTED_COMMIT_REF}' instead!" - return 1 - } - - local img_metadata - local img_size - local img_size_mb - - img_metadata="$(skopeo inspect --retry-times "${SKOPEO_RETRY}" --raw "docker://${img_url}")" || { - echo "ERROR: Couldn't download '${img_url}' image metadata with skopeo tool!" - return 1 - } - # Here we get the image size as a compressed image. This differs to what we gather in - # 'tests/containers/base_image_test.py#test_image_size_change' where we check against the extracted image size. - # There is no actual reason to compare these different sizes except that in this case we want to do check the - # image remotely, whereas in the othe test, we have the image present locally on the machine. - img_size=$(echo "${img_metadata}" | jq '[ .layers[].size ] | add') || { - echo "Couldn't count image size from image metadata!" - return 1 - } - img_size_mb=$((img_size / 1024 / 1024)) || { - echo "Couldn't count image size from image metadata!" - return 1 - } - echo "Image size: ${img_size_mb} MB" - - check_image_size "${img_name}" "${img_size_mb}" || return 1 -} - -function main() { - ret_code=0 - - runtime_image_files=$(find . -name "*imagestream.yaml" | grep "runtime" | sort --unique) - - IFS=$'\n' - for file in ${runtime_image_files}; do - check_image "${file}" || { - echo "ERROR: Check for '${file}' failed!" - ret_code=1 - } - done - - echo "---------------------------------------------" - echo "" - if test "${ret_code}" -eq 0; then - echo "Validation of runtime images definitions was successful! Congrats :)" - else - echo "ERROR: Some of the runtime image definitions aren't valid, please check above!" - fi - - return "${ret_code}" -} - -# ------------------------------ MAIN SCRIPT --------------------------------- # - -main - -exit "${?}" diff --git a/ci/check-software-versions.py b/ci/check-software-versions.py index b1886f0e90..13f26a687a 100755 --- a/ci/check-software-versions.py +++ b/ci/check-software-versions.py @@ -22,6 +22,7 @@ import yaml # Path to the file with image references to the image registry +PARAMS_LATEST_ENV_PATH = "manifests/base/params-latest.env" PARAMS_ENV_PATH = "manifests/base/params.env" @@ -64,16 +65,20 @@ def load_yaml(filepath): def extract_variable(reference): - """Extracts a variable name from a string (e.g.: 'odh-rstudio-notebook-image-commit-n-1_PLACEHOLDER') using regex.""" + """Extracts a variable name from a string (e.g.: 'odh-workbench-rstudio-minimal-cpu-py311-c9s-commit-n-1_PLACEHOLDER') using regex.""" return reference.replace("_PLACEHOLDER", "") -def get_variable_value(variable_name, params_file_path=PARAMS_ENV_PATH): +def get_variable_value(variable_name, params_file_path=[PARAMS_LATEST_ENV_PATH, PARAMS_ENV_PATH]): """Retrieves the value of a variable from a parameters file.""" try: - with open(params_file_path, "r") as params_file: + with open(params_file_path[0], "r") as params_file: + for line in params_file: + if variable_name in line: + return line.split("=")[1].strip() + with open(params_file_path[1], "r") as params_file: for line in params_file: if variable_name in line: return line.split("=")[1].strip() diff --git a/ci/package_versions_selftestdata.py b/ci/package_versions_selftestdata.py index c2531edb90..426bbfbae9 100644 --- a/ci/package_versions_selftestdata.py +++ b/ci/package_versions_selftestdata.py @@ -30,10 +30,10 @@ openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' opendatahub.io/default-image: "true" - opendatahub.io/notebook-build-commit: odh-minimal-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-minimal-cpu-py311-ubi9-commit-n_PLACEHOLDER from: kind: DockerImage - name: $(odh-minimal-notebook-image-n) + name: $(odh-workbench-jupyter-minimal-cpu-py311-ubi9-n) name: "2024.2" referencePolicy: type: Source @@ -53,10 +53,10 @@ openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' opendatahub.io/default-image: "true" - opendatahub.io/notebook-build-commit: odh-minimal-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-minimal-cpu-py311-ubi9-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: $(odh-minimal-notebook-image-n-1) + name: $(odh-workbench-jupyter-minimal-cpu-py311-ubi9-n-1) name: "2024.1" referencePolicy: type: Source diff --git a/ci/security-scan/quay_security_analysis.py b/ci/security-scan/quay_security_analysis.py index 06e0d0d09a..9e954b445b 100644 --- a/ci/security-scan/quay_security_analysis.py +++ b/ci/security-scan/quay_security_analysis.py @@ -26,35 +26,35 @@ ] IMAGES = [ - "odh-minimal-notebook-image-n", + "odh-workbench-jupyter-minimal-cpu-py311-ubi9-n", "odh-runtime-minimal-notebook-image-n", "odh-runtime-data-science-notebook-image-n", - "odh-minimal-gpu-notebook-image-n", - "odh-pytorch-gpu-notebook-image-n", + "odh-workbench-jupyter-minimal-cuda-py311-ubi9-n", + "odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n", "odh-runtime-pytorch-notebook-image-n", - "odh-generic-data-science-notebook-image-n", - "odh-tensorflow-gpu-notebook-image-n", + "odh-workbench-jupyter-datascience-cpu-py311-ubi9-n", + "odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n", "odh-runtime-tensorflow-notebook-image-n", - "odh-trustyai-notebook-image-n", - "odh-codeserver-notebook-image-n", - "odh-rstudio-notebook-image-n", - "odh-rstudio-gpu-notebook-image-n", + "odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n", + "odh-workbench-codeserver-datascience-cpu-py311-ubi9-n", + "odh-workbench-rstudio-minimal-cpu-py311-c9s-n", + "odh-workbench-rstudio-minimal-cuda-py311-c9s-n", ] IMAGES_N_1 = [ - "odh-minimal-notebook-image-n-1", + "odh-workbench-jupyter-minimal-cpu-py311-ubi9-n-1", "odh-runtime-minimal-notebook-image-n-1", - "odh-minimal-gpu-notebook-image-n-1", - "odh-pytorch-gpu-notebook-image-n-1", + "odh-workbench-jupyter-minimal-cuda-py311-ubi9-n-1", + "odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n-1", "odh-runtime-pytorch-notebook-image-n-1", "odh-runtime-data-science-notebook-image-n-1", - "odh-generic-data-science-notebook-image-n-1", - "odh-tensorflow-gpu-notebook-image-n-1", + "odh-workbench-jupyter-datascience-cpu-py311-ubi9-n-1", + "odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n-1", "odh-runtime-tensorflow-notebook-image-n-1", - "odh-trustyai-notebook-image-n-1", - "odh-codeserver-notebook-image-n-1", - "odh-rstudio-notebook-image-n-1", - "odh-rstudio-gpu-notebook-image-n-1", + "odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n-1", + "odh-workbench-codeserver-datascience-cpu-py311-ubi9-n-1", + "odh-workbench-rstudio-minimal-cpu-py311-c9s-n-1", + "odh-workbench-rstudio-minimal-cuda-py311-c9s-n-1", ] diff --git a/ci/security-scan/weekly_commit_ids.env b/ci/security-scan/weekly_commit_ids.env index 91cf54e771..609efc188f 100644 --- a/ci/security-scan/weekly_commit_ids.env +++ b/ci/security-scan/weekly_commit_ids.env @@ -1,30 +1,30 @@ odh-minimal-notebook-image-main=quay.io/opendatahub/workbench-images@sha256:e9d6a6ee0e1ce6878d3a00dd9ffe85ffb536298ce1fe4d9c577ba0159c69a7f3 -odh-minimal-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:cde20ac445d25c70d95042a546334c398ed3fca73e85530f0ffef3cbdb6ec746 -odh-minimal-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:9323e689ec6ab1abb3cbdfd6258811bd57376c6b3e48f71838408cbb0b8b24a3 +odh-workbench-jupyter-minimal-cpu-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:cde20ac445d25c70d95042a546334c398ed3fca73e85530f0ffef3cbdb6ec746 +odh-workbench-jupyter-minimal-cpu-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:9323e689ec6ab1abb3cbdfd6258811bd57376c6b3e48f71838408cbb0b8b24a3 odh-minimal-gpu-notebook-image-main=quay.io/opendatahub/workbench-images@sha256:07770e7eba2145309eed705261e3e295c53a05912a822bf8a64b4d284cfb79ca -odh-minimal-gpu-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:0f2f49da81f12f900579f5ccf0f1990e2ea94a2c1a2b8848dce6f9e9d2dd6d6f -odh-minimal-gpu-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:96d9273857b1ba7bb3428fc78d283e32196a0476b5fce25ed6ebf89e965b09f7 +odh-workbench-jupyter-minimal-cuda-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:0f2f49da81f12f900579f5ccf0f1990e2ea94a2c1a2b8848dce6f9e9d2dd6d6f +odh-workbench-jupyter-minimal-cuda-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:96d9273857b1ba7bb3428fc78d283e32196a0476b5fce25ed6ebf89e965b09f7 odh-pytorch-gpu-notebook-image-main=quay.io/opendatahub/workbench-images@sha256:26238198f397dca96b72015dc25bd7fe4969bb00eb4d4cff718a32c3d8fda3fc -odh-pytorch-gpu-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:3881889e511bde525d560b7dbbd655ea7586d7bed89502d1a4ce55ac24866ab1 -odh-pytorch-gpu-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:cf24bd469c283aeeeffa4ff3771ee10219f4446c4afef5f9d4c6c84c54bd81ce +odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:3881889e511bde525d560b7dbbd655ea7586d7bed89502d1a4ce55ac24866ab1 +odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:cf24bd469c283aeeeffa4ff3771ee10219f4446c4afef5f9d4c6c84c54bd81ce odh-generic-data-science-notebook-image-main=quay.io/opendatahub/workbench-images@sha256:702694adc61071f93c8705de61badcbecc9e248af0041f8d59fca748b6a10d8d -odh-generic-data-science-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:57d8e32ac014dc39d1912577e2decff1b10bb2f06f4293c963e687687a580b05 -odh-generic-data-science-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:306084cb5de139bc01f1b72e7fd23ff3db89318094980309af6ca4103b84888f +odh-workbench-jupyter-datascience-cpu-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:57d8e32ac014dc39d1912577e2decff1b10bb2f06f4293c963e687687a580b05 +odh-workbench-jupyter-datascience-cpu-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:306084cb5de139bc01f1b72e7fd23ff3db89318094980309af6ca4103b84888f odh-tensorflow-gpu-notebook-image-main=quay.io/opendatahub/workbench-images@sha256:c12649d2405504afaef2c338600ac5d38a3ae104a790a9e119f61e80dfae0fad -odh-tensorflow-gpu-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:d87c30a4c41d189f24273953c60536d9a710d407289733ccc809a4f5e1549bd0 -odh-tensorflow-gpu-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:cd6d8830a2f49dff70ece1686a6f17508681a850bacde4c757d497cbc59827ef +odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:d87c30a4c41d189f24273953c60536d9a710d407289733ccc809a4f5e1549bd0 +odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:cd6d8830a2f49dff70ece1686a6f17508681a850bacde4c757d497cbc59827ef odh-trustyai-notebook-image-main=quay.io/opendatahub/workbench-images@sha256:276f3b67b62555d746de208976d596759ccac8bd26660900c2e7185380fe043d -odh-trustyai-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:bf2087d3a1859f3bb9cd3d4636ad1507bc4b1c44f0e12aa2f95e9d50e6f8d6eb -odh-trustyai-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:5b5bae7a11f2e34b67726a86d24b8f2c35c701a48d80abbdbc91030033d2fc1f +odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:bf2087d3a1859f3bb9cd3d4636ad1507bc4b1c44f0e12aa2f95e9d50e6f8d6eb +odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:5b5bae7a11f2e34b67726a86d24b8f2c35c701a48d80abbdbc91030033d2fc1f odh-codeserver-notebook-image-main=quay.io/opendatahub/workbench-images@sha256:2797380eaf0f05d6002e9fbb41a6a8b5368b658230ba46b07341c9c96797f591 -odh-codeserver-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:1c5bcbfc222dfb59849fee67e050719c688c93d3608f7b46edbe5666263641f3 -odh-codeserver-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:fd5b9f65c0f46d4c093e2f58fce305eeb125bf19ee1d88f67b9fafe56142e92d +odh-workbench-codeserver-datascience-cpu-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:1c5bcbfc222dfb59849fee67e050719c688c93d3608f7b46edbe5666263641f3 +odh-workbench-codeserver-datascience-cpu-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:fd5b9f65c0f46d4c093e2f58fce305eeb125bf19ee1d88f67b9fafe56142e92d odh-rstudio-notebook-image-main=quay.io/opendatahub/workbench-images@sha256:cffcf81ca0dba140d3dfc5ab452eebd6db92e55da5bdfbe3f931661489a8a596 -odh-rstudio-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:8e99e4e3800db121d02b50adec5eba27746bf89d32dba3e2b17e8d750ac53608 -odh-rstudio-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:75d6764e1155c1d18dc4472ff319f9291d0d9703b19ee1374e902b6ab7f55cfb +odh-workbench-rstudio-minimal-cpu-py311-c9s-n=quay.io/opendatahub/workbench-images@sha256:8e99e4e3800db121d02b50adec5eba27746bf89d32dba3e2b17e8d750ac53608 +odh-workbench-rstudio-minimal-cpu-py311-c9s-n-1=quay.io/opendatahub/workbench-images@sha256:75d6764e1155c1d18dc4472ff319f9291d0d9703b19ee1374e902b6ab7f55cfb odh-rstudio-gpu-notebook-image-main=quay.io/opendatahub/workbench-images@sha256:41d07177990519db629796f743b6dcb663bc8090e4c8248348f746b2fa4f7dbb -odh-rstudio-gpu-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:3ad0bb5f3b8c2ca1d29a423913b6d8f32353d9787c5f38e4b56a9a922f6e3cdd -odh-rstudio-gpu-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:aef5fd12264651abf286e9a4efbe25ca002cc257fbc6f1a5daf39fd55c7d6206 +odh-workbench-rstudio-minimal-cuda-py311-c9s-n=quay.io/opendatahub/workbench-images@sha256:3ad0bb5f3b8c2ca1d29a423913b6d8f32353d9787c5f38e4b56a9a922f6e3cdd +odh-workbench-rstudio-minimal-cuda-py311-c9s-n-1=quay.io/opendatahub/workbench-images@sha256:aef5fd12264651abf286e9a4efbe25ca002cc257fbc6f1a5daf39fd55c7d6206 odh-runtime-minimal-notebook-image-main=quay.io/opendatahub/workbench-images@sha256:b02d8970449a48362a9f54ea563692b8d4c0e9f1f689ea1cf6bd2da18538a421 odh-runtime-minimal-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:91224cde193645c231e454bdcc25ab1aa40dd7c7bc466c87baffa8c03f5e3128 odh-runtime-minimal-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:41dd881199fd93ffccc4f00c16a69ad16f27f1e4877373ad96ff7a94b9564972 diff --git a/ci/sha-digest-updater.sh b/ci/sha-digest-updater.sh old mode 100644 new mode 100755 index 3dd128faa1..5916f1f2a6 --- a/ci/sha-digest-updater.sh +++ b/ci/sha-digest-updater.sh @@ -38,7 +38,7 @@ fetch_latest_hash() { update_image_commit() { local image_name="$1" local hash="$2" - local commit_env_path="$REPO_ROOT/manifests/base/commit.env" + local commit_env_path="$REPO_ROOT/manifests/base/commit-latest.env" # Convert image name to match with commit variable name commit_var=$(echo "$image_name" | sed 's/-n$/-commit-n/') @@ -46,76 +46,77 @@ update_image_commit() { sed -i "s|^${commit_var}=.*|${commit_var}=${hash}|" "$commit_env_path" } +# TODO: REMOVE THIS FUNCTION, NO-LONGER NEEDED # Function to process runtime images -update_runtime_images() { - MANIFEST_DIR="$REPO_ROOT/manifests/base" - # Find matching files - files=$(find "$MANIFEST_DIR" -type f -name "runtime-*.yaml") - for file in $files; do - echo "PROCESSING: $file" - - # Extract values - img=$(yq e '.spec.tags[].annotations."opendatahub.io/runtime-image-metadata" | fromjson | .[].metadata.image_name' "$file" 2>/dev/null) - name=$(yq e '.spec.tags[].name' "$file" 2>/dev/null) - ubi=$(yq e '.metadata.annotations."opendatahub.io/runtime-image-name"' "$file" 2>/dev/null | grep -oE 'UBI[0-9]+' | tr '[:upper:]' '[:lower:]') - py_version=$(yq e '.metadata.annotations."opendatahub.io/runtime-image-name"' "$file" 2>/dev/null | grep -oE 'Python [0-9]+\.[0-9]+' | sed 's/ /-/g' | tr '[:upper:]' '[:lower:]') - registry=$(echo "$img" | cut -d '@' -f1) - - # Handling specific cases - if [[ $name == tensorflow || $name == pytorch ]]; then - name="cuda-$name" - elif [[ $name == ubi ]]; then - name="minimal-$name" - elif [[ $name == rocm-pytorch ]]; then - name="${name/rocm-pytorch/rocm-runtime-pytorch}" - elif [[ $name == rocm-tensorflow ]]; then - name="${name/rocm-tensorflow/rocm-runtime-tensorflow}" - fi - - # Construct regex pattern - prefix="runtime-" - [[ $name == rocm-* ]] && prefix="" - regex="^${prefix}$name-$ubi-$py_version-[0-9]{8}-$HASH$" - - latest_tag=$(skopeo inspect --retry-times 3 "docker://$img" | jq -r --arg regex "$regex" '.RepoTags | map(select(. | test($regex))) | .[0]') - echo "CHECKING: ${latest_tag}" - - # Check for latest_tag validity (maybe the new image is not yet built) - if [[ -z "$latest_tag" || "$latest_tag" == "null" ]]; then - echo "No matching tag found on registry for $file. Skipping." - # Get relative path from REPO_ROOT/ci to the file - relative_path=$(echo "$file" | sed "s|$REPO_ROOT/||") - # calls log_skipped_image funtion from image-skipping-logger.sh script - log_skipped_image "../$relative_path" - continue - fi - - # Extract the digest sha from the latest tag - digest=$(skopeo inspect --retry-times 3 "docker://$registry:$latest_tag" | jq .Digest | tr -d '"') - - # Check for digest validity - if [[ -z "$digest" || "$digest" == "null" ]]; then - echo "Failed to get digest for $latest_tag. Skipping." - # Get relative path from REPO_ROOT/ci to the file - relative_path=$(echo "$file" | sed "s|$REPO_ROOT/||") - # calls log_skipped_image funtion from image-skipping-logger.sh script - log_skipped_image "../$relative_path" - continue - fi - - output="${registry}@${digest}" - echo "NEW: ${output}" - - # Updates the ImageStream with the new SHAs - yq e -i '(.spec.tags[] | .from.name) = "'"$output"'"' "$file" - sed -i "s|\(\"image_name\": \"\)[^\"]*|\1${output}|" "$file" - - done -} +# update_runtime_images() { +# MANIFEST_DIR="$REPO_ROOT/manifests/base" +# # Find matching files +# files=$(find "$MANIFEST_DIR" -type f -name "runtime-*.yaml") +# for file in $files; do +# echo "PROCESSING: $file" + +# # Extract values +# img=$(yq e '.spec.tags[].annotations."opendatahub.io/runtime-image-metadata" | fromjson | .[].metadata.image_name' "$file" 2>/dev/null) +# name=$(yq e '.spec.tags[].name' "$file" 2>/dev/null) +# ubi=$(yq e '.metadata.annotations."opendatahub.io/runtime-image-name"' "$file" 2>/dev/null | grep -oE 'UBI[0-9]+' | tr '[:upper:]' '[:lower:]') +# py_version=$(yq e '.metadata.annotations."opendatahub.io/runtime-image-name"' "$file" 2>/dev/null | grep -oE 'Python [0-9]+\.[0-9]+' | sed 's/ /-/g' | tr '[:upper:]' '[:lower:]') +# registry=$(echo "$img" | cut -d '@' -f1) + +# # Handling specific cases +# if [[ $name == tensorflow || $name == pytorch ]]; then +# name="cuda-$name" +# elif [[ $name == ubi ]]; then +# name="minimal-$name" +# elif [[ $name == rocm-pytorch ]]; then +# name="${name/rocm-pytorch/rocm-runtime-pytorch}" +# elif [[ $name == rocm-tensorflow ]]; then +# name="${name/rocm-tensorflow/rocm-runtime-tensorflow}" +# fi + +# # Construct regex pattern +# prefix="runtime-" +# [[ $name == rocm-* ]] && prefix="" +# regex="^${prefix}$name-$ubi-$py_version-[0-9]{8}-$HASH$" + +# latest_tag=$(skopeo inspect --retry-times 3 "docker://$img" | jq -r --arg regex "$regex" '.RepoTags | map(select(. | test($regex))) | .[0]') +# echo "CHECKING: ${latest_tag}" + +# # Check for latest_tag validity (maybe the new image is not yet built) +# if [[ -z "$latest_tag" || "$latest_tag" == "null" ]]; then +# echo "No matching tag found on registry for $file. Skipping." +# # Get relative path from REPO_ROOT/ci to the file +# relative_path=$(echo "$file" | sed "s|$REPO_ROOT/||") +# # calls log_skipped_image funtion from image-skipping-logger.sh script +# log_skipped_image "../$relative_path" +# continue +# fi + +# # Extract the digest sha from the latest tag +# digest=$(skopeo inspect --retry-times 3 "docker://$registry:$latest_tag" | jq .Digest | tr -d '"') + +# # Check for digest validity +# if [[ -z "$digest" || "$digest" == "null" ]]; then +# echo "Failed to get digest for $latest_tag. Skipping." +# # Get relative path from REPO_ROOT/ci to the file +# relative_path=$(echo "$file" | sed "s|$REPO_ROOT/||") +# # calls log_skipped_image funtion from image-skipping-logger.sh script +# log_skipped_image "../$relative_path" +# continue +# fi + +# output="${registry}@${digest}" +# echo "NEW: ${output}" + +# # Updates the ImageStream with the new SHAs +# yq e -i '(.spec.tags[] | .from.name) = "'"$output"'"' "$file" +# sed -i "s|\(\"image_name\": \"\)[^\"]*|\1${output}|" "$file" + +# done +# } init_skipped_log -PARAMS_ENV_PATH="$REPO_ROOT/manifests/base/params.env" +PARAMS_ENV_PATH="$REPO_ROOT/manifests/base/params-latest.env" # In case the digest updater function is triggered upstream. if [[ "$REPO_OWNER" == "opendatahub-io" ]]; then @@ -160,7 +161,6 @@ if [[ "$REPO_OWNER" == "opendatahub-io" ]]; then sed -i "s|${image}=.*|${image}=${output}|" "${PARAMS_ENV_PATH}" update_image_commit "$image" "$HASH" done - update_runtime_images # In case the digest updater function is triggered downstream. elif [[ "$REPO_OWNER" == "red-hat-data-services" ]]; then @@ -212,7 +212,6 @@ elif [[ "$REPO_OWNER" == "red-hat-data-services" ]]; then update_image_commit "$image" "$HASH" i=$((i+1)) done - update_runtime_images else echo "This script runs exclusively for the 'opendatahub-io' and 'red-hat-datascience' organizations, as it verifies/updates their corresponding quay.io registries." diff --git a/docs/workbenches-naming.md b/docs/workbenches-naming.md new file mode 100644 index 0000000000..26e8d271f0 --- /dev/null +++ b/docs/workbenches-naming.md @@ -0,0 +1,66 @@ +# Workbench Naming + +The following pattern is designed and would be used for future IDE workbench content: + +Workbench Image name schema: + +``` +odh------ +``` + +- Image prefix: odh +- Image type: workbench, pipeline +- Image feature: + - jupyter + - codeserver + - rstudio + - runtime +- Image scope: + - minimal + - datascience + - tensorflow + - pytorch + - trustyai +- Accelerator: cpu, cuda, rocm +- Python version: 3.11, 3.9, ?3.12 +- Image suffix: rhel8, rhel9 + - Community: ubi9, ubi8, c8s , c9s + +#### Examples: + +Standards example: + +* odh-workbench-jupyter-minimal-cuda-py311-rhel9 +* odh-workbench-jupyter-minimal-cpu-py311-rhel9 +* odh-workbench-jupyter-minimal-cpu-py312-rhel9 +* odh-workbench-codeserver-datascience-cpu-py311-rhel9 +* odh-workbench-rstudio-minimal-cuda-py311-rhel9 +* odh-pipeline-runtime-minimal-cpu-py311-rhel9 + + + +_Motivation_: +Based on: https://issues.redhat.com/browse/RHOAIENG-21539 +Image Name: Short and meaningful name of the image that will be used for creating build/delivery repositories for the image. The image name must be prefixed with "odh-" and suffixed with the RHEL version (like so: -rhel7, -rhel8). + +### Previous Pattern + +The workbench image name convention in RHOAI for IDE content was not structured and changed on different image scopes. +Format: _image_name:tag_ +Example: + +- Image: + - name: odh-pytorch-notebook + - tag :v3-20250418-c0fa3b2 +- Image: + - name: runtime-images + - tag: rocm-runtime-tensorflow-ubi9-python-3.11-20250418-c0fa3b2 + +## Split of params + +Konflux would be help with build of workbenches. Konflux patch the sha of the built image into params file as a process of nudging. +To keep this file not getting overriden, we have split the params file into 2 files. +- params-latest.env: Any workbench images that represent the image version N (the latest one). +- params.env: Rest of the workbench images that represent the n-1 and extras. + +Note: This same case is followed for commit.env as well. \ No newline at end of file diff --git a/manifests/base/README.md b/manifests/base/README.md index 5b675b966a..0bb50bbb67 100644 --- a/manifests/base/README.md +++ b/manifests/base/README.md @@ -16,4 +16,15 @@ Listing the order in which each imagestreams are introduced. 13. jupyter-rocm-tensorflow-notebook-imagestream.yaml The order would also be same as `opendatahub.io/notebook-image-order` listed in each imagestreams. -*Note*: On deprecation/removal of imagestream, the index of that image is retired with it. \ No newline at end of file +_Note_: On deprecation/removal of imagestream, the index of that image is retired with it. + +## Params file + +Please read workbench-naming for the name convention to follow in params.env. +[Workbench Naming](../../docs/workbenches-naming.md) + +- params-latest.env: This file contains references to latest versions of workbench images that are updated by konflux nudges. +- params.env: This file contains references to older versions of workbench images. + +Image names follow the established IDE format: +`odh------` diff --git a/manifests/base/code-server-notebook-imagestream.yaml b/manifests/base/code-server-notebook-imagestream.yaml index 4a854bf67f..c8cd2372b2 100644 --- a/manifests/base/code-server-notebook-imagestream.yaml +++ b/manifests/base/code-server-notebook-imagestream.yaml @@ -38,10 +38,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' - opendatahub.io/notebook-build-commit: odh-codeserver-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-codeserver-datascience-cpu-py311-ubi9-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-codeserver-notebook-image-n_PLACEHOLDER + name: odh-workbench-codeserver-datascience-cpu-py311-ubi9-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -69,10 +69,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' - opendatahub.io/notebook-build-commit: odh-codeserver-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-codeserver-datascience-cpu-py311-ubi9-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-codeserver-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-codeserver-datascience-cpu-py311-ubi9-n-1_PLACEHOLDER name: "2024.2" referencePolicy: type: Source diff --git a/manifests/base/commit-latest.env b/manifests/base/commit-latest.env new file mode 100644 index 0000000000..845a74cc2e --- /dev/null +++ b/manifests/base/commit-latest.env @@ -0,0 +1,12 @@ +odh-workbench-jupyter-minimal-cpu-py311-ubi9-commit-n=b38759a +odh-workbench-jupyter-minimal-cuda-py311-ubi9-commit-n=b38759a +odh-workbench-jupyter-pytorch-cuda-py311-ubi9-commit-n=b38759a +odh-workbench-jupyter-datascience-cpu-py311-ubi9-commit-n=b38759a +odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-commit-n=b38759a +odh-workbench-jupyter-trustyai-cpu-py311-ubi9-commit-n=b38759a +odh-workbench-codeserver-datascience-cpu-py311-ubi9-commit-n=b38759a +odh-workbench-rstudio-minimal-cpu-py311-c9s-commit-n=b38759a +odh-workbench-rstudio-minimal-cuda-py311-c9s-commit-n=b38759a +odh-workbench-jupyter-minimal-rocm-py311-ubi9-commit-n=b38759a +odh-workbench-jupyter-pytorch-rocm-py311-ubi9-commit-n=b38759a +odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-commit-n=b38759a diff --git a/manifests/base/commit.env b/manifests/base/commit.env index 98d9fa73d5..ff271cee64 100644 --- a/manifests/base/commit.env +++ b/manifests/base/commit.env @@ -1,24 +1,12 @@ -odh-minimal-notebook-image-commit-n=b38759a -odh-minimal-notebook-image-commit-n-1=60b6ecc -odh-minimal-gpu-notebook-image-commit-n=b38759a -odh-minimal-gpu-notebook-image-commit-n-1=60b6ecc -odh-pytorch-gpu-notebook-image-commit-n=b38759a -odh-pytorch-gpu-notebook-image-commit-n-1=60b6ecc -odh-generic-data-science-notebook-image-commit-n=b38759a -odh-generic-data-science-notebook-image-commit-n-1=60b6ecc -odh-tensorflow-gpu-notebook-image-commit-n=b38759a -odh-tensorflow-gpu-notebook-image-commit-n-1=60b6ecc -odh-trustyai-notebook-image-commit-n=b38759a -odh-trustyai-notebook-image-commit-n-1=60b6ecc -odh-codeserver-notebook-image-commit-n=b38759a -odh-codeserver-notebook-image-commit-n-1=60b6ecc -odh-rstudio-notebook-image-commit-n=b38759a -odh-rstudio-notebook-image-commit-n-1=60b6ecc -odh-rstudio-gpu-notebook-image-commit-n=b38759a -odh-rstudio-gpu-notebook-image-commit-n-1=60b6ecc -odh-rocm-minimal-notebook-image-commit-n=b38759a -odh-rocm-minimal-notebook-image-commit-n-1=60b6ecc -odh-rocm-pytorch-notebook-image-commit-n=b38759a -odh-rocm-pytorch-notebook-image-commit-n-1=60b6ecc -odh-rocm-tensorflow-notebook-image-commit-n=b38759a -odh-rocm-tensorflow-notebook-image-commit-n-1=60b6ecc +odh-workbench-jupyter-minimal-cpu-py311-ubi9-commit-n-1=60b6ecc +odh-workbench-jupyter-minimal-cuda-py311-ubi9-commit-n-1=60b6ecc +odh-workbench-jupyter-pytorch-cuda-py311-ubi9-commit-n-1=60b6ecc +odh-workbench-jupyter-datascience-cpu-py311-ubi9-commit-n-1=60b6ecc +odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-commit-n-1=60b6ecc +odh-workbench-jupyter-trustyai-cpu-py311-ubi9-commit-n-1=60b6ecc +odh-workbench-codeserver-datascience-cpu-py311-ubi9-commit-n-1=60b6ecc +odh-workbench-rstudio-minimal-cpu-py311-c9s-commit-n-1=60b6ecc +odh-workbench-rstudio-minimal-cuda-py311-c9s-commit-n-1=60b6ecc +odh-workbench-jupyter-minimal-rocm-py311-ubi9-commit-n-1=60b6ecc +odh-workbench-jupyter-pytorch-rocm-py311-ubi9-commit-n-1=60b6ecc +odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-commit-n-1=60b6ecc diff --git a/manifests/base/jupyter-datascience-notebook-imagestream.yaml b/manifests/base/jupyter-datascience-notebook-imagestream.yaml index ba6a0428bb..3821ae4102 100644 --- a/manifests/base/jupyter-datascience-notebook-imagestream.yaml +++ b/manifests/base/jupyter-datascience-notebook-imagestream.yaml @@ -44,10 +44,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' - opendatahub.io/notebook-build-commit: odh-generic-data-science-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-datascience-cpu-py311-ubi9-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-generic-data-science-notebook-image-n_PLACEHOLDER + name: odh-workbench-jupyter-datascience-cpu-py311-ubi9-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -81,10 +81,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' - opendatahub.io/notebook-build-commit: odh-generic-data-science-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-datascience-cpu-py311-ubi9-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-generic-data-science-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-jupyter-datascience-cpu-py311-ubi9-n-1_PLACEHOLDER name: "2024.2" referencePolicy: type: Source diff --git a/manifests/base/jupyter-minimal-gpu-notebook-imagestream.yaml b/manifests/base/jupyter-minimal-gpu-notebook-imagestream.yaml index 7360b39d12..c651e0dc36 100644 --- a/manifests/base/jupyter-minimal-gpu-notebook-imagestream.yaml +++ b/manifests/base/jupyter-minimal-gpu-notebook-imagestream.yaml @@ -30,10 +30,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' - opendatahub.io/notebook-build-commit: odh-minimal-gpu-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-minimal-cuda-py311-ubi9-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-minimal-gpu-notebook-image-n_PLACEHOLDER + name: odh-workbench-jupyter-minimal-cuda-py311-ubi9-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -52,10 +52,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' - opendatahub.io/notebook-build-commit: odh-minimal-gpu-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-minimal-cuda-py311-ubi9-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-minimal-gpu-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-jupyter-minimal-cuda-py311-ubi9-n-1_PLACEHOLDER name: "2024.2" referencePolicy: type: Source diff --git a/manifests/base/jupyter-minimal-notebook-imagestream.yaml b/manifests/base/jupyter-minimal-notebook-imagestream.yaml index 942c7a7764..9aaed552fa 100644 --- a/manifests/base/jupyter-minimal-notebook-imagestream.yaml +++ b/manifests/base/jupyter-minimal-notebook-imagestream.yaml @@ -29,10 +29,10 @@ spec: openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' opendatahub.io/default-image: "true" - opendatahub.io/notebook-build-commit: odh-minimal-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-minimal-cpu-py311-ubi9-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-minimal-notebook-image-n_PLACEHOLDER + name: odh-workbench-jupyter-minimal-cpu-py311-ubi9-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -51,10 +51,10 @@ spec: openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' opendatahub.io/default-image: "true" - opendatahub.io/notebook-build-commit: odh-minimal-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-minimal-cpu-py311-ubi9-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-minimal-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-jupyter-minimal-cpu-py311-ubi9-n-1_PLACEHOLDER name: "2024.2" referencePolicy: type: Source diff --git a/manifests/base/jupyter-pytorch-notebook-imagestream.yaml b/manifests/base/jupyter-pytorch-notebook-imagestream.yaml index c8c36a0609..e31d3f1886 100644 --- a/manifests/base/jupyter-pytorch-notebook-imagestream.yaml +++ b/manifests/base/jupyter-pytorch-notebook-imagestream.yaml @@ -49,10 +49,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' - opendatahub.io/notebook-build-commit: odh-pytorch-gpu-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-pytorch-cuda-py311-ubi9-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-pytorch-gpu-notebook-image-n_PLACEHOLDER + name: odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -90,10 +90,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' - opendatahub.io/notebook-build-commit: odh-pytorch-gpu-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-pytorch-cuda-py311-ubi9-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-pytorch-gpu-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n-1_PLACEHOLDER name: "2024.2" referencePolicy: type: Source diff --git a/manifests/base/jupyter-rocm-minimal-notebook-imagestream.yaml b/manifests/base/jupyter-rocm-minimal-notebook-imagestream.yaml index 180720d098..296cc4d900 100644 --- a/manifests/base/jupyter-rocm-minimal-notebook-imagestream.yaml +++ b/manifests/base/jupyter-rocm-minimal-notebook-imagestream.yaml @@ -30,10 +30,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' - opendatahub.io/notebook-build-commit: odh-rocm-minimal-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-minimal-rocm-py311-ubi9-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-rocm-minimal-notebook-image-n_PLACEHOLDER + name: odh-workbench-jupyter-minimal-rocm-py311-ubi9-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -52,10 +52,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' - opendatahub.io/notebook-build-commit: odh-rocm-minimal-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-minimal-rocm-py311-ubi9-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-rocm-minimal-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-jupyter-minimal-rocm-py311-ubi9-n-1_PLACEHOLDER name: "2024.2" referencePolicy: type: Source diff --git a/manifests/base/jupyter-rocm-pytorch-notebook-imagestream.yaml b/manifests/base/jupyter-rocm-pytorch-notebook-imagestream.yaml index 1d689d26eb..ea6606840d 100644 --- a/manifests/base/jupyter-rocm-pytorch-notebook-imagestream.yaml +++ b/manifests/base/jupyter-rocm-pytorch-notebook-imagestream.yaml @@ -46,10 +46,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' - opendatahub.io/notebook-build-commit: odh-rocm-pytorch-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-pytorch-rocm-py311-ubi9-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-rocm-pytorch-notebook-image-n_PLACEHOLDER + name: odh-workbench-jupyter-pytorch-rocm-py311-ubi9-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -84,10 +84,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' - opendatahub.io/notebook-build-commit: odh-rocm-pytorch-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-pytorch-rocm-py311-ubi9-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-rocm-pytorch-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-jupyter-pytorch-rocm-py311-ubi9-n-1_PLACEHOLDER name: "2024.2" referencePolicy: type: Source diff --git a/manifests/base/jupyter-rocm-tensorflow-notebook-imagestream.yaml b/manifests/base/jupyter-rocm-tensorflow-notebook-imagestream.yaml index e4c76c03c1..746bf2c196 100644 --- a/manifests/base/jupyter-rocm-tensorflow-notebook-imagestream.yaml +++ b/manifests/base/jupyter-rocm-tensorflow-notebook-imagestream.yaml @@ -45,10 +45,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' - opendatahub.io/notebook-build-commit: odh-rocm-tensorflow-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-rocm-tensorflow-notebook-image-n_PLACEHOLDER + name: odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -82,10 +82,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' - opendatahub.io/notebook-build-commit: odh-rocm-tensorflow-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-rocm-tensorflow-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-n-1_PLACEHOLDER name: "2024.2" referencePolicy: type: Source diff --git a/manifests/base/jupyter-tensorflow-notebook-imagestream.yaml b/manifests/base/jupyter-tensorflow-notebook-imagestream.yaml index f86bd46590..0044d6b751 100644 --- a/manifests/base/jupyter-tensorflow-notebook-imagestream.yaml +++ b/manifests/base/jupyter-tensorflow-notebook-imagestream.yaml @@ -49,10 +49,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' - opendatahub.io/notebook-build-commit: odh-tensorflow-gpu-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-tensorflow-gpu-notebook-image-n_PLACEHOLDER + name: odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -90,10 +90,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' - opendatahub.io/notebook-build-commit: odh-tensorflow-gpu-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-tensorflow-gpu-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n-1_PLACEHOLDER name: "2024.2" referencePolicy: type: Source diff --git a/manifests/base/jupyter-trustyai-notebook-imagestream.yaml b/manifests/base/jupyter-trustyai-notebook-imagestream.yaml index cbfb6e4e09..62e74e75c8 100644 --- a/manifests/base/jupyter-trustyai-notebook-imagestream.yaml +++ b/manifests/base/jupyter-trustyai-notebook-imagestream.yaml @@ -49,10 +49,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' - opendatahub.io/notebook-build-commit: odh-trustyai-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-trustyai-cpu-py311-ubi9-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-trustyai-notebook-image-n_PLACEHOLDER + name: odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -91,10 +91,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' - opendatahub.io/notebook-build-commit: odh-trustyai-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-jupyter-trustyai-cpu-py311-ubi9-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-trustyai-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n-1_PLACEHOLDER name: "2024.2" referencePolicy: type: Source diff --git a/manifests/base/kustomization.yaml b/manifests/base/kustomization.yaml index 474f406684..40b073f9dd 100644 --- a/manifests/base/kustomization.yaml +++ b/manifests/base/kustomization.yaml @@ -21,14 +21,15 @@ resources: - runtime-rocm-tensorflow-imagestream.yaml - runtime-tensorflow-imagestream.yaml - configMapGenerator: - envs: - params.env - name: notebooks-parameters + - params-latest.env + name: notebook-image-params - envs: - commit.env - name: notebook + - commit-latest.env + name: notebook-image-commithash generatorOptions: disableNameSuffixHash: true @@ -39,9 +40,9 @@ labels: opendatahub.io/component: "true" replacements: - source: - fieldPath: data.odh-minimal-notebook-image-n + fieldPath: data.odh-workbench-jupyter-minimal-cpu-py311-ubi9-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -52,9 +53,9 @@ replacements: name: jupyter-minimal-notebook version: v1 - source: - fieldPath: data.odh-minimal-notebook-image-n-1 + fieldPath: data.odh-workbench-jupyter-minimal-cpu-py311-ubi9-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -65,9 +66,9 @@ replacements: name: jupyter-minimal-notebook version: v1 - source: - fieldPath: data.odh-generic-data-science-notebook-image-n + fieldPath: data.odh-workbench-jupyter-datascience-cpu-py311-ubi9-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -78,9 +79,9 @@ replacements: name: jupyter-datascience-notebook version: v1 - source: - fieldPath: data.odh-generic-data-science-notebook-image-n-1 + fieldPath: data.odh-workbench-jupyter-datascience-cpu-py311-ubi9-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -91,9 +92,9 @@ replacements: name: jupyter-datascience-notebook version: v1 - source: - fieldPath: data.odh-minimal-gpu-notebook-image-n + fieldPath: data.odh-workbench-jupyter-minimal-cuda-py311-ubi9-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -104,9 +105,9 @@ replacements: name: jupyter-minimal-gpu-notebook version: v1 - source: - fieldPath: data.odh-minimal-gpu-notebook-image-n-1 + fieldPath: data.odh-workbench-jupyter-minimal-cuda-py311-ubi9-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -117,9 +118,9 @@ replacements: name: jupyter-minimal-gpu-notebook version: v1 - source: - fieldPath: data.odh-pytorch-gpu-notebook-image-n + fieldPath: data.odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -130,9 +131,9 @@ replacements: name: jupyter-pytorch-notebook version: v1 - source: - fieldPath: data.odh-pytorch-gpu-notebook-image-n-1 + fieldPath: data.odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -143,9 +144,9 @@ replacements: name: jupyter-pytorch-notebook version: v1 - source: - fieldPath: data.odh-tensorflow-gpu-notebook-image-n + fieldPath: data.odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -156,9 +157,9 @@ replacements: name: jupyter-tensorflow-notebook version: v1 - source: - fieldPath: data.odh-tensorflow-gpu-notebook-image-n-1 + fieldPath: data.odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -169,9 +170,9 @@ replacements: name: jupyter-tensorflow-notebook version: v1 - source: - fieldPath: data.odh-trustyai-notebook-image-n + fieldPath: data.odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -182,9 +183,9 @@ replacements: name: jupyter-trustyai-notebook version: v1 - source: - fieldPath: data.odh-trustyai-notebook-image-n-1 + fieldPath: data.odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -195,9 +196,9 @@ replacements: name: jupyter-trustyai-notebook version: v1 - source: - fieldPath: data.odh-codeserver-notebook-image-n + fieldPath: data.odh-workbench-codeserver-datascience-cpu-py311-ubi9-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -208,9 +209,9 @@ replacements: name: code-server-notebook version: v1 - source: - fieldPath: data.odh-codeserver-notebook-image-n-1 + fieldPath: data.odh-workbench-codeserver-datascience-cpu-py311-ubi9-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -221,9 +222,9 @@ replacements: name: code-server-notebook version: v1 - source: - fieldPath: data.odh-rstudio-notebook-image-n + fieldPath: data.odh-workbench-rstudio-minimal-cpu-py311-c9s-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -234,9 +235,9 @@ replacements: name: rstudio-notebook version: v1 - source: - fieldPath: data.odh-rstudio-notebook-image-n-1 + fieldPath: data.odh-workbench-rstudio-minimal-cpu-py311-c9s-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -247,9 +248,9 @@ replacements: name: rstudio-notebook version: v1 - source: - fieldPath: data.odh-rstudio-gpu-notebook-image-n + fieldPath: data.odh-workbench-rstudio-minimal-cuda-py311-c9s-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -260,9 +261,9 @@ replacements: name: rstudio-gpu-notebook version: v1 - source: - fieldPath: data.odh-rstudio-gpu-notebook-image-n-1 + fieldPath: data.odh-workbench-rstudio-minimal-cuda-py311-c9s-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -273,9 +274,9 @@ replacements: name: rstudio-gpu-notebook version: v1 - source: - fieldPath: data.odh-rocm-minimal-notebook-image-n + fieldPath: data.odh-workbench-jupyter-minimal-rocm-py311-ubi9-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -286,9 +287,9 @@ replacements: name: jupyter-rocm-minimal version: v1 - source: - fieldPath: data.odh-rocm-minimal-notebook-image-n-1 + fieldPath: data.odh-workbench-jupyter-minimal-rocm-py311-ubi9-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -299,9 +300,9 @@ replacements: name: jupyter-rocm-minimal version: v1 - source: - fieldPath: data.odh-rocm-pytorch-notebook-image-n + fieldPath: data.odh-workbench-jupyter-pytorch-rocm-py311-ubi9-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -312,9 +313,9 @@ replacements: name: jupyter-rocm-pytorch version: v1 - source: - fieldPath: data.odh-rocm-pytorch-notebook-image-n-1 + fieldPath: data.odh-workbench-jupyter-pytorch-rocm-py311-ubi9-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -325,9 +326,9 @@ replacements: name: jupyter-rocm-pytorch version: v1 - source: - fieldPath: data.odh-rocm-tensorflow-notebook-image-n + fieldPath: data.odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-n kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -338,9 +339,9 @@ replacements: name: jupyter-rocm-tensorflow version: v1 - source: - fieldPath: data.odh-rocm-tensorflow-notebook-image-n-1 + fieldPath: data.odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-n-1 kind: ConfigMap - name: notebooks-parameters + name: notebook-image-params version: v1 targets: - fieldPaths: @@ -351,9 +352,9 @@ replacements: name: jupyter-rocm-tensorflow version: v1 - source: - fieldPath: data.odh-minimal-notebook-image-commit-n + fieldPath: data.odh-workbench-jupyter-minimal-cpu-py311-ubi9-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -364,9 +365,9 @@ replacements: name: jupyter-minimal-notebook version: v1 - source: - fieldPath: data.odh-minimal-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-jupyter-minimal-cpu-py311-ubi9-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -377,9 +378,9 @@ replacements: name: jupyter-minimal-notebook version: v1 - source: - fieldPath: data.odh-generic-data-science-notebook-image-commit-n + fieldPath: data.odh-workbench-jupyter-datascience-cpu-py311-ubi9-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -390,9 +391,9 @@ replacements: name: jupyter-datascience-notebook version: v1 - source: - fieldPath: data.odh-generic-data-science-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-jupyter-datascience-cpu-py311-ubi9-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -403,9 +404,9 @@ replacements: name: jupyter-datascience-notebook version: v1 - source: - fieldPath: data.odh-minimal-gpu-notebook-image-commit-n + fieldPath: data.odh-workbench-jupyter-minimal-cuda-py311-ubi9-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -416,9 +417,9 @@ replacements: name: jupyter-minimal-gpu-notebook version: v1 - source: - fieldPath: data.odh-minimal-gpu-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-jupyter-minimal-cuda-py311-ubi9-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -429,9 +430,9 @@ replacements: name: jupyter-minimal-gpu-notebook version: v1 - source: - fieldPath: data.odh-pytorch-gpu-notebook-image-commit-n + fieldPath: data.odh-workbench-jupyter-pytorch-cuda-py311-ubi9-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -442,9 +443,9 @@ replacements: name: jupyter-pytorch-notebook version: v1 - source: - fieldPath: data.odh-pytorch-gpu-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-jupyter-pytorch-cuda-py311-ubi9-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -455,9 +456,9 @@ replacements: name: jupyter-pytorch-notebook version: v1 - source: - fieldPath: data.odh-tensorflow-gpu-notebook-image-commit-n + fieldPath: data.odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -468,9 +469,9 @@ replacements: name: jupyter-tensorflow-notebook version: v1 - source: - fieldPath: data.odh-tensorflow-gpu-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -481,9 +482,9 @@ replacements: name: jupyter-tensorflow-notebook version: v1 - source: - fieldPath: data.odh-trustyai-notebook-image-commit-n + fieldPath: data.odh-workbench-jupyter-trustyai-cpu-py311-ubi9-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -494,9 +495,9 @@ replacements: name: jupyter-trustyai-notebook version: v1 - source: - fieldPath: data.odh-trustyai-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-jupyter-trustyai-cpu-py311-ubi9-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -507,9 +508,9 @@ replacements: name: jupyter-trustyai-notebook version: v1 - source: - fieldPath: data.odh-codeserver-notebook-image-commit-n + fieldPath: data.odh-workbench-codeserver-datascience-cpu-py311-ubi9-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -520,9 +521,9 @@ replacements: name: code-server-notebook version: v1 - source: - fieldPath: data.odh-codeserver-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-codeserver-datascience-cpu-py311-ubi9-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -533,9 +534,9 @@ replacements: name: code-server-notebook version: v1 - source: - fieldPath: data.odh-rstudio-notebook-image-commit-n + fieldPath: data.odh-workbench-rstudio-minimal-cpu-py311-c9s-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -546,9 +547,9 @@ replacements: name: rstudio-notebook version: v1 - source: - fieldPath: data.odh-rstudio-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-rstudio-minimal-cpu-py311-c9s-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -559,9 +560,9 @@ replacements: name: rstudio-notebook version: v1 - source: - fieldPath: data.odh-rstudio-gpu-notebook-image-commit-n + fieldPath: data.odh-workbench-rstudio-minimal-cuda-py311-c9s-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -572,9 +573,9 @@ replacements: name: rstudio-gpu-notebook version: v1 - source: - fieldPath: data.odh-rstudio-gpu-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-rstudio-minimal-cuda-py311-c9s-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -585,9 +586,9 @@ replacements: name: rstudio-gpu-notebook version: v1 - source: - fieldPath: data.odh-rocm-minimal-notebook-image-commit-n + fieldPath: data.odh-workbench-jupyter-minimal-rocm-py311-ubi9-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -598,9 +599,9 @@ replacements: name: jupyter-rocm-minimal version: v1 - source: - fieldPath: data.odh-rocm-minimal-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-jupyter-minimal-rocm-py311-ubi9-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -611,9 +612,9 @@ replacements: name: jupyter-rocm-minimal version: v1 - source: - fieldPath: data.odh-rocm-pytorch-notebook-image-commit-n + fieldPath: data.odh-workbench-jupyter-pytorch-rocm-py311-ubi9-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -624,9 +625,9 @@ replacements: name: jupyter-rocm-pytorch version: v1 - source: - fieldPath: data.odh-rocm-pytorch-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-jupyter-pytorch-rocm-py311-ubi9-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -637,9 +638,9 @@ replacements: name: jupyter-rocm-pytorch version: v1 - source: - fieldPath: data.odh-rocm-tensorflow-notebook-image-commit-n + fieldPath: data.odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-commit-n kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -650,9 +651,9 @@ replacements: name: jupyter-rocm-tensorflow version: v1 - source: - fieldPath: data.odh-rocm-tensorflow-notebook-image-commit-n-1 + fieldPath: data.odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-commit-n-1 kind: ConfigMap - name: notebook + name: notebook-image-commithash version: v1 targets: - fieldPaths: @@ -662,3 +663,81 @@ replacements: kind: ImageStream name: jupyter-rocm-tensorflow version: v1 + - source: + fieldPath: data.odh-pipeline-runtime-minimal-cpu-py311-ubi9-n + kind: ConfigMap + name: notebook-image-params + version: v1 + targets: + - fieldPaths: + - spec.tags.0.from.name + select: + group: image.openshift.io + kind: ImageStream + name: runtime-minimal + version: v1 + - source: + fieldPath: data.odh-pipeline-runtime-datascience-cpu-py311-ubi9-n + kind: ConfigMap + name: notebook-image-params + version: v1 + targets: + - fieldPaths: + - spec.tags.0.from.name + select: + group: image.openshift.io + kind: ImageStream + name: runtime-datascience + version: v1 + - source: + fieldPath: data.odh-pipeline-runtime-pytorch-cuda-py311-ubi9-n + kind: ConfigMap + name: notebook-image-params + version: v1 + targets: + - fieldPaths: + - spec.tags.0.from.name + select: + group: image.openshift.io + kind: ImageStream + name: runtime-pytorch + version: v1 + - source: + fieldPath: data.odh-pipeline-runtime-pytorch-rocm-py311-ubi9-n + kind: ConfigMap + name: notebook-image-params + version: v1 + targets: + - fieldPaths: + - spec.tags.0.from.name + select: + group: image.openshift.io + kind: ImageStream + name: runtime-rocm-pytorch + version: v1 + - source: + fieldPath: data.odh-pipeline-runtime-tensorflow-cuda-py311-ubi9-n + kind: ConfigMap + name: notebook-image-params + version: v1 + targets: + - fieldPaths: + - spec.tags.0.from.name + select: + group: image.openshift.io + kind: ImageStream + name: runtime-tensorflow + version: v1 + - source: + fieldPath: data.odh-pipeline-runtime-tensorflow-rocm-py311-ubi9-n + kind: ConfigMap + name: notebook-image-params + version: v1 + targets: + - fieldPaths: + - spec.tags.0.from.name + select: + group: image.openshift.io + kind: ImageStream + name: runtime-rocm-tensorflow + version: v1 diff --git a/manifests/base/params-latest.env b/manifests/base/params-latest.env new file mode 100644 index 0000000000..5dc5e30663 --- /dev/null +++ b/manifests/base/params-latest.env @@ -0,0 +1,18 @@ +odh-workbench-jupyter-minimal-cpu-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:36f48843b48b68ca8964758dad43dc0db4acb2b2d9c2f5936e1b54dc6da34019 +odh-workbench-jupyter-minimal-cuda-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:cf68ba95a270d7ea7ad7e6f6011f28178a91206f49ae99f166247e76531e78c6 +odh-workbench-jupyter-minimal-rocm-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:64f26fb5a7947057680eb2766221f5287d16b513587ac8eddf79e769061eab50 +odh-workbench-jupyter-datascience-cpu-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:eb7f961f2fab9321c293be7c6d51c358a99d7a7b4d80a6f56bab89f290b1655b +odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:96c567db3e617d7cb38b5564194b337a2943f48878437333c8b0588a2ac5f32e +odh-workbench-jupyter-pytorch-rocm-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:a6ac783e187bc9814ef22347c11fa75ff2daec8a7560dbf78c73c1af58068b99 +odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:fcc12c9852a826c8477938a1a3fbb6239caf5477abf41f4b3b2a6270ccb230a1 +odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:bf7d9d9c41f69227d4a35e8bca07c90e66b3511cf14e846dea6c5b020cfe3e73 +odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:85d227f9d0145bacddca78664c2161b2d24da178fcc4b3207746e614bd755bfa +odh-workbench-codeserver-datascience-cpu-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:c6731b416e8a587c020e1c821ba50cb61918cffcc020685d7ccfe156914b20ba +odh-workbench-rstudio-minimal-cpu-py311-c9s-n=quay.io/opendatahub/workbench-images@sha256:2daa65cde3003fa2cdcbcddda3d63947760f018912aa84cd51234acd2cffcd06 +odh-workbench-rstudio-minimal-cuda-py311-c9s-n=quay.io/opendatahub/workbench-images@sha256:17c424cbbf6b411afa4f04c38450a86809c9707a297b0fff4f77ef77d7edfef8 +odh-pipeline-runtime-minimal-cpu-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:e9cfdf68eb2b3150b4c4bf11f11efc8430172900f990b59d128ba830173137e3 +odh-pipeline-runtime-datascience-cpu-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:3ed10c6d409430c7addcaa7e83e27e33450df4592f374feff3ac9529d83dc861 +odh-pipeline-runtime-pytorch-cuda-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:76f9925d56a517d1b810290e8d405c546530eeb81c3c640b1f64d64ffa1fb65d +odh-pipeline-runtime-pytorch-rocm-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:4252e6d4a88adb163cd979e1d54535063bcee006bffc077ff87c4ef6c00beb57 +odh-pipeline-runtime-tensorflow-cuda-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:aaccbe6835ac56b34230319ab4497c24432a4fae33ca3032a0243da209ec996a +odh-pipeline-runtime-tensorflow-rocm-py311-ubi9-n=quay.io/opendatahub/workbench-images@sha256:da1c5c9471963f091964de8e4228561653df9252d8e4ba371ffab6f6bbf1206f diff --git a/manifests/base/params.env b/manifests/base/params.env index d6bbef729f..769f29bd2d 100644 --- a/manifests/base/params.env +++ b/manifests/base/params.env @@ -1,24 +1,12 @@ -odh-minimal-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:36f48843b48b68ca8964758dad43dc0db4acb2b2d9c2f5936e1b54dc6da34019 -odh-minimal-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:fa669f53ff8d4e29b094441b981e7dbcd1f6aaa0a2a74e92af4876243703dfd0 -odh-minimal-gpu-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:cf68ba95a270d7ea7ad7e6f6011f28178a91206f49ae99f166247e76531e78c6 -odh-minimal-gpu-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:1d84054dbc2ce4e076857b11eea60a6b0a44ff107af9bdc72c20f10ba998a7f9 -odh-pytorch-gpu-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:96c567db3e617d7cb38b5564194b337a2943f48878437333c8b0588a2ac5f32e -odh-pytorch-gpu-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:4806fccf59e6b3f7a32f84a2af89c6fdea8f8af07c29b68a64877890f5a5999b -odh-generic-data-science-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:eb7f961f2fab9321c293be7c6d51c358a99d7a7b4d80a6f56bab89f290b1655b -odh-generic-data-science-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:029e48d075fefd4a9c399dd177fc805713b8d39434ae8142a1ee341ecd10c52d -odh-tensorflow-gpu-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:fcc12c9852a826c8477938a1a3fbb6239caf5477abf41f4b3b2a6270ccb230a1 -odh-tensorflow-gpu-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:c162a01a795ece51e57bfb7a926d05edf8bbe5189ee894a897dba60fc2b3d288 -odh-trustyai-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:85d227f9d0145bacddca78664c2161b2d24da178fcc4b3207746e614bd755bfa -odh-trustyai-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:d0a41619ed23287b76e74ac859c2d8730903866a9e32eb1ac7d4138d2222f632 -odh-codeserver-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:c6731b416e8a587c020e1c821ba50cb61918cffcc020685d7ccfe156914b20ba -odh-codeserver-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:176bfa2e9c1f53d483d6ce4038897d19c34870b89e0c32ba87e94c00052acf2e -odh-rstudio-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:2daa65cde3003fa2cdcbcddda3d63947760f018912aa84cd51234acd2cffcd06 -odh-rstudio-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:562fde56f25507435520920ac41edd9ced0e025198a56142c44692f6340e0f0f -odh-rstudio-gpu-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:17c424cbbf6b411afa4f04c38450a86809c9707a297b0fff4f77ef77d7edfef8 -odh-rstudio-gpu-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:f2988efa77ba4725a701f5717e8b70b5141ad0cb04dfc42a68293752b28324a7 -odh-rocm-minimal-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:64f26fb5a7947057680eb2766221f5287d16b513587ac8eddf79e769061eab50 -odh-rocm-minimal-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:8ab93581ef381c47a6bf2dc1162c7374f4e44966ce2fe383ed8ccf23c3ecfd32 -odh-rocm-pytorch-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:a6ac783e187bc9814ef22347c11fa75ff2daec8a7560dbf78c73c1af58068b99 -odh-rocm-pytorch-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:ad938f7194632a5e03d64412f537812b1b477a15c5866d3d8310c6ff27ff4ec2 -odh-rocm-tensorflow-notebook-image-n=quay.io/opendatahub/workbench-images@sha256:bf7d9d9c41f69227d4a35e8bca07c90e66b3511cf14e846dea6c5b020cfe3e73 -odh-rocm-tensorflow-notebook-image-n-1=quay.io/opendatahub/workbench-images@sha256:55088024f2151777c5cd7ec0b5f7b80e3f724a150c43b1a268b4f64e2b36a72e +odh-workbench-jupyter-minimal-cpu-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:fa669f53ff8d4e29b094441b981e7dbcd1f6aaa0a2a74e92af4876243703dfd0 +odh-workbench-jupyter-minimal-cuda-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:1d84054dbc2ce4e076857b11eea60a6b0a44ff107af9bdc72c20f10ba998a7f9 +odh-workbench-jupyter-pytorch-cuda-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:4806fccf59e6b3f7a32f84a2af89c6fdea8f8af07c29b68a64877890f5a5999b +odh-workbench-jupyter-datascience-cpu-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:029e48d075fefd4a9c399dd177fc805713b8d39434ae8142a1ee341ecd10c52d +odh-workbench-jupyter-tensorflow-cuda-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:c162a01a795ece51e57bfb7a926d05edf8bbe5189ee894a897dba60fc2b3d288 +odh-workbench-jupyter-trustyai-cpu-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:d0a41619ed23287b76e74ac859c2d8730903866a9e32eb1ac7d4138d2222f632 +odh-workbench-codeserver-datascience-cpu-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:176bfa2e9c1f53d483d6ce4038897d19c34870b89e0c32ba87e94c00052acf2e +odh-workbench-rstudio-minimal-cpu-py311-c9s-n-1=quay.io/opendatahub/workbench-images@sha256:562fde56f25507435520920ac41edd9ced0e025198a56142c44692f6340e0f0f +odh-workbench-rstudio-minimal-cuda-py311-c9s-n-1=quay.io/opendatahub/workbench-images@sha256:f2988efa77ba4725a701f5717e8b70b5141ad0cb04dfc42a68293752b28324a7 +odh-workbench-jupyter-minimal-rocm-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:8ab93581ef381c47a6bf2dc1162c7374f4e44966ce2fe383ed8ccf23c3ecfd32 +odh-workbench-jupyter-pytorch-rocm-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:ad938f7194632a5e03d64412f537812b1b477a15c5866d3d8310c6ff27ff4ec2 +odh-workbench-jupyter-tensorflow-rocm-py311-ubi9-n-1=quay.io/opendatahub/workbench-images@sha256:55088024f2151777c5cd7ec0b5f7b80e3f724a150c43b1a268b4f64e2b36a72e diff --git a/manifests/base/rstudio-gpu-notebook-imagestream.yaml b/manifests/base/rstudio-gpu-notebook-imagestream.yaml index 619995a14c..f82f76df6e 100644 --- a/manifests/base/rstudio-gpu-notebook-imagestream.yaml +++ b/manifests/base/rstudio-gpu-notebook-imagestream.yaml @@ -31,10 +31,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' - opendatahub.io/notebook-build-commit: odh-rstudio-gpu-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-rstudio-minimal-cuda-py311-c9s-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-rstudio-gpu-notebook-image-n_PLACEHOLDER + name: odh-workbench-rstudio-minimal-cuda-py311-c9s-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -54,10 +54,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' - opendatahub.io/notebook-build-commit: odh-rstudio-gpu-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-rstudio-minimal-cuda-py311-c9s-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-rstudio-gpu-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-rstudio-minimal-cuda-py311-c9s-n-1_PLACEHOLDER name: "2024.2" referencePolicy: type: Source diff --git a/manifests/base/rstudio-notebook-imagestream.yaml b/manifests/base/rstudio-notebook-imagestream.yaml index 5290546a87..3f293b9bb3 100644 --- a/manifests/base/rstudio-notebook-imagestream.yaml +++ b/manifests/base/rstudio-notebook-imagestream.yaml @@ -29,10 +29,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'true' - opendatahub.io/notebook-build-commit: odh-rstudio-notebook-image-commit-n_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-rstudio-minimal-cpu-py311-c9s-commit-n_PLACEHOLDER from: kind: DockerImage - name: odh-rstudio-notebook-image-n_PLACEHOLDER + name: odh-workbench-rstudio-minimal-cpu-py311-c9s-n_PLACEHOLDER name: "2025.1" referencePolicy: type: Source @@ -51,10 +51,10 @@ spec: ] openshift.io/imported-from: quay.io/opendatahub/workbench-images opendatahub.io/workbench-image-recommended: 'false' - opendatahub.io/notebook-build-commit: odh-rstudio-notebook-image-commit-n-1_PLACEHOLDER + opendatahub.io/notebook-build-commit: odh-workbench-rstudio-minimal-cpu-py311-c9s-commit-n-1_PLACEHOLDER from: kind: DockerImage - name: odh-rstudio-notebook-image-n-1_PLACEHOLDER + name: odh-workbench-rstudio-minimal-cpu-py311-c9s-n-1_PLACEHOLDER name: "2024.1" referencePolicy: type: Source diff --git a/manifests/base/runtime-datascience-imagestream.yaml b/manifests/base/runtime-datascience-imagestream.yaml index 6ddeb87cec..2ec6c932a8 100644 --- a/manifests/base/runtime-datascience-imagestream.yaml +++ b/manifests/base/runtime-datascience-imagestream.yaml @@ -24,7 +24,6 @@ spec: "datascience" ], "display_name": "Datascience with Python 3.11 (UBI9)", - "image_name": "quay.io/opendatahub/workbench-images@sha256:3ed10c6d409430c7addcaa7e83e27e33450df4592f374feff3ac9529d83dc861", "pull_policy": "IfNotPresent" }, "schema_name": "runtime-image" @@ -33,7 +32,7 @@ spec: openshift.io/imported-from: quay.io/opendatahub/workbench-images from: kind: DockerImage - name: quay.io/opendatahub/workbench-images@sha256:3ed10c6d409430c7addcaa7e83e27e33450df4592f374feff3ac9529d83dc861 + name: odh-pipeline-runtime-datascience-cpu-py311-ubi9-n_PLACEHOLDER name: "datascience" referencePolicy: type: Source diff --git a/manifests/base/runtime-minimal-imagestream.yaml b/manifests/base/runtime-minimal-imagestream.yaml index 5e45541115..fd2de976bd 100644 --- a/manifests/base/runtime-minimal-imagestream.yaml +++ b/manifests/base/runtime-minimal-imagestream.yaml @@ -24,7 +24,6 @@ spec: "minimal" ], "display_name": "Python 3.11 (UBI9)", - "image_name": "quay.io/opendatahub/workbench-images@sha256:e9cfdf68eb2b3150b4c4bf11f11efc8430172900f990b59d128ba830173137e3", "pull_policy": "IfNotPresent" }, "schema_name": "runtime-image" @@ -33,7 +32,7 @@ spec: openshift.io/imported-from: quay.io/opendatahub/workbench-images from: kind: DockerImage - name: quay.io/opendatahub/workbench-images@sha256:e9cfdf68eb2b3150b4c4bf11f11efc8430172900f990b59d128ba830173137e3 + name: odh-pipeline-runtime-minimal-cpu-py311-ubi9-n_PLACEHOLDER name: "minimal" referencePolicy: type: Source diff --git a/manifests/base/runtime-pytorch-imagestream.yaml b/manifests/base/runtime-pytorch-imagestream.yaml index 34770e9136..5b333ab025 100644 --- a/manifests/base/runtime-pytorch-imagestream.yaml +++ b/manifests/base/runtime-pytorch-imagestream.yaml @@ -24,7 +24,6 @@ spec: "pytorch" ], "display_name": "PyTorch with CUDA and Python 3.11 (UBI9)", - "image_name": "quay.io/opendatahub/workbench-images@sha256:76f9925d56a517d1b810290e8d405c546530eeb81c3c640b1f64d64ffa1fb65d", "pull_policy": "IfNotPresent" }, "schema_name": "runtime-image" @@ -33,7 +32,7 @@ spec: openshift.io/imported-from: quay.io/opendatahub/workbench-images from: kind: DockerImage - name: quay.io/opendatahub/workbench-images@sha256:76f9925d56a517d1b810290e8d405c546530eeb81c3c640b1f64d64ffa1fb65d + name: odh-pipeline-runtime-pytorch-cuda-py311-ubi9-n_PLACEHOLDER name: "pytorch" referencePolicy: type: Source diff --git a/manifests/base/runtime-rocm-pytorch-imagestream.yaml b/manifests/base/runtime-rocm-pytorch-imagestream.yaml index 43074fc7e9..8f0144a64a 100644 --- a/manifests/base/runtime-rocm-pytorch-imagestream.yaml +++ b/manifests/base/runtime-rocm-pytorch-imagestream.yaml @@ -24,7 +24,6 @@ spec: "rocm-pytorch" ], "display_name": "PyTorch with ROCm and Python 3.11 (UBI9)", - "image_name": "quay.io/opendatahub/workbench-images@sha256:4252e6d4a88adb163cd979e1d54535063bcee006bffc077ff87c4ef6c00beb57", "pull_policy": "IfNotPresent" }, "schema_name": "runtime-image" @@ -33,7 +32,7 @@ spec: openshift.io/imported-from: quay.io/opendatahub/workbench-images from: kind: DockerImage - name: quay.io/opendatahub/workbench-images@sha256:4252e6d4a88adb163cd979e1d54535063bcee006bffc077ff87c4ef6c00beb57 + name: odh-pipeline-runtime-pytorch-rocm-py311-ubi9-n_PLACEHOLDER name: "rocm-pytorch" referencePolicy: type: Source diff --git a/manifests/base/runtime-rocm-tensorflow-imagestream.yaml b/manifests/base/runtime-rocm-tensorflow-imagestream.yaml index 9c2c7ccba8..c6ea864310 100644 --- a/manifests/base/runtime-rocm-tensorflow-imagestream.yaml +++ b/manifests/base/runtime-rocm-tensorflow-imagestream.yaml @@ -25,7 +25,6 @@ spec: "rocm-tensorflow" ], "display_name": "TensorFlow with ROCm and Python 3.11 (UBI9)", - "image_name": "quay.io/opendatahub/workbench-images@sha256:da1c5c9471963f091964de8e4228561653df9252d8e4ba371ffab6f6bbf1206f", "pull_policy": "IfNotPresent" }, "schema_name": "runtime-image" @@ -34,7 +33,7 @@ spec: openshift.io/imported-from: quay.io/opendatahub/workbench-images from: kind: DockerImage - name: quay.io/opendatahub/workbench-images@sha256:da1c5c9471963f091964de8e4228561653df9252d8e4ba371ffab6f6bbf1206f + name: odh-pipeline-runtime-tensorflow-rocm-py311-ubi9-n_PLACEHOLDER name: "rocm-tensorflow" referencePolicy: type: Source diff --git a/manifests/base/runtime-tensorflow-imagestream.yaml b/manifests/base/runtime-tensorflow-imagestream.yaml index 54947c7b3b..bc3a7a0502 100644 --- a/manifests/base/runtime-tensorflow-imagestream.yaml +++ b/manifests/base/runtime-tensorflow-imagestream.yaml @@ -25,7 +25,6 @@ spec: "tensorflow" ], "display_name": "TensorFlow with CUDA and Python 3.11 (UBI9)", - "image_name": "quay.io/opendatahub/workbench-images@sha256:aaccbe6835ac56b34230319ab4497c24432a4fae33ca3032a0243da209ec996a", "pull_policy": "IfNotPresent" }, "schema_name": "runtime-image" @@ -34,7 +33,7 @@ spec: openshift.io/imported-from: quay.io/opendatahub/workbench-images from: kind: DockerImage - name: quay.io/opendatahub/workbench-images@sha256:aaccbe6835ac56b34230319ab4497c24432a4fae33ca3032a0243da209ec996a + name: odh-pipeline-runtime-tensorflow-cuda-py311-ubi9-n_PLACEHOLDER name: "tensorflow" referencePolicy: type: Source