Skip to content

RHOAIENG-27435: Create Rocm Pytorch Python 3.12 #1248

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from

Conversation

dibryant
Copy link
Contributor

@dibryant dibryant commented Jul 1, 2025

Fixes for https://issues.redhat.com/browse/RHOAIENG-27435

Description

Create Rocm Pytorch Python 3.12

How Has This Been Tested?

$ make rocm-jupyter-pytorch-ubi9-python-3.12
-e RELEASE_PYTHON_VERSION=3.12
-e IMAGE_REGISTRY="quay.io/${YOUR_USER}/workbench-images"
-e RELEASE="2025b"
-e CONTAINER_BUILD_CACHE_ARGS=""
-e PUSH_IMAGES="no"
$ export QUAY_IMAGE=$(podman images --format "{{.Repository}}:{{.Tag}}" | head -1)
$ podman run -it -p 8888:8888 $QUAY_IMAGE

Merge criteria:

  • The commits are squashed in a cohesive manner and have meaningful messages.
  • Testing instructions have been added in the PR body (for PRs involving changes that are not immediately obvious).
  • The developer has manually tested the changes and verified that the changes work

Summary by CodeRabbit

  • New Features

    • Added support for Jupyter ROCm PyTorch environment with Python 3.12, including new Dockerfile, Pipfile, Kubernetes manifests, and a test notebook to validate functionality.
  • Bug Fixes

    • Resolved multiple merge conflicts and updated package versions and hashes in various requirements files.
  • Chores

    • Added a script to manage ROCm library symlinks within the PyTorch environment.

Copy link
Contributor

coderabbitai bot commented Jul 1, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

This change set primarily addresses merge conflicts and dependency updates in various requirements.txt files across multiple environments, and introduces a new ROCm-enabled Jupyter PyTorch image for Python 3.12. The new image includes a multi-stage Dockerfile, a comprehensive Pipfile, Kubernetes deployment manifests, a test notebook, and utility scripts.

Changes

Files/Paths Change Summary
codeserver/ubi9-python-3.11/requirements.txt Resolved merge conflict; updated versions and hashes for boto3, botocore, pillow; added platformdirs.
jupyter/datascience/ubi9-python-3.11/requirements.txt
jupyter/pytorch/ubi9-python-3.11/requirements.txt
jupyter/rocm/pytorch/ubi9-python-3.11/requirements.txt
Resolved or present merge conflicts for google-crc32c, google-resumable-media, googleapis-common-protos versions/hashes.
jupyter/minimal/ubi9-python-3.11/requirements.txt Resolved merge conflict; updated mistune and multidict versions and hashes.
jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm Added new multi-stage Dockerfile for ROCm-enabled Jupyter PyTorch on UBI9 with Python 3.12.
jupyter/rocm/pytorch/ubi9-python-3.12/Pipfile Added new Pipfile specifying PyTorch ROCm, JupyterLab, and data science dependencies for Python 3.12.
jupyter/rocm/pytorch/ubi9-python-3.12/de-vendor-torch.sh Added script to replace vendored ROCm libraries in PyTorch with system symlinks.
jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/kustomization.yaml
jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/service.yaml
jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/statefulset.yaml
Added Kubernetes manifests for deploying the new ROCm PyTorch Jupyter image: Kustomization, Service, StatefulSet.
jupyter/rocm/pytorch/ubi9-python-3.12/test/test_notebook.ipynb Added Jupyter notebook with unittests for PyTorch and related tooling in ROCm environment.
runtimes/datascience/ubi9-python-3.11/requirements.txt
runtimes/pytorch/ubi9-python-3.11/requirements.txt
runtimes/rocm-pytorch/ubi9-python-3.11/requirements.txt
Introduced extraneous Git conflict marker line after aiohttp-cors package entry.
runtimes/rocm-tensorflow/ubi9-python-3.11/requirements.txt
runtimes/tensorflow/ubi9-python-3.11/requirements.txt
Unresolved merge conflict markers and conflicting googleapis-common-protos package versions/hashes.

Suggested labels

lgtm, size/l

Suggested reviewers

  • paulovmr

📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2540fec and 61678d5.

⛔ Files ignored due to path filters (1)
  • jupyter/rocm/pytorch/ubi9-python-3.12/Pipfile.lock is excluded by !**/*.lock
📒 Files selected for processing (7)
  • jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/Pipfile (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/de-vendor-torch.sh (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/kustomization.yaml (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/service.yaml (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/statefulset.yaml (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/test/test_notebook.ipynb (1 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@openshift-ci openshift-ci bot requested review from andyatmiami and atheo89 July 1, 2025 20:50
@openshift-ci openshift-ci bot added the size/xxl label Jul 1, 2025
Copy link
Contributor

openshift-ci bot commented Jul 1, 2025

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign harshad16 for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci bot added size/xxl and removed size/xxl labels Jul 1, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 15

🔭 Outside diff range comments (7)
codeserver/ubi9-python-3.11/requirements.txt (1)

597-759: Second merge-conflict block left in place (pillow / platformdirs)

Another full conflict block remains, duplicating two different pillow & platformdirs pins.
Same fatal build error risk as above.

-<<<<<<< HEAD
-pillow==11.1.0 …
-platformdirs==4.3.6 …
-=======
+pillow==11.2.1 …       # decide which versions you actually want
+platformdirs==4.3.8 …
->>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef

Pick the intended versions (usually the newer ones) and delete the markers, or regenerate the file from lock-data.

jupyter/minimal/ubi9-python-3.11/requirements.txt (1)

615-827: Remove merge-conflict markers from requirements.txt

The file jupyter/minimal/ubi9-python-3.11/requirements.txt still contains unresolved Git conflict markers (<<<<<<<, =======, >>>>>>>), which will break pip install. Please:

  • Remove all conflict markers and duplicated entries.
  • Keep only the intended final versions:
    • mistune==3.1.3
    • multidict==6.6.2
  • Verify there are no leftover <<<<<<<, =======, or >>>>>>> lines around these dependencies.

Location to fix:

  • jupyter/minimal/ubi9-python-3.11/requirements.txt, lines 615–827

Example cleanup:

-<<<<<<< HEAD
-mistune==3.1.2; python_version >= '3.8' \
-    --hash=sha256:4b4773...
-
-multidict==6.2.0; python_version >= '3.9' \
-    --hash=sha256:0085b0...
-
-=======
 mistune==3.1.3; python_version >= '3.8' \
     --hash=sha256:1a3231...
 …
 multidict==6.6.2; python_version >= '3.9' \
     --hash=sha256:03f20d...
 …
->>>>>>> <commit-id>

After cleaning up, run:

pip install -r jupyter/minimal/ubi9-python-3.11/requirements.txt
pip check

(or the repo’s sync script) to ensure all dependencies and lockfiles stay consistent.

runtimes/tensorflow/ubi9-python-3.11/requirements.txt (1)

697-705: Merge conflict still present – pick one version and delete markers

The block for googleapis-common-protos still contains <<<<<<< HEAD … ======= … >>>>>>> markers. Until this is resolved the image build will fail.

-<<<<<<< HEAD
-googleapis-common-protos==1.69.2; python_version >= '3.7' \
-    --hash=<sha256-old-1> \
-    --hash=<sha256-old-2>
-=======
 googleapis-common-protos==1.70.0; python_version >= '3.7' \
     --hash=<sha256-new-1> \
     --hash=<sha256-new-2>
->>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef

(Keep the two hashes that belong to version 1.70.0, delete the rest.)

After fixing, run scripts/sync-requirements-txt.sh again so hashes stay consistent.

runtimes/rocm-tensorflow/ubi9-python-3.11/requirements.txt (1)

700-708: Merge conflict still present for googleapis-common-protos

The <<<<<<< HEAD, =======, >>>>>>> block must be resolved. Decide on one version (1.70.0 is the latest referenced in other updated images) and remove markers:

-<<<<<<< HEAD
-googleapis-common-protos==1.69.2; python_version >= '3.7' \
-    --hash=sha256:0b30452ff9c7a27d80bfc5718954063e8ab53dd3697093d3bc99581f5fd24212 \
-    --hash=sha256:3e1b904a27a33c821b4b749fd31d334c0c9c30e6113023d495e48979a3dc9c5f
-=======
 googleapis-common-protos==1.70.0; python_version >= '3.7' \
     --hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \
     --hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8
->>>>>>> ...

After removal, bump hashes if you choose another version.

jupyter/pytorch/ubi9-python-3.11/requirements.txt (1)

804-885: Unresolved merge-conflict markers break pip parsing.

The file still contains <<<<<<<, =======, and >>>>>>> markers and duplicated stanza blocks for
google-crc32c, google-resumable-media, and googleapis-common-protos.
Any pip install -r will fail, and image builds will explode early.

<<<<<<< HEAD
-google-crc32c==1.7.0
-...
-googleapis-common-protos==1.69.2
=======
+google-crc32c==1.7.1  # align with other images / upstream
+...
+googleapis-common-protos==1.70.0
>>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef

Strip the markers and keep one consistent version triple (the HEAD side matches other 3.12 images, so prefer it).
Failing to do so blocks every downstream pipeline step.

Also applies to: 2140-2147

jupyter/datascience/ubi9-python-3.11/requirements.txt (1)

800-883: Unresolved merge-conflict markers – build will fail

<<<<<<< HEAD, =======, >>>>>>> and the duplicated package blocks must be removed.
Leaving these markers in requirements.txt breaks parsing and will abort any pip install, blocking CI and image builds.

Suggested minimal fix (keep the newer versions used everywhere else in the repo):

-<<<<<<< HEAD
-google-crc32c==1.7.0 ...
-...
-googleapis-common-protos==1.69.2 ...
-=======
 # keep one copy of google-resumable-media (identical in both halves)
 google-crc32c==1.7.1 ...
 ...
 googleapis-common-protos==1.70.0 ...
->>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef

After applying, ensure there is only ONE occurrence of each of:

google-resumable-media==2.7.2
google-crc32c==1.7.1
googleapis-common-protos==1.70.0

Run pip compile / the repo’s sync script again to regenerate hashes if needed.

jupyter/rocm/pytorch/ubi9-python-3.11/requirements.txt (1)

804-885: Resolve merge conflicts across all dependency files

Multiple <<<<<<<…=======…>>>>>>> markers remain in requirements.txt and Pipfile.lock across the repo, blocking any pip install or lockfile parsing. You must remove all conflict markers, pick the correct versions, and regenerate hashes/locks consistently.

Files affected (non-exhaustive; see full list from rg '^(<<<<<<<|=======|>>>>>>>)'):

• jupyter/minimal/ubi9-python-3.11/requirements.txt (lines 615, 712)
• jupyter/rocm/tensorflow/ubi9-python-3.11/Pipfile.lock (lines 1212–1224)
• jupyter/rocm/pytorch/ubi9-python-3.12/requirements.txt (lines 804–845, 2081)
• jupyter/rocm/pytorch/ubi9-python-3.11/requirements.txt (lines 804–845, 2081)
• runtimes//requirements.txt and Pipfile.lock in tensorflow, rocm-tensorflow, rocm-pytorch, datascience, pytorch
• jupyter/
/requirements.txt and Pipfile.lock in pytorch, datascience
• codeserver/ubi9-python-3.11/{requirements.txt,Pipfile.lock}

Action items:
• Remove all <<<<<<<, =======, >>>>>>> blocks by choosing the intended dependency versions (e.g. google-crc32c==1.7.1, googleapis-common-protos==1.70.0).
• In each requirements.txt, leave only one set of lines and drop markers.
• In each Pipfile.lock, repeat lock generation (e.g. pipenv lock inside the appropriate UBI9 container for linux/amd64 & Python 3.11/3.12).
• After cleanup, run:
bash ./scripts/sync-requirements-txt.sh pipenv lock rg --line-number '^(<<<<<<<|=======|>>>>>>>)' || echo "No conflict markers remain"

This is blocking the build/test pipeline—please resolve all merges before proceeding.

🧹 Nitpick comments (7)
jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/kustomization.yaml (1)

4-15: Explicitly pin the image digest to guarantee reproducibility
Tag-only references (newTag: rocm-jupyter-pytorch-ubi9-python-3.12) can drift once the registry is overwritten. To make future rebuilds deterministic, add the immutable digest:

-    newTag: rocm-jupyter-pytorch-ubi9-python-3.12
+    newTag: rocm-jupyter-pytorch-ubi9-python-3.12
+    digest: sha256:<insert_actual_digest_here>
jupyter/rocm/pytorch/ubi9-python-3.12/de-vendor-torch.sh (2)

9-12: Derive TORCHLIB path dynamically to survive layout changes
Hard-coding /opt/app-root/lib/${PYTHON}/site-packages couples the script to a single image layout. Use Python’s own introspection to locate torch/lib:

-PYTHON=python3.12
-ROCMLIB=/opt/rocm/lib
-TORCHLIB=/opt/app-root/lib/${PYTHON}/site-packages/torch/lib
+PYTHON=python3.12
+ROCMLIB=/opt/rocm/lib
+TORCHLIB="$(${PYTHON} - <<'PY'
+import importlib.util, pathlib, sys
+spec = importlib.util.find_spec("torch")
+print(pathlib.Path(spec.origin).parent / "lib")
+PY
+)"

This avoids silent breakage if the base image upgrades its sysroot.


13-36: Guard against missing system libraries to fail fast & clearly
set -e aborts on the first ln -sf that encounters a non-existent source. Add a short existence check to emit a helpful error instead of a cryptic “No such file”:

for lib in \
  libamd_comgr.so.2 libamdhip64.so.6 libhipblas.so.2 ... ; do
  [ -e "${ROCMLIB}/${lib}" ] || { echo "Missing ${lib}" >&2; exit 1; }
done
jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/statefulset.yaml (1)

52-58: Right-size default resources or make them configurable
Hard-wiring 500m/2Gi requests & limits hampers multi-tenant clusters running GPU/ROCm workloads whose memory footprint differs greatly. Consider exposing configurable values via kustomize vars or lowering defaults (e.g., 250m/512Mi).

jupyter/rocm/pytorch/ubi9-python-3.12/Pipfile (2)

21-35: Pin codeflare-sdk using == to avoid breaking API changes
codeflare-sdk is fast-moving and has introduced backwards-incompatible changes in minor releases. For stability match the pattern used for core Jupyter packages:

-codeflare-sdk = "~=0.29.0"
+codeflare-sdk = "==0.29.0"

42-57: Document divergence from TrustyAI’s jupyter-bokeh pinning
TrustyAI images still require jupyter-bokeh~=3.0.5. Installing 4.x variants side-by-side in a multi-image environment can lead to dependency resolution fights when users switch kernels. Add a comment or align the version to prevent hidden conflicts.

jupyter/rocm/pytorch/ubi9-python-3.12/test/test_notebook.ipynb (1)

164-169: Add cleanup for ONNX export test.

The test creates an ONNX file but doesn't clean it up, which could cause issues in repeated test runs.

         # Check if the ONNX file exists
         self.assertTrue(os.path.exists(onnx_path), f"ONNX file {onnx_path} not found")
+        
+        # Clean up the generated file
+        if os.path.exists(onnx_path):
+            os.remove(onnx_path)
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 889ba72 and 2540fec.

⛔ Files ignored due to path filters (9)
  • codeserver/ubi9-python-3.11/Pipfile.lock is excluded by !**/*.lock
  • jupyter/datascience/ubi9-python-3.11/Pipfile.lock is excluded by !**/*.lock
  • jupyter/rocm/pytorch/ubi9-python-3.12/Pipfile.lock is excluded by !**/*.lock
  • jupyter/rocm/tensorflow/ubi9-python-3.11/Pipfile.lock is excluded by !**/*.lock
  • runtimes/datascience/ubi9-python-3.11/Pipfile.lock is excluded by !**/*.lock
  • runtimes/pytorch/ubi9-python-3.11/Pipfile.lock is excluded by !**/*.lock
  • runtimes/rocm-pytorch/ubi9-python-3.11/Pipfile.lock is excluded by !**/*.lock
  • runtimes/rocm-tensorflow/ubi9-python-3.11/Pipfile.lock is excluded by !**/*.lock
  • runtimes/tensorflow/ubi9-python-3.11/Pipfile.lock is excluded by !**/*.lock
📒 Files selected for processing (17)
  • codeserver/ubi9-python-3.11/requirements.txt (3 hunks)
  • jupyter/datascience/ubi9-python-3.11/requirements.txt (2 hunks)
  • jupyter/minimal/ubi9-python-3.11/requirements.txt (1 hunks)
  • jupyter/pytorch/ubi9-python-3.11/requirements.txt (2 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.11/requirements.txt (2 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/Pipfile (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/de-vendor-torch.sh (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/kustomization.yaml (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/service.yaml (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/statefulset.yaml (1 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/test/test_notebook.ipynb (1 hunks)
  • runtimes/datascience/ubi9-python-3.11/requirements.txt (1 hunks)
  • runtimes/pytorch/ubi9-python-3.11/requirements.txt (1 hunks)
  • runtimes/rocm-pytorch/ubi9-python-3.11/requirements.txt (1 hunks)
  • runtimes/rocm-tensorflow/ubi9-python-3.11/requirements.txt (2 hunks)
  • runtimes/tensorflow/ubi9-python-3.11/requirements.txt (2 hunks)
🧰 Additional context used
🧠 Learnings (18)
📓 Common learnings
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing `runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml` file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1230
File: jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu:21-24
Timestamp: 2025-07-01T06:48:13.154Z
Learning: jiridanek creates comprehensive follow-up issues from review comments that expand scope appropriately, include clear acceptance criteria, proper backlinks, and structured implementation guidance. Issue #1241 demonstrates this by turning a specific oc client checksum concern into a thorough security enhancement plan covering all downloaded binaries across the Python 3.12 implementation.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: TrustyAI's jupyter-bokeh was pinned to 3.0.5 due to compatibility requirements with TrustyAI's visualization components, but the actual deployed version in requirements.txt shows 3.0.7, indicating incremental testing. The upgrade to 4.0.5 in this PR represents the completion of a gradual migration strategy from the 3.x series after confirming compatibility with Bokeh 3.7.3.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-20T11:51:59.716Z
Learning: This project follows the practice of associating PRs with Jira tickets from https://issues.redhat.com for traceability between requirements, release process, and product documentation. This is critical for enterprise software development compliance and cross-team coordination.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1247
File: .github/workflows/build-notebooks-TEMPLATE.yaml:50-53
Timestamp: 2025-07-01T14:36:52.815Z
Learning: In the opendatahub-io/notebooks repository, the test runner's Python version (configured in GitHub Actions UV setup) intentionally doesn't need to match the Python version of the container images being tested. jiridanek's team uses Python 3.12 for running tests while images may use different Python versions (like 3.11), and this approach works fine since the test code is separate from the application code running inside the containers.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1230
File: jupyter/pytorch/ubi9-python-3.12/kustomize/components/accelerator/pod-patch.yaml:11-22
Timestamp: 2025-06-30T14:36:53.890Z
Learning: The pod-patch.yaml file in jupyter/pytorch/ubi9-python-3.12/kustomize/components/accelerator/ is used only for running tests, not production deployments. This affects the risk assessment for resource management configurations like sizeLimit on emptyDir volumes.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1230
File: jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm:43-55
Timestamp: 2025-07-01T06:48:21.070Z
Learning: When security concerns are raised during PR reviews in opendatahub-io/notebooks, comprehensive follow-up issues are created (often by CodeRabbit) to track all related security enhancements with clear acceptance criteria and implementation guidance. This ensures security improvements are systematically addressed in dedicated efforts rather than blocking current deliverables.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1151
File: jupyter/tensorflow/ubi9-python-3.12/kustomize/base/statefulset.yaml:11-17
Timestamp: 2025-07-01T06:50:37.115Z
Learning: jiridanek manages StatefulSet selector issues systematically across multiple images in opendatahub-io/notebooks. When the same configuration issue (empty spec.selector and template.metadata.labels) appears in different images like jupyter/minimal and jupyter/tensorflow, he tracks them under a single coordinated effort rather than creating duplicate issues for each affected image.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: jiridanek's team uses containerized dependency locking for cross-platform compatibility in opendatahub-io/notebooks. They run `pipenv lock` inside UBI9 containers with specific platform arguments (`--platform=linux/amd64 --python-version 3.12`) to avoid host OS dependency conflicts when generating Pipfile.lock files.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: In the opendatahub-io/notebooks repository, TensorFlow packages with `extras = ["and-cuda"]` can cause build conflicts on macOS due to platform-specific CUDA packages. When the Dockerfile installs CUDA system-wide, removing the extras and letting TensorFlow find CUDA at runtime resolves these conflicts.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1154
File: manifests/base/jupyter-pytorch-notebook-imagestream.yaml:0-0
Timestamp: 2025-06-16T11:06:33.139Z
Learning: In the opendatahub-io/notebooks repository, N-1 versions of images in manifest files (like imagestream.yaml files) should not be updated regularly. The versions of packages like codeflare-sdk in N-1 images are frozen to what was released when the image was moved from N to N-1 version. N-1 images are only updated for security vulnerabilities of packages, not for regular version bumps. This is why the version of packages in N-1 images may be quite old compared to the latest N version.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1154
File: manifests/base/jupyter-tensorflow-notebook-imagestream.yaml:45-45
Timestamp: 2025-06-13T08:34:01.300Z
Learning: When updating dependency versions in `manifests/base/*-imagestream.yaml`, the project convention is to modify only the newest tag (e.g., "2025.1") and intentionally leave earlier tags (e.g., "2024.2") unchanged.
jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/service.yaml (2)
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing `runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml` file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1230
File: jupyter/pytorch/ubi9-python-3.12/kustomize/components/accelerator/pod-patch.yaml:11-22
Timestamp: 2025-06-30T14:36:53.890Z
Learning: The pod-patch.yaml file in jupyter/pytorch/ubi9-python-3.12/kustomize/components/accelerator/ is used only for running tests, not production deployments. This affects the risk assessment for resource management configurations like sizeLimit on emptyDir volumes.
jupyter/rocm/pytorch/ubi9-python-3.12/de-vendor-torch.sh (1)
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing `runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml` file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
jupyter/rocm/pytorch/ubi9-python-3.12/Pipfile (5)
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing `runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml` file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: jiridanek's team uses containerized dependency locking for cross-platform compatibility in opendatahub-io/notebooks. They run `pipenv lock` inside UBI9 containers with specific platform arguments (`--platform=linux/amd64 --python-version 3.12`) to avoid host OS dependency conflicts when generating Pipfile.lock files.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: The jupyter-bokeh package was previously pinned to version 3.0.5 in the TrustyAI notebook image due to compatibility requirements with TrustyAI components, as indicated by the comment "Should be pinned down to this version in order to be compatible with trustyai" that was removed in this update.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/datascience/ubi9-python-3.11/Pipfile:34-36
Timestamp: 2025-06-28T14:13:27.890Z
Learning: In the opendatahub-io/notebooks repository, the dependency pinning strategy follows a deliberate pattern: core `jupyterlab` package uses exact pinning (==) across all notebook images to ensure UI consistency, while JupyterLab extensions and all server components (jupyter-server, jupyter-server-proxy, jupyter-server-terminals) use compatible release (~=) pinning to allow automatic security updates and bug fixes while maintaining API compatibility.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/statefulset.yaml (7)
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T07:11:44.903Z
Learning: Resource limits in StatefulSet manifests in opendatahub-io/notebooks are configured for testing purposes, not production deployments. This affects risk assessment when reviewing resource configurations like memory and CPU limits.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing `runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml` file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1151
File: jupyter/tensorflow/ubi9-python-3.12/kustomize/base/statefulset.yaml:11-17
Timestamp: 2025-07-01T06:50:37.115Z
Learning: jiridanek manages StatefulSet selector issues systematically across multiple images in opendatahub-io/notebooks. When the same configuration issue (empty spec.selector and template.metadata.labels) appears in different images like jupyter/minimal and jupyter/tensorflow, he tracks them under a single coordinated effort rather than creating duplicate issues for each affected image.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1151
File: jupyter/tensorflow/ubi9-python-3.12/kustomize/base/statefulset.yaml:11-17
Timestamp: 2025-07-01T06:50:37.115Z
Learning: StatefulSet selector issue with empty `spec.selector: {}` is a known systemic problem across multiple images in opendatahub-io/notebooks repository, tracked in issue #1236. This affects multiple StatefulSet manifests and is being addressed centrally rather than in individual PRs.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1230
File: jupyter/pytorch/ubi9-python-3.12/kustomize/components/accelerator/pod-patch.yaml:11-22
Timestamp: 2025-06-30T14:36:53.890Z
Learning: The pod-patch.yaml file in jupyter/pytorch/ubi9-python-3.12/kustomize/components/accelerator/ is used only for running tests, not production deployments. This affects the risk assessment for resource management configurations like sizeLimit on emptyDir volumes.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1230
File: jupyter/pytorch/ubi9-python-3.12/kustomize/base/statefulset.yaml:54-60
Timestamp: 2025-06-30T14:43:08.138Z
Learning: Issue #1212 in opendatahub-io/notebooks demonstrates that missing securityContext configuration (allowPrivilegeEscalation, runAsNonRoot, seccompProfile) causes runtime pods to fail reaching ready state and timeout after 300s on OpenShift due to PodSecurity policy violations.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: Runtime deployment tests in opendatahub-io/notebooks may show PodSecurity warnings about allowPrivilegeEscalation, capabilities, runAsNonRoot, and seccompProfile settings. These warnings occur on OpenShift but not on GitHub Actions because GitHub Actions uses upstream Kubernetes without SecurityContextConstraints (SCC).
jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm (9)
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing `runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml` file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: In the opendatahub-io/notebooks repository, TensorFlow packages with `extras = ["and-cuda"]` can cause build conflicts on macOS due to platform-specific CUDA packages. When the Dockerfile installs CUDA system-wide, removing the extras and letting TensorFlow find CUDA at runtime resolves these conflicts.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: jiridanek's team uses containerized dependency locking for cross-platform compatibility in opendatahub-io/notebooks. They run `pipenv lock` inside UBI9 containers with specific platform arguments (`--platform=linux/amd64 --python-version 3.12`) to avoid host OS dependency conflicts when generating Pipfile.lock files.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1151
File: jupyter/tensorflow/ubi9-python-3.12/kustomize/base/statefulset.yaml:11-17
Timestamp: 2025-07-01T06:50:37.115Z
Learning: jiridanek manages StatefulSet selector issues systematically across multiple images in opendatahub-io/notebooks. When the same configuration issue (empty spec.selector and template.metadata.labels) appears in different images like jupyter/minimal and jupyter/tensorflow, he tracks them under a single coordinated effort rather than creating duplicate issues for each affected image.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1230
File: jupyter/pytorch/ubi9-python-3.12/kustomize/components/accelerator/pod-patch.yaml:11-22
Timestamp: 2025-06-30T14:35:34.805Z
Learning: In the opendatahub-io/notebooks repository, mounting emptyDir volumes over /opt/app-root/src is intentional behavior that matches production deployment patterns where odh-dashboard mounts empty PVCs at this location (the $HOME directory). This mounting is expected to hide base image content.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1154
File: manifests/base/jupyter-pytorch-notebook-imagestream.yaml:0-0
Timestamp: 2025-06-16T11:06:33.139Z
Learning: In the opendatahub-io/notebooks repository, N-1 versions of images in manifest files (like imagestream.yaml files) should not be updated regularly. The versions of packages like codeflare-sdk in N-1 images are frozen to what was released when the image was moved from N to N-1 version. N-1 images are only updated for security vulnerabilities of packages, not for regular version bumps. This is why the version of packages in N-1 images may be quite old compared to the latest N version.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1230
File: jupyter/pytorch/ubi9-python-3.12/kustomize/base/statefulset.yaml:54-60
Timestamp: 2025-06-30T14:43:08.138Z
Learning: Issue #1212 in opendatahub-io/notebooks demonstrates that missing securityContext configuration (allowPrivilegeEscalation, runAsNonRoot, seccompProfile) causes runtime pods to fail reaching ready state and timeout after 300s on OpenShift due to PodSecurity policy violations.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: Runtime deployment tests in opendatahub-io/notebooks may show PodSecurity warnings about allowPrivilegeEscalation, capabilities, runAsNonRoot, and seccompProfile settings. These warnings occur on OpenShift but not on GitHub Actions because GitHub Actions uses upstream Kubernetes without SecurityContextConstraints (SCC).
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: OpenShift CI infrastructure issues in opendatahub-io/notebooks can manifest as "ContainerFailed one or more containers exited" errors in release steps, or as "Entrypoint received interrupt: terminated" messages when pods are killed during CI runs. These are typically infrastructure-level issues rather than code problems.
runtimes/pytorch/ubi9-python-3.11/requirements.txt (5)

undefined

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: TrustyAI's jupyter-bokeh was pinned to 3.0.5 due to compatibility requirements with TrustyAI's visualization components, but the actual deployed version in requirements.txt shows 3.0.7, indicating incremental testing. The upgrade to 4.0.5 in this PR represents the completion of a gradual migration strategy from the 3.x series after confirming compatibility with Bokeh 3.7.3.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: In the opendatahub-io/notebooks repository, TensorFlow packages with extras = ["and-cuda"] can cause build conflicts on macOS due to platform-specific CUDA packages. When the Dockerfile installs CUDA system-wide, removing the extras and letting TensorFlow find CUDA at runtime resolves these conflicts.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI 0.6.1 (latest version as of June 2025) has a hard dependency constraint on jupyter-bokeh~=3.0.5, preventing upgrades to jupyter-bokeh 4.x in notebook images that include TrustyAI. This requires either waiting for TrustyAI to update their dependency or excluding TrustyAI from jupyter-bokeh upgrades.
</retrieved_learning>

runtimes/datascience/ubi9-python-3.11/requirements.txt (6)

undefined

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: TrustyAI's jupyter-bokeh was pinned to 3.0.5 due to compatibility requirements with TrustyAI's visualization components, but the actual deployed version in requirements.txt shows 3.0.7, indicating incremental testing. The upgrade to 4.0.5 in this PR represents the completion of a gradual migration strategy from the 3.x series after confirming compatibility with Bokeh 3.7.3.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: The jupyter-bokeh package was previously pinned to version 3.0.5 in the TrustyAI notebook image due to compatibility requirements with TrustyAI components, as indicated by the comment "Should be pinned down to this version in order to be compatible with trustyai" that was removed in this update.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: The jupyter-bokeh pinning to 3.0.5 in TrustyAI notebook image was not due to TrustyAI code compatibility issues, but because the trustyai package itself explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency, causing pip dependency resolution conflicts when trying to upgrade to jupyter-bokeh 4.x.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI 0.6.1 (latest version as of June 2025) has a hard dependency constraint on jupyter-bokeh~=3.0.5, preventing upgrades to jupyter-bokeh 4.x in notebook images that include TrustyAI. This requires either waiting for TrustyAI to update their dependency or excluding TrustyAI from jupyter-bokeh upgrades.
</retrieved_learning>

runtimes/rocm-pytorch/ubi9-python-3.11/requirements.txt (5)

undefined

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: TrustyAI's jupyter-bokeh was pinned to 3.0.5 due to compatibility requirements with TrustyAI's visualization components, but the actual deployed version in requirements.txt shows 3.0.7, indicating incremental testing. The upgrade to 4.0.5 in this PR represents the completion of a gradual migration strategy from the 3.x series after confirming compatibility with Bokeh 3.7.3.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: In the opendatahub-io/notebooks repository, TensorFlow packages with extras = ["and-cuda"] can cause build conflicts on macOS due to platform-specific CUDA packages. When the Dockerfile installs CUDA system-wide, removing the extras and letting TensorFlow find CUDA at runtime resolves these conflicts.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI 0.6.1 (latest version as of June 2025) has a hard dependency constraint on jupyter-bokeh~=3.0.5, preventing upgrades to jupyter-bokeh 4.x in notebook images that include TrustyAI. This requires either waiting for TrustyAI to update their dependency or excluding TrustyAI from jupyter-bokeh upgrades.
</retrieved_learning>

runtimes/rocm-tensorflow/ubi9-python-3.11/requirements.txt (4)

undefined

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: In the opendatahub-io/notebooks repository, TensorFlow packages with extras = ["and-cuda"] can cause build conflicts on macOS due to platform-specific CUDA packages. When the Dockerfile installs CUDA system-wide, removing the extras and letting TensorFlow find CUDA at runtime resolves these conflicts.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI 0.6.1 (latest version as of June 2025) has a hard dependency constraint on jupyter-bokeh~=3.0.5, preventing upgrades to jupyter-bokeh 4.x in notebook images that include TrustyAI. This requires either waiting for TrustyAI to update their dependency or excluding TrustyAI from jupyter-bokeh upgrades.
</retrieved_learning>

jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/kustomization.yaml (5)
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing `runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml` file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1230
File: jupyter/pytorch/ubi9-python-3.12/kustomize/components/accelerator/pod-patch.yaml:11-22
Timestamp: 2025-06-30T14:36:53.890Z
Learning: The pod-patch.yaml file in jupyter/pytorch/ubi9-python-3.12/kustomize/components/accelerator/ is used only for running tests, not production deployments. This affects the risk assessment for resource management configurations like sizeLimit on emptyDir volumes.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/rocm/pytorch/ubi9-python-3.11/requirements.txt:987-989
Timestamp: 2025-06-28T15:06:03.344Z
Learning: In the opendatahub-io/notebooks repository, checks for broken links and missing files in kustomization manifests are already performed by `ci/kustomize.sh`, which is invoked from `.github/workflows/code-quality.yaml` (lines 112–116). No additional pytest is needed for this purpose.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1151
File: jupyter/tensorflow/ubi9-python-3.12/kustomize/base/statefulset.yaml:11-17
Timestamp: 2025-07-01T06:50:37.115Z
Learning: jiridanek manages StatefulSet selector issues systematically across multiple images in opendatahub-io/notebooks. When the same configuration issue (empty spec.selector and template.metadata.labels) appears in different images like jupyter/minimal and jupyter/tensorflow, he tracks them under a single coordinated effort rather than creating duplicate issues for each affected image.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1151
File: jupyter/tensorflow/ubi9-python-3.12/kustomize/base/statefulset.yaml:11-17
Timestamp: 2025-07-01T06:50:37.115Z
Learning: StatefulSet selector issue with empty `spec.selector: {}` is a known systemic problem across multiple images in opendatahub-io/notebooks repository, tracked in issue #1236. This affects multiple StatefulSet manifests and is being addressed centrally rather than in individual PRs.
jupyter/rocm/pytorch/ubi9-python-3.12/test/test_notebook.ipynb (5)
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing `runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml` file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1247
File: .github/workflows/build-notebooks-TEMPLATE.yaml:50-53
Timestamp: 2025-07-01T14:36:52.815Z
Learning: In the opendatahub-io/notebooks repository, the test runner's Python version (configured in GitHub Actions UV setup) intentionally doesn't need to match the Python version of the container images being tested. jiridanek's team uses Python 3.12 for running tests while images may use different Python versions (like 3.11), and this approach works fine since the test code is separate from the application code running inside the containers.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: TrustyAI's jupyter-bokeh was pinned to 3.0.5 due to compatibility requirements with TrustyAI's visualization components, but the actual deployed version in requirements.txt shows 3.0.7, indicating incremental testing. The upgrade to 4.0.5 in this PR represents the completion of a gradual migration strategy from the 3.x series after confirming compatibility with Bokeh 3.7.3.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: Test failures in opendatahub-io/notebooks should be categorized as either repository bugs (code/configuration issues) or infrastructure issues (CI platform problems) for proper diagnosis and resolution.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/rocm/pytorch/ubi9-python-3.11/requirements.txt:987-989
Timestamp: 2025-06-28T15:06:03.344Z
Learning: In the opendatahub-io/notebooks repository, checks for broken links and missing files in kustomization manifests are already performed by `ci/kustomize.sh`, which is invoked from `.github/workflows/code-quality.yaml` (lines 112–116). No additional pytest is needed for this purpose.
codeserver/ubi9-python-3.11/requirements.txt (6)
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: TrustyAI's jupyter-bokeh was pinned to 3.0.5 due to compatibility requirements with TrustyAI's visualization components, but the actual deployed version in requirements.txt shows 3.0.7, indicating incremental testing. The upgrade to 4.0.5 in this PR represents the completion of a gradual migration strategy from the 3.x series after confirming compatibility with Bokeh 3.7.3.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: The jupyter-bokeh pinning to 3.0.5 in TrustyAI notebook image was not due to TrustyAI code compatibility issues, but because the trustyai package itself explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency, causing pip dependency resolution conflicts when trying to upgrade to jupyter-bokeh 4.x.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: The jupyter-bokeh package was previously pinned to version 3.0.5 in the TrustyAI notebook image due to compatibility requirements with TrustyAI components, as indicated by the comment "Should be pinned down to this version in order to be compatible with trustyai" that was removed in this update.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI 0.6.1 (latest version as of June 2025) has a hard dependency constraint on jupyter-bokeh~=3.0.5, preventing upgrades to jupyter-bokeh 4.x in notebook images that include TrustyAI. This requires either waiting for TrustyAI to update their dependency or excluding TrustyAI from jupyter-bokeh upgrades.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: jiridanek's team uses containerized dependency locking for cross-platform compatibility in opendatahub-io/notebooks. They run `pipenv lock` inside UBI9 containers with specific platform arguments (`--platform=linux/amd64 --python-version 3.12`) to avoid host OS dependency conflicts when generating Pipfile.lock files.
jupyter/datascience/ubi9-python-3.11/requirements.txt (7)

undefined

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: TrustyAI's jupyter-bokeh was pinned to 3.0.5 due to compatibility requirements with TrustyAI's visualization components, but the actual deployed version in requirements.txt shows 3.0.7, indicating incremental testing. The upgrade to 4.0.5 in this PR represents the completion of a gradual migration strategy from the 3.x series after confirming compatibility with Bokeh 3.7.3.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: The jupyter-bokeh package was previously pinned to version 3.0.5 in the TrustyAI notebook image due to compatibility requirements with TrustyAI components, as indicated by the comment "Should be pinned down to this version in order to be compatible with trustyai" that was removed in this update.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: The jupyter-bokeh pinning to 3.0.5 in TrustyAI notebook image was not due to TrustyAI code compatibility issues, but because the trustyai package itself explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency, causing pip dependency resolution conflicts when trying to upgrade to jupyter-bokeh 4.x.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: In the opendatahub-io/notebooks repository, TensorFlow packages with extras = ["and-cuda"] can cause build conflicts on macOS due to platform-specific CUDA packages. When the Dockerfile installs CUDA system-wide, removing the extras and letting TensorFlow find CUDA at runtime resolves these conflicts.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/datascience/ubi9-python-3.11/Pipfile:34-36
Timestamp: 2025-06-28T14:13:27.890Z
Learning: In the opendatahub-io/notebooks repository, the dependency pinning strategy follows a deliberate pattern: core jupyterlab package uses exact pinning (==) across all notebook images to ensure UI consistency, while JupyterLab extensions and all server components (jupyter-server, jupyter-server-proxy, jupyter-server-terminals) use compatible release (~=) pinning to allow automatic security updates and bug fixes while maintaining API compatibility.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI 0.6.1 (latest version as of June 2025) has a hard dependency constraint on jupyter-bokeh~=3.0.5, preventing upgrades to jupyter-bokeh 4.x in notebook images that include TrustyAI. This requires either waiting for TrustyAI to update their dependency or excluding TrustyAI from jupyter-bokeh upgrades.
</retrieved_learning>

jupyter/minimal/ubi9-python-3.11/requirements.txt (4)
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: TrustyAI's jupyter-bokeh was pinned to 3.0.5 due to compatibility requirements with TrustyAI's visualization components, but the actual deployed version in requirements.txt shows 3.0.7, indicating incremental testing. The upgrade to 4.0.5 in this PR represents the completion of a gradual migration strategy from the 3.x series after confirming compatibility with Bokeh 3.7.3.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: The jupyter-bokeh pinning to 3.0.5 in TrustyAI notebook image was not due to TrustyAI code compatibility issues, but because the trustyai package itself explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency, causing pip dependency resolution conflicts when trying to upgrade to jupyter-bokeh 4.x.
Learnt from: jiridanek
PR: opendatahub-io/notebooks#1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: The jupyter-bokeh package was previously pinned to version 3.0.5 in the TrustyAI notebook image due to compatibility requirements with TrustyAI components, as indicated by the comment "Should be pinned down to this version in order to be compatible with trustyai" that was removed in this update.
jupyter/pytorch/ubi9-python-3.11/requirements.txt (6)

undefined

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: TrustyAI's jupyter-bokeh was pinned to 3.0.5 due to compatibility requirements with TrustyAI's visualization components, but the actual deployed version in requirements.txt shows 3.0.7, indicating incremental testing. The upgrade to 4.0.5 in this PR represents the completion of a gradual migration strategy from the 3.x series after confirming compatibility with Bokeh 3.7.3.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: In the opendatahub-io/notebooks repository, TensorFlow packages with extras = ["and-cuda"] can cause build conflicts on macOS due to platform-specific CUDA packages. When the Dockerfile installs CUDA system-wide, removing the extras and letting TensorFlow find CUDA at runtime resolves these conflicts.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: The jupyter-bokeh package was previously pinned to version 3.0.5 in the TrustyAI notebook image due to compatibility requirements with TrustyAI components, as indicated by the comment "Should be pinned down to this version in order to be compatible with trustyai" that was removed in this update.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: The jupyter-bokeh pinning to 3.0.5 in TrustyAI notebook image was not due to TrustyAI code compatibility issues, but because the trustyai package itself explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency, causing pip dependency resolution conflicts when trying to upgrade to jupyter-bokeh 4.x.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
</retrieved_learning>

runtimes/tensorflow/ubi9-python-3.11/requirements.txt (5)

undefined

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: In the opendatahub-io/notebooks repository, TensorFlow packages with extras = ["and-cuda"] can cause build conflicts on macOS due to platform-specific CUDA packages. When the Dockerfile installs CUDA system-wide, removing the extras and letting TensorFlow find CUDA at runtime resolves these conflicts.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: TrustyAI's jupyter-bokeh was pinned to 3.0.5 due to compatibility requirements with TrustyAI's visualization components, but the actual deployed version in requirements.txt shows 3.0.7, indicating incremental testing. The upgrade to 4.0.5 in this PR represents the completion of a gradual migration strategy from the 3.x series after confirming compatibility with Bokeh 3.7.3.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI 0.6.1 (latest version as of June 2025) has a hard dependency constraint on jupyter-bokeh~=3.0.5, preventing upgrades to jupyter-bokeh 4.x in notebook images that include TrustyAI. This requires either waiting for TrustyAI to update their dependency or excluding TrustyAI from jupyter-bokeh upgrades.
</retrieved_learning>

jupyter/rocm/pytorch/ubi9-python-3.11/requirements.txt (6)

undefined

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-06-16T11:32:09.203Z
Learning: In the opendatahub-io/notebooks repository, there is a known issue with missing runtimes/rocm/pytorch/ubi9-python-3.11/kustomize/base/kustomization.yaml file that causes rocm runtime tests to fail with "no such file or directory" error. This is tracked in JIRA RHOAIENG-22044 and was intended to be fixed in PR #1015.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: TrustyAI explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency in both their requirements.txt and pyproject.toml files, with no open issues tracking jupyter-bokeh 4.x compatibility. This creates an unresolvable pip dependency conflict when trying to upgrade jupyter-bokeh to 4.x in notebook images that include TrustyAI.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: TrustyAI's jupyter-bokeh was pinned to 3.0.5 due to compatibility requirements with TrustyAI's visualization components, but the actual deployed version in requirements.txt shows 3.0.7, indicating incremental testing. The upgrade to 4.0.5 in this PR represents the completion of a gradual migration strategy from the 3.x series after confirming compatibility with Bokeh 3.7.3.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:15:41.168Z
Learning: The jupyter-bokeh package was previously pinned to version 3.0.5 in the TrustyAI notebook image due to compatibility requirements with TrustyAI components, as indicated by the comment "Should be pinned down to this version in order to be compatible with trustyai" that was removed in this update.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: opendatahub-io/notebooks#0
File: :0-0
Timestamp: 2025-07-01T10:41:56.419Z
Learning: In the opendatahub-io/notebooks repository, TensorFlow packages with extras = ["and-cuda"] can cause build conflicts on macOS due to platform-specific CUDA packages. When the Dockerfile installs CUDA system-wide, removing the extras and letting TensorFlow find CUDA at runtime resolves these conflicts.
</retrieved_learning>

<retrieved_learning>
Learnt from: jiridanek
PR: #1218
File: jupyter/trustyai/ubi9-python-3.11/Pipfile:49-49
Timestamp: 2025-06-28T14:21:09.429Z
Learning: The jupyter-bokeh pinning to 3.0.5 in TrustyAI notebook image was not due to TrustyAI code compatibility issues, but because the trustyai package itself explicitly declares jupyter-bokeh~=3.0.5 as a hard dependency, causing pip dependency resolution conflicts when trying to upgrade to jupyter-bokeh 4.x.
</retrieved_learning>

🪛 Checkov (3.2.334)
jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/statefulset.yaml

[MEDIUM] 2-58: Containers should not run with allowPrivilegeEscalation

(CKV_K8S_20)


[MEDIUM] 2-58: Minimize the admission of root containers

(CKV_K8S_23)

⏰ Context from checks skipped due to timeout of 90000ms (13)
  • GitHub Check: build (rocm-jupyter-pytorch-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (runtime-datascience-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (rocm-jupyter-tensorflow-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (runtime-cuda-tensorflow-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (cuda-jupyter-pytorch-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (jupyter-datascience-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (rocm-runtime-tensorflow-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (codeserver-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (jupyter-minimal-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (rocm-jupyter-minimal-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (cuda-jupyter-minimal-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (runtime-cuda-pytorch-ubi9-python-3.11, 3.11, linux/amd64, false) / build
  • GitHub Check: build (rocm-runtime-pytorch-ubi9-python-3.11, 3.11, linux/amd64, false) / build
🔇 Additional comments (5)
jupyter/rocm/pytorch/ubi9-python-3.12/kustomize/base/service.yaml (1)

8-15: Check label / selector coherence with StatefulSet after namePrefix is applied
selector.app: notebook must match the post-kustomize pod labels. If the template in statefulset.yaml stays empty while namePrefix & label transformers run, the final label set might diverge (e.g. app: jupyter-rocm-…). That breaks traffic routing and readiness probes.
Please run kustomize build (or the CI job) and inspect that

metadata.labels.app == spec.selector.matchLabels.app == pod template.metadata.labels.app

for both Service and StatefulSet.

jupyter/rocm/pytorch/ubi9-python-3.12/Pipfile (1)

16-20: Verify the existence of wheel artifacts for PyTorch 2.6.0 + ROCm 6.2.4
At the time of writing, upstream often lags ROCm wheels behind trunk. Ensure the custom index actually contains the exact versions; otherwise the build will fail.

If wheels are not yet published, pin to the latest available combo or build from source in the Dockerfile.

jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm (2)

143-151: LGTM: Well-structured image metadata.

The label definitions follow container best practices with comprehensive metadata including source location, build information, and display names.


155-176: LGTM: Comprehensive PyTorch environment setup.

The build process properly installs dependencies, configures Jupyter, applies customizations, and handles ROCm library de-vendoring. The permission fixes ensure OpenShift compatibility.

jupyter/rocm/pytorch/ubi9-python-3.12/test/test_notebook.ipynb (1)

142-154: LGTM: TensorBoard integration test covers essential functionality.

The test properly validates TensorBoard writer creation and usage with image logging, which is essential for the PyTorch environment.

Comment on lines 97 to +100
aiohttp-cors==0.8.1; python_version >= '3.9' \
--hash=sha256:3180cf304c5c712d626b9162b195b1db7ddf976a2a25172b35bb2448b890a80d \
--hash=sha256:ccacf9cb84b64939ea15f859a146af1f662a6b1d68175754a07315e305fb1403
>>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Unresolved merge-conflict marker will break installation

Line 100 still contains a >>>>>>> <sha> marker. pip will choke on this invalid requirement spec and abort the build, blocking image creation.

->>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef

Delete the marker (and any matching <<<<<<</======= siblings, if present in other files) and re-generate the lock/requirements files.

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In runtimes/datascience/ubi9-python-3.11/requirements.txt around lines 97 to
100, there is an unresolved merge conflict marker `>>>>>>>
6cd9ddb8dfc226e673fb229d12238159900806ef` that will cause pip installation to
fail. Remove this conflict marker and any related `<<<<<<<` or `=======` markers
if present, then regenerate the lock or requirements files to ensure a clean,
valid requirements specification.

Comment on lines 101 to 105
aiohttp-cors==0.8.1; python_version >= '3.9' \
--hash=sha256:3180cf304c5c712d626b9162b195b1db7ddf976a2a25172b35bb2448b890a80d \
--hash=sha256:ccacf9cb84b64939ea15f859a146af1f662a6b1d68175754a07315e305fb1403
>>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef
aiosignal==1.3.2; python_version >= '3.9' \
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Remove leftover merge-conflict marker – it breaks pip install.

The >>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef line is an unresolved merge-conflict artefact. pip will choke on it and abort the build of every ROCm PyTorch image derived from this requirements file.

->>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef

Delete the line, push, and rebuild the image.


🏁 Script executed:

#!/bin/bash
# Scan the repo for any additional conflict markers.
rg --line-number --fixed-strings -e '<<<<<<<' -e '=======' -e '>>>>>>>'

Length of output: 5248


Remove all leftover merge-conflict markers across the repo

Our scan surfaced unresolved conflict markers (<<<<<<<, =======, >>>>>>>) in multiple requirements.txt and Pipfile.lock files, which will break pip install and image builds. Please delete every line containing these markers and verify that no conflicts remain.

Key locations needing cleanup:

  • runtimes/rocm-pytorch/ubi9-python-3.11/requirements.txt: line 104
  • runtimes/rocm-tensorflow/ubi9-python-3.11/requirements.txt: lines 697–701 and 103
  • codeserver/ubi9-python-3.11/requirements.txt: lines 11–25, 283, 597–673
  • Various Pipfile.lock files under jupyter/ and runtimes/ (e.g. lines 1212–1224 in jupyter/rocm/tensorflow/ubi9-python-3.11/Pipfile.lock)

Example diff (remove all these kinds of lines):

- >>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef

After cleanup, run:

rg --fixed-strings -e '<<<<<<<' -e '=======' -e '>>>>>>>'

to confirm there are zero results, then rebuild the images to ensure all requirements parse correctly.

🤖 Prompt for AI Agents
In runtimes/rocm-pytorch/ubi9-python-3.11/requirements.txt around line 104,
remove all merge conflict markers such as <<<<<<<, =======, and >>>>>>>. Ensure
to delete the entire lines containing these markers and verify no other conflict
markers remain in this file or other specified files. After cleanup, run a
search for these markers across the repo to confirm none remain and rebuild the
images to validate requirements parsing.

Comment on lines 101 to +104
aiohttp-cors==0.8.1; python_version >= '3.9' \
--hash=sha256:3180cf304c5c712d626b9162b195b1db7ddf976a2a25172b35bb2448b890a80d \
--hash=sha256:ccacf9cb84b64939ea15f859a146af1f662a6b1d68175754a07315e305fb1403
>>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Remove unresolved Git conflict marker – breaks pip install.

Line 104 still contains a merge-conflict terminator. Any pip install -r will fail because this line is not a valid requirement spec.

->>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef

Delete the line and re-run sync-requirements-txt.sh so the lockfile hashes remain intact.


🏁 Script executed:

#!/usr/bin/env bash
# Find any leftover conflict markers across the repo
rg -n $'^(<<<<<<<|=======|>>>>>>>)' --color=always

Length of output: 7980


Remove all Git conflict markers in requirements and lockfiles – pip install will fail

The search revealed leftover conflict markers (<<<<<<<, =======, >>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef) across multiple files. You must delete all of these marker lines and regenerate the synced requirement files and lockfiles.

Key locations (not exhaustive) include:

  • runtimes/rocm-pytorch/ubi9-python-3.11/requirements.txt: line 104
  • runtimes/pytorch/ubi9-python-3.11/requirements.txt: line 104
  • runtimes/tensorflow/ubi9-python-3.11/requirements.txt: line 103
  • runtimes/*/ubi9-python-3.11/Pipfile.lock: lines 139, 907–919 (and similar blocks)
  • jupyter/*/ubi9-python-3.11/requirements.txt and Pipfile.lock: numerous conflict blocks
  • codeserver/ubi9-python-3.11/requirements.txt and Pipfile.lock: conflict markers at the top and elsewhere

Action items:

  • Remove every line starting with <<<<<<<, =======, or >>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef in all affected files.
  • Re-run sync-requirements-txt.sh (and, where applicable, pipenv lock --requirements) for each runtime and image variant to restore valid hashes and dependency specs.

This will ensure all requirements.txt and lockfiles are clean and installable.

🤖 Prompt for AI Agents
In runtimes/pytorch/ubi9-python-3.11/requirements.txt around line 104, remove
all Git conflict markers such as <<<<<<<, =======, and >>>>>>>
6cd9ddb8dfc226e673fb229d12238159900806ef. After cleaning these markers from this
and all other affected requirements and lockfiles, rerun the
sync-requirements-txt.sh script and pipenv lock --requirements where applicable
to regenerate valid hashes and dependency specifications, ensuring the files are
clean and pip install will succeed.

Comment on lines +670 to +673
platformdirs==4.3.6; python_version >= '3.8' \
--hash=sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907 \
--hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb
=======
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Duplicate platformdirs entry after conflict merge

Even after resolving markers, ensure only one platformdirs line is present.
Having both 4.3.6 and 4.3.8 will cause pip resolution conflicts.

Run the sync script again or grep for duplicates:

Expect exactly one line in the final file.

Also applies to: 756-759


🏁 Script executed:

#!/bin/bash
grep -n '^platformdirs==' codeserver/ubi9-python-3.11/requirements.txt

Length of output: 174


Remove duplicate platformdirs entries

There are two conflicting entries for platformdirs in codeserver/ubi9-python-3.11/requirements.txt. Please keep exactly one, for example the newer 4.3.8 line, and remove the older 4.3.6 entry:

• Line 670–673 (platformdirs==4.3.6; python_version >= '3.8')
• Line 756–759 (platformdirs==4.3.8; python_version >= '3.9')

Suggested change (keep 4.3.8):

--- a/codeserver/ubi9-python-3.11/requirements.txt
+++ b/codeserver/ubi9-python-3.11/requirements.txt
@@ -667,8 +667,6 @@
 platformdirs==4.3.6; python_version >= '3.8' \
-    --hash=sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907 \
-    --hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb
=======

Remove lines 670–673 entirely so only the 4.3.8 entry remains.

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In codeserver/ubi9-python-3.11/requirements.txt at lines 670 to 673, there is a
duplicate entry for platformdirs version 4.3.6 that conflicts with a newer
version 4.3.8 listed at lines 756 to 759. Remove the entire block from lines 670
to 673 to keep only the newer platformdirs==4.3.8 entry and avoid version
conflicts.

Comment on lines +11 to +25
<<<<<<< HEAD
boto3==1.37.15; python_version >= '3.8' \
--hash=sha256:586332456fff19328d57a88214a2ac2eda1bafab743556a836eda46a4ce613c6 \
--hash=sha256:78cc1b483cc637e1df8e81498d66f89550d4ee92175ccab5be1a2226672fe6b9
botocore==1.37.15; python_version >= '3.8' \
--hash=sha256:72e6f1db6ebc4112d6ba719c97ad71ac7cf4a2f3729ae74fa225641e3ddcba92 \
--hash=sha256:996b8d6a342ad7735eb07d8b4a81dad86e60ce0889ccb3edec0cd66eece85393
=======
boto3==1.37.38; python_version >= '3.8' \
--hash=sha256:88c02910933ab7777597d1ca7c62375f52822e0aa1a8e0c51b2598a547af42b2 \
--hash=sha256:b6d42803607148804dff82389757827a24ce9271f0583748853934c86310999f
botocore==1.37.38; python_version >= '3.8' \
--hash=sha256:23b4097780e156a4dcaadfc1ed156ce25cb95b6087d010c4bb7f7f5d9bc9d219 \
--hash=sha256:c3ea386177171f2259b284db6afc971c959ec103fa2115911c4368bea7cbbc5d
>>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Unresolved merge-conflict markers make the file syntactically invalid

<<<<<<< HEAD, =======, and >>>>>>> … are still present.
pip install -r requirements.txt will choke on these lines and the build will fail.

-<<<<<<< HEAD
-boto3==1.37.15 …
-botocore==1.37.15 …
-=======
+boto3==1.37.38 …      # keep ONE coherent block (or regenerate via sync script)
+botocore==1.37.38 …
->>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef

Remove the markers and pick one version of each package (prefer the newer set, or simply rerun /scripts/sync-requirements-txt.sh to regenerate a clean file).
Failing to do so will break every container/image that consumes this requirements file.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<<<<<<< HEAD
boto3==1.37.15; python_version >= '3.8' \
--hash=sha256:586332456fff19328d57a88214a2ac2eda1bafab743556a836eda46a4ce613c6 \
--hash=sha256:78cc1b483cc637e1df8e81498d66f89550d4ee92175ccab5be1a2226672fe6b9
botocore==1.37.15; python_version >= '3.8' \
--hash=sha256:72e6f1db6ebc4112d6ba719c97ad71ac7cf4a2f3729ae74fa225641e3ddcba92 \
--hash=sha256:996b8d6a342ad7735eb07d8b4a81dad86e60ce0889ccb3edec0cd66eece85393
=======
boto3==1.37.38; python_version >= '3.8' \
--hash=sha256:88c02910933ab7777597d1ca7c62375f52822e0aa1a8e0c51b2598a547af42b2 \
--hash=sha256:b6d42803607148804dff82389757827a24ce9271f0583748853934c86310999f
botocore==1.37.38; python_version >= '3.8' \
--hash=sha256:23b4097780e156a4dcaadfc1ed156ce25cb95b6087d010c4bb7f7f5d9bc9d219 \
--hash=sha256:c3ea386177171f2259b284db6afc971c959ec103fa2115911c4368bea7cbbc5d
>>>>>>> 6cd9ddb8dfc226e673fb229d12238159900806ef
# codeserver/ubi9-python-3.11/requirements.txt (lines 11–25)
boto3==1.37.38; python_version >= '3.8' \
--hash=sha256:88c02910933ab7777597d1ca7c62375f52822e0aa1a8e0c51b2598a547af42b2 \
--hash=sha256:b6d42803607148804dff82389757827a24ce9271f0583748853934c86310999f
botocore==1.37.38; python_version >= '3.8' \
--hash=sha256:23b4097780e156a4dcaadfc1ed156ce25cb95b6087d010c4bb7f7f5d9bc9d219 \
--hash=sha256:c3ea386177171f2259b284db6afc971c959ec103fa2115911c4368bea7cbbc5d
🤖 Prompt for AI Agents
In codeserver/ubi9-python-3.11/requirements.txt between lines 11 and 25, there
are unresolved git merge conflict markers (<<<<<<< HEAD, =======, >>>>>>>) that
make the file invalid and cause pip install to fail. Remove all these conflict
markers and choose one consistent version of each package, preferably the newer
versions shown after the ======= marker. Alternatively, rerun the
/scripts/sync-requirements-txt.sh script to regenerate a clean requirements.txt
without conflicts.

Comment on lines +56 to +67
RUN echo "[ROCm]" > /etc/yum.repos.d/rocm.repo && \
echo "name=ROCm" >> /etc/yum.repos.d/rocm.repo && \
echo "baseurl=https://repo.radeon.com/rocm/rhel9/$ROCM_VERSION/main" >> /etc/yum.repos.d/rocm.repo && \
echo "enabled=1" >> /etc/yum.repos.d/rocm.repo && \
echo "gpgcheck=0" >> /etc/yum.repos.d/rocm.repo && \
echo "[amdgpu]" > /etc/yum.repos.d/amdgpu.repo && \
echo "name=amdgpu" >> /etc/yum.repos.d/amdgpu.repo && \
echo "baseurl=https://repo.radeon.com/amdgpu/$AMDGPU_VERSION/rhel/9.4/main/x86_64" >> /etc/yum.repos.d/amdgpu.repo && \
echo "enabled=1" >> /etc/yum.repos.d/amdgpu.repo && \
echo "gpgcheck=0" >> /etc/yum.repos.d/amdgpu.repo && \
yum install -y rocm-developer-tools rocm-ml-sdk rocm-opencl-sdk rocm-openmp-sdk rocm-utils && \
yum clean all && rm -rf /var/cache/yum
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Security: Disabled GPG verification for ROCm repositories.

The ROCm and AMDGPU repositories are configured with gpgcheck=0, which disables package signature verification and creates a security vulnerability.

Consider enabling GPG checking if keys are available, or document the security tradeoff:

- echo "gpgcheck=0" >> /etc/yum.repos.d/rocm.repo && \
+ echo "gpgcheck=1" >> /etc/yum.repos.d/rocm.repo && \
+ echo "gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key" >> /etc/yum.repos.d/rocm.repo && \
[...similar for amdgpu repo...]

Verify if AMD provides GPG keys for their repositories:


🌐 Web query:

Does AMD provide GPG keys for ROCm and AMDGPU yum repositories for package signature verification?

💡 Result:

Yes, AMD does provide GPG keys for both the ROCm and AMDGPU yum repositories to enable package signature verification.

When configuring the ROCm or AMDGPU repositories on RHEL, CentOS, or compatible systems using yum or dnf, the standard repository configuration includes the gpgcheck=1 setting along with a gpgkey field pointing to AMD's public signing key. This ensures that both repository metadata and RPM packages are verified for authenticity and integrity before installation.

Key details:

  • The GPG public key used for signature verification is hosted by AMD at:
    **https://repo.radeon.com/rocm/rocm.gpg.key**[1][2][4].

  • Example snippet for a .repo file (as provided in AMD's official ROCm documentation):

    [amdgpu]
    name=amdgpu
    baseurl=https://repo.radeon.com/amdgpu/6.1.1/rhel/9.4/main/x86_64/
    enabled=1
    priority=50
    gpgcheck=1
    gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key
  • The same GPG key is used for both ROCm and AMDGPU repositories across supported RHEL and CentOS versions[2][4].

  • Upon first installation, you may be prompted to import the GPG key (for example, with key ID 1A693C5C), which can also be found in the installer location after extracting or installing the driver RPMs (e.g., /etc/amdgpu-install/rocm.gpg.key)[5].

  • This key is used to verify the digital signatures of the repository metadata and distributed packages, helping prevent tampering or unauthorized modifications[2][5].

In summary:
AMD provides and publicly hosts GPG keys to secure the ROCm and AMDGPU yum repositories, and you are strongly encouraged to include gpgcheck=1 and specify the key location in your repository configuration for proper package signature verification[1][2][4][5].

Citations:


Enable GPG verification for ROCm and AMDGPU repositories

AMD publishes a public GPG key to validate both ROCm and AMDGPU yum repos. Please update your repository definitions to turn on signature checks and reference the key:

• File: jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm
• Lines: 56–67

Suggested diff:

 RUN echo "[ROCm]" > /etc/yum.repos.d/rocm.repo && \
     echo "name=ROCm" >> /etc/yum.repos.d/rocm.repo && \
-    echo "baseurl=https://repo.radeon.com/rocm/rhel9/$ROCM_VERSION/main" >> /etc/yum.repos.d/rocm.repo && \
+    echo "baseurl=https://repo.radeon.com/rocm/rhel9/$ROCM_VERSION/main" >> /etc/yum.repos.d/rocm.repo && \
     echo "enabled=1" >> /etc/yum.repos.d/rocm.repo && \
-    echo "gpgcheck=0" >> /etc/yum.repos.d/rocm.repo && \
+    echo "gpgcheck=1" >> /etc/yum.repos.d/rocm.repo && \
+    echo "gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key" >> /etc/yum.repos.d/rocm.repo && \
     echo "[amdgpu]" > /etc/yum.repos.d/amdgpu.repo && \
     echo "name=amdgpu" >> /etc/yum.repos.d/amdgpu.repo && \
-    echo "baseurl=https://repo.radeon.com/amdgpu/$AMDGPU_VERSION/rhel/9.4/main/x86_64" >> /etc/yum.repos.d/amdgpu.repo && \
+    echo "baseurl=https://repo.radeon.com/amdgpu/$AMDGPU_VERSION/rhel/9.4/main/x86_64" >> /etc/yum.repos.d/amdgpu.repo && \
     echo "enabled=1" >> /etc/yum.repos.d/amdgpu.repo && \
-    echo "gpgcheck=0" >> /etc/yum.repos.d/amdgpu.repo && \
+    echo "gpgcheck=1" >> /etc/yum.repos.d/amdgpu.repo && \
+    echo "gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key" >> /etc/yum.repos.d/amdgpu.repo && \
     yum install -y rocm-developer-tools rocm-ml-sdk rocm-opencl-sdk rocm-openmp-sdk rocm-utils && \
     yum clean all && rm -rf /var/cache/yum

This ensures packages are verified using AMD’s published key: https://repo.radeon.com/rocm/rocm.gpg.key.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
RUN echo "[ROCm]" > /etc/yum.repos.d/rocm.repo && \
echo "name=ROCm" >> /etc/yum.repos.d/rocm.repo && \
echo "baseurl=https://repo.radeon.com/rocm/rhel9/$ROCM_VERSION/main" >> /etc/yum.repos.d/rocm.repo && \
echo "enabled=1" >> /etc/yum.repos.d/rocm.repo && \
echo "gpgcheck=0" >> /etc/yum.repos.d/rocm.repo && \
echo "[amdgpu]" > /etc/yum.repos.d/amdgpu.repo && \
echo "name=amdgpu" >> /etc/yum.repos.d/amdgpu.repo && \
echo "baseurl=https://repo.radeon.com/amdgpu/$AMDGPU_VERSION/rhel/9.4/main/x86_64" >> /etc/yum.repos.d/amdgpu.repo && \
echo "enabled=1" >> /etc/yum.repos.d/amdgpu.repo && \
echo "gpgcheck=0" >> /etc/yum.repos.d/amdgpu.repo && \
yum install -y rocm-developer-tools rocm-ml-sdk rocm-opencl-sdk rocm-openmp-sdk rocm-utils && \
yum clean all && rm -rf /var/cache/yum
RUN echo "[ROCm]" > /etc/yum.repos.d/rocm.repo && \
echo "name=ROCm" >> /etc/yum.repos.d/rocm.repo && \
echo "baseurl=https://repo.radeon.com/rocm/rhel9/$ROCM_VERSION/main" >> /etc/yum.repos.d/rocm.repo && \
echo "enabled=1" >> /etc/yum.repos.d/rocm.repo && \
echo "gpgcheck=1" >> /etc/yum.repos.d/rocm.repo && \
echo "gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key" >> /etc/yum.repos.d/rocm.repo && \
echo "[amdgpu]" > /etc/yum.repos.d/amdgpu.repo && \
echo "name=amdgpu" >> /etc/yum.repos.d/amdgpu.repo && \
echo "baseurl=https://repo.radeon.com/amdgpu/$AMDGPU_VERSION/rhel/9.4/main/x86_64" >> /etc/yum.repos.d/amdgpu.repo && \
echo "enabled=1" >> /etc/yum.repos.d/amdgpu.repo && \
echo "gpgcheck=1" >> /etc/yum.repos.d/amdgpu.repo && \
echo "gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key" >> /etc/yum.repos.d/amdgpu.repo && \
yum install -y rocm-developer-tools rocm-ml-sdk rocm-opencl-sdk rocm-openmp-sdk rocm-utils && \
yum clean all && rm -rf /var/cache/yum
🤖 Prompt for AI Agents
In jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm lines 56 to 67, the yum
repository definitions for ROCm and AMDGPU have gpgcheck disabled, which skips
package signature verification. To fix this, enable gpgcheck by setting
"gpgcheck=1" in both repo files and add a "gpgkey" line pointing to
"https://repo.radeon.com/rocm/rocm.gpg.key" to ensure packages are verified
using AMD's public GPG key.

Comment on lines +9 to +12
RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip
RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip
RUN cd ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}/ && \
CGO_ENABLED=1 GOOS=linux go build -a -tags strictfipsruntime -o /tmp/mongocli ./cmd/mongocli/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Security: Verify downloaded archive integrity.

The MongoDB CLI source is downloaded without checksum verification, creating a potential security risk.

Please verify that the downloaded archive matches expected checksums or consider implementing checksum validation:


🏁 Script executed:

#!/bin/bash
# Description: Check if MongoDB CLI releases provide checksums for verification

# Check MongoDB CLI releases for available checksums
curl -s "https://api.github.com/repos/mongodb/mongodb-cli/releases/tags/mongocli/v2.0.3" | jq '.assets[] | select(.name | contains("checksum") or contains("sha")) | .name'

Length of output: 207


Add checksum verification for MongoDB CLI download

We’ve confirmed the MongoDB CLI release includes both checksums.txt and checksums.txt.sig. To harden supply-chain security, fetch and verify the checksum (and optionally its signature) immediately after downloading the archive.

• File: jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm
• Insert after the curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip … step:

 RUN curl -Lo mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip \
     https://github.com/mongodb/mongodb-cli/archive/refs/tags/mongocli/v${MONGOCLI_VERSION}.zip
+ RUN curl -Lo checksums.txt \
+       https://github.com/mongodb/mongodb-cli/releases/download/mongocli/v${MONGOCLI_VERSION}/checksums.txt && \
+     grep mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip checksums.txt | sha256sum -c -
 RUN unzip ./mongodb-cli-mongocli-v${MONGOCLI_VERSION}.zip

Optionally, if you want signature validation as well:

+ RUN curl -Lo checksums.txt.sig \
+       https://github.com/mongodb/mongodb-cli/releases/download/mongocli/v${MONGOCLI_VERSION}/checksums.txt.sig && \
+     gpg --batch --keyserver hkps://keys.openpgp.org --verify checksums.txt.sig checksums.txt
🤖 Prompt for AI Agents
In jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm around lines 9 to 12,
the MongoDB CLI zip download lacks checksum verification, which is important for
supply-chain security. After downloading the zip file with curl, add steps to
also download the corresponding checksums.txt and checksums.txt.sig files, then
verify the checksum of the downloaded zip against the checksums.txt file.
Optionally, verify the signature of checksums.txt.sig using the appropriate
public key before checksum validation. This ensures the integrity and
authenticity of the downloaded archive before proceeding with unzip and build
steps.

Comment on lines +26 to +33
"def load_expected_versions() -> dict:\n",
" lock_file = Path('./expected_versions.json')\n",
" data = {}\n",
"\n",
" with open(lock_file, 'r') as file:\n",
" data = json.load(file)\n",
"\n",
" return data \n",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Add file existence check for expected_versions.json.

The function assumes the expected_versions.json file exists without validation, which could cause a runtime error during testing.

 def load_expected_versions() -> dict:
     lock_file = Path('./expected_versions.json')
+    if not lock_file.exists():
+        raise FileNotFoundError(f"Expected versions file not found: {lock_file}")
     data = {}
 
     with open(lock_file, 'r') as file:
         data = json.load(file)
 
     return data
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"def load_expected_versions() -> dict:\n",
" lock_file = Path('./expected_versions.json')\n",
" data = {}\n",
"\n",
" with open(lock_file, 'r') as file:\n",
" data = json.load(file)\n",
"\n",
" return data \n",
def load_expected_versions() -> dict:
lock_file = Path('./expected_versions.json')
if not lock_file.exists():
raise FileNotFoundError(f"Expected versions file not found: {lock_file}")
data = {}
with open(lock_file, 'r') as file:
data = json.load(file)
return data
🤖 Prompt for AI Agents
In jupyter/rocm/pytorch/ubi9-python-3.12/test/test_notebook.ipynb around lines
26 to 33, the function load_expected_versions assumes the file
expected_versions.json exists, which may cause a runtime error if it does not.
Add a check to verify the file's existence before opening it. If the file does
not exist, handle this case gracefully by returning an empty dictionary or
raising a clear error message.

Comment on lines +157 to +159
" # Load a pre-trained PyTorch model (for example, ResNet-18)\n",
" model = models.resnet18(pretrained=True)\n",
" model.eval()\n",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Update deprecated pretrained parameter.

The pretrained=True parameter is deprecated in recent PyTorch versions and should be replaced with weights parameter.

-        model = models.resnet18(pretrained=True)
+        model = models.resnet18(weights=models.ResNet18_Weights.IMAGENET1K_V1)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
" # Load a pre-trained PyTorch model (for example, ResNet-18)\n",
" model = models.resnet18(pretrained=True)\n",
" model.eval()\n",
# Load a pre-trained PyTorch model (for example, ResNet-18)
model = models.resnet18(weights=models.ResNet18_Weights.IMAGENET1K_V1)
model.eval()
🤖 Prompt for AI Agents
In jupyter/rocm/pytorch/ubi9-python-3.12/test/test_notebook.ipynb around lines
157 to 159, replace the deprecated pretrained=True argument in the
models.resnet18() call with the new weights parameter. Use the appropriate
weights enum from torchvision.models to specify pretrained weights, for example,
weights=torchvision.models.ResNet18_Weights.DEFAULT, to update the code to the
current PyTorch API.

Comment on lines +69 to +108
" def test_polynomial_fitting(self):\n",
" dtype = torch.float\n",
" device = torch.device(\"cpu\")\n",
" # device = torch.device(\"cuda:0\") # Uncomment this to run on GPU\n",
"\n",
" # Create random input and output data\n",
" x = torch.linspace(-math.pi, math.pi, 2000, device=device, dtype=dtype)\n",
" y = torch.sin(x)\n",
"\n",
" # Randomly initialize weights\n",
" a = torch.randn((), device=device, dtype=dtype)\n",
" b = torch.randn((), device=device, dtype=dtype)\n",
" c = torch.randn((), device=device, dtype=dtype)\n",
" d = torch.randn((), device=device, dtype=dtype)\n",
"\n",
" learning_rate = 1e-6\n",
" for t in range(2000):\n",
" # Forward pass: compute predicted y\n",
" y_pred = a + b * x + c * x ** 2 + d * x ** 3\n",
"\n",
" # Compute and print loss\n",
" loss = (y_pred - y).pow(2).sum().item()\n",
" if t % 100 == 99:\n",
" print(t, loss)\n",
"\n",
" # Backprop to compute gradients of a, b, c, d with respect to loss\n",
" grad_y_pred = 2.0 * (y_pred - y)\n",
" grad_a = grad_y_pred.sum()\n",
" grad_b = (grad_y_pred * x).sum()\n",
" grad_c = (grad_y_pred * x ** 2).sum()\n",
" grad_d = (grad_y_pred * x ** 3).sum()\n",
"\n",
" # Update weights using gradient descent\n",
" a -= learning_rate * grad_a\n",
" b -= learning_rate * grad_b\n",
" c -= learning_rate * grad_c\n",
" d -= learning_rate * grad_d\n",
"\n",
"\n",
" print(f'Result: y = {a.item()} + {b.item()} x + {c.item()} x^2 + {d.item()} x^3')\n",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Add assertions to polynomial fitting test.

This test performs a complete polynomial fitting operation but lacks assertions to verify the results, making it more of a demo than a test.

         print(f'Result: y = {a.item()} + {b.item()} x + {c.item()} x^2 + {d.item()} x^3')
+        
+        # Assert that the fitting converged to reasonable values
+        self.assertLess(loss, 100, "Polynomial fitting did not converge properly")
+        # Assert that coefficients are reasonable for sin(x) approximation
+        self.assertAlmostEqual(a.item(), 0, delta=0.1, msg="Constant term should be near 0")
+        self.assertAlmostEqual(b.item(), 1, delta=0.1, msg="Linear term should be near 1")
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
" def test_polynomial_fitting(self):\n",
" dtype = torch.float\n",
" device = torch.device(\"cpu\")\n",
" # device = torch.device(\"cuda:0\") # Uncomment this to run on GPU\n",
"\n",
" # Create random input and output data\n",
" x = torch.linspace(-math.pi, math.pi, 2000, device=device, dtype=dtype)\n",
" y = torch.sin(x)\n",
"\n",
" # Randomly initialize weights\n",
" a = torch.randn((), device=device, dtype=dtype)\n",
" b = torch.randn((), device=device, dtype=dtype)\n",
" c = torch.randn((), device=device, dtype=dtype)\n",
" d = torch.randn((), device=device, dtype=dtype)\n",
"\n",
" learning_rate = 1e-6\n",
" for t in range(2000):\n",
" # Forward pass: compute predicted y\n",
" y_pred = a + b * x + c * x ** 2 + d * x ** 3\n",
"\n",
" # Compute and print loss\n",
" loss = (y_pred - y).pow(2).sum().item()\n",
" if t % 100 == 99:\n",
" print(t, loss)\n",
"\n",
" # Backprop to compute gradients of a, b, c, d with respect to loss\n",
" grad_y_pred = 2.0 * (y_pred - y)\n",
" grad_a = grad_y_pred.sum()\n",
" grad_b = (grad_y_pred * x).sum()\n",
" grad_c = (grad_y_pred * x ** 2).sum()\n",
" grad_d = (grad_y_pred * x ** 3).sum()\n",
"\n",
" # Update weights using gradient descent\n",
" a -= learning_rate * grad_a\n",
" b -= learning_rate * grad_b\n",
" c -= learning_rate * grad_c\n",
" d -= learning_rate * grad_d\n",
"\n",
"\n",
" print(f'Result: y = {a.item()} + {b.item()} x + {c.item()} x^2 + {d.item()} x^3')\n",
def test_polynomial_fitting(self):
dtype = torch.float
device = torch.device("cpu")
# device = torch.device("cuda:0") # Uncomment this to run on GPU
# Create random input and output data
x = torch.linspace(-math.pi, math.pi, 2000, device=device, dtype=dtype)
y = torch.sin(x)
# Randomly initialize weights
a = torch.randn((), device=device, dtype=dtype)
b = torch.randn((), device=device, dtype=dtype)
c = torch.randn((), device=device, dtype=dtype)
d = torch.randn((), device=device, dtype=dtype)
learning_rate = 1e-6
for t in range(2000):
# Forward pass: compute predicted y
y_pred = a + b * x + c * x ** 2 + d * x ** 3
# Compute and print loss
loss = (y_pred - y).pow(2).sum().item()
if t % 100 == 99:
print(t, loss)
# Backprop to compute gradients of a, b, c, d with respect to loss
grad_y_pred = 2.0 * (y_pred - y)
grad_a = grad_y_pred.sum()
grad_b = (grad_y_pred * x).sum()
grad_c = (grad_y_pred * x ** 2).sum()
grad_d = (grad_y_pred * x ** 3).sum()
# Update weights using gradient descent
a -= learning_rate * grad_a
b -= learning_rate * grad_b
c -= learning_rate * grad_c
d -= learning_rate * grad_d
print(f'Result: y = {a.item()} + {b.item()} x + {c.item()} x^2 + {d.item()} x^3')
# Assert that the fitting converged to reasonable values
self.assertLess(loss, 100, "Polynomial fitting did not converge properly")
# Assert that coefficients are reasonable for sin(x) approximation
self.assertAlmostEqual(a.item(), 0, delta=0.1, msg="Constant term should be near 0")
self.assertAlmostEqual(b.item(), 1, delta=0.1, msg="Linear term should be near 1")
🤖 Prompt for AI Agents
In jupyter/rocm/pytorch/ubi9-python-3.12/test/test_notebook.ipynb between lines
69 and 108, the polynomial fitting test lacks assertions to verify the
correctness of the fitted polynomial coefficients. Add assertions after the
training loop to check that the learned coefficients a, b, c, and d are close to
the expected values for the sine function approximation, using an appropriate
tolerance. This will convert the demo-like code into a proper test by validating
the fitting results.

Copy link
Contributor

openshift-ci bot commented Jul 1, 2025

@dibryant: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/runtime-ds-ubi9-python-3-11-pr-image-mirror 2540fec link true /test runtime-ds-ubi9-python-3-11-pr-image-mirror
ci/prow/notebook-jupyter-ds-ubi9-python-3-11-pr-image-mirror 2540fec link true /test notebook-jupyter-ds-ubi9-python-3-11-pr-image-mirror
ci/prow/runtime-cuda-tf-ubi9-python-3-11-pr-image-mirror 2540fec link true /test runtime-cuda-tf-ubi9-python-3-11-pr-image-mirror
ci/prow/codeserver-ubi9-python-3-11-pr-image-mirror 2540fec link true /test codeserver-ubi9-python-3-11-pr-image-mirror
ci/prow/runtime-cuda-pt-ubi9-python-3-11-pr-image-mirror 2540fec link true /test runtime-cuda-pt-ubi9-python-3-11-pr-image-mirror

Full PR test history. Your PR dashboard.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@dibryant dibryant closed this Jul 1, 2025
@dibryant dibryant deleted the rhoaieng27435 branch July 1, 2025 21:10
@openshift-ci openshift-ci bot added size/xxl and removed size/xxl labels Jul 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant