Skip to content

Conversation

@jiridanek
Copy link
Member

@jiridanek jiridanek commented Nov 6, 2025

Description

Reformat inline bash commands into HEREDOC blocks, so they can be later extracted to separate script files.

How Has This Been Tested?

Self checklist (all need to be checked):

  • Ensure that you have run make test (gmake on macOS) before asking for review
  • Changes to everything except Dockerfile.konflux files should be done in odh/notebooks and automatically synced to rhds/notebooks. For Konflux-specific changes, modify Dockerfile.konflux files directly in rhds/notebooks as these require special attention in the downstream repository and flow to the upcoming RHOAI release.

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

  • Chores
    • Standardized build steps to run inside explicit, stricter shell blocks for safer, more predictable container builds.
    • Improved installation, cleanup, and permission handling while preserving existing operation order and outcomes.
  • Tests
    • Added tests to validate heredoc/block insertion behavior and trailing-newline handling.

…sh for improved readability and error handling
@openshift-ci openshift-ci bot added the size/l label Nov 6, 2025
@github-actions github-actions bot added the review-requested GitHub Bot creates notification on #pr-review-ai-ide-team slack channel label Nov 6, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 6, 2025

Walkthrough

Replaced many Dockerfile multi-command RUN lines with /bin/bash heredoc blocks enabling strict shell options (set -Eeuxo pipefail); moved dnf upgrades/cleans, oc client curl/tar steps, rpm extraction, extension installs, and permission adjustments into explicit Bash blocks. Updated a Dockerfile-fragment helper to preserve trailing-newline behavior and added tests.

Changes

Cohort / File(s) Summary
Bulk Dockerfile: heredoc-wrapped RUNs
codeserver/ubi9-python-3.12/Dockerfile.cpu, jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu, jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu, jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda, jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm, jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda, jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda, jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm, jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm, jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda, jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu, rstudio/c9s-python-3.12/Dockerfile.cpu, rstudio/c9s-python-3.12/Dockerfile.cuda, rstudio/rhel9-python-3.12/Dockerfile.cpu, rstudio/rhel9-python-3.12/Dockerfile.cuda, runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu, runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu, runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda, runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda, runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm, runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm, runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda
Replaced chained multi-command RUN layers with /bin/bash <<'EOF' heredoc blocks using set -Eeuxo pipefail; migrated upgrades, dnf installs/cleans, curl/tar oc client steps, rpm extraction, extension installs, and permission/chown operations into explicit Bash blocks; preserved command content and order; minor whitespace/formatting tweaks.
Files adding OS packages / arch-specific installs
jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda, jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm, runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm, runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu
Added or consolidated additional OS package installs (e.g., perl, mesa-libGL, skopeo, libxcrypt-compat) and an architecture-aware install block in one minimal runtime; cleanup steps moved inside heredocs.
scripts and tests: Dockerfile fragment handling
scripts/dockerfile_fragments.py
Rewrote fragment RUN blocks to use heredocs in generated fragments; changed blockinfile() newline normalization to use lstrip("\n") and strip a trailing newline from assembled content; added test_lastnewline_removal to validate trailing-blank-line behavior (test duplicated near other tests).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Pay special attention to scripts/dockerfile_fragments.py (heredoc generation and newline handling) and the new test(s).
  • Verify added OS packages and architecture-specific conditional installs for correctness.
  • Confirm permission/chown and fix-permissions behavior remains unchanged when run inside heredocs.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The pull request title accurately describes the main change: refactoring Dockerfile commands to wrap them with bash heredocs for improved readability and error handling across multiple Dockerfile files.
Description check ✅ Passed The pull request description provides a reference to the related PR, explains the rationale for the changes (reformatting bash commands into HEREDOC blocks for later extraction), and includes the self-checklist with required items marked as completed. However, the merge criteria checklist items remain unchecked, and minimal testing documentation is provided.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2aed752 and 35f1815.

📒 Files selected for processing (1)
  • scripts/dockerfile_fragments.py (4 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (22)
  • GitHub Check: build (cuda-rstudio-rhel9-python-3.12, 3.12, linux/amd64, true) / build
  • GitHub Check: build (rstudio-rhel9-python-3.12, 3.12, linux/amd64, true) / build
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-trustyai-cpu-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-minimal-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-codeserver-datascience-cpu-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-datascience-cpu-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-rstudio-minimal-cpu-py312-c9s-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-tensorflow-rocm-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-tensorflow-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-pytorch-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-minimal-rocm-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-minimal-cpu-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-tensorflow-rocm-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-pytorch-llmcompressor-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-pytorch-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-minimal-cpu-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-pytorch-llmcompressor-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-pytorch-rocm-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-tensorflow-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-rstudio-minimal-cuda-py312-c9s-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-pytorch-rocm-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-datascience-cpu-py312-ubi9-on-pull-request
🔇 Additional comments (4)
scripts/dockerfile_fragments.py (4)

30-35: LGTM! Heredoc conversion improves error handling.

The conversion to heredoc format with set -Eeuxo pipefail aligns with the PR objective and provides better error handling and readability for the dnf upgrade sequence.


50-57: LGTM! Consistent heredoc pattern applied.

The oc client installation follows the same heredoc pattern with strict shell options, maintaining consistency across the Dockerfile fragments.


102-105: LGTM! Trailing newline handling is correct and safe.

The logic correctly preserves one trailing blank line for heredoc blocks while preventing the IndexError flagged in the past review. The if new_contents and guard ensures safety when processing empty content.


140-145: LGTM! Test correctly verifies trailing newline behavior.

The new test case properly validates that input with multiple trailing newlines results in exactly one trailing blank line in the output block, which is the intended behavior for heredoc formatting.


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

Comment @coderabbitai help to get the list of available commands and usage tips.

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: 2

🧹 Nitpick comments (1)
codeserver/ubi9-python-3.12/Dockerfile.cpu (1)

58-66: Verify verbose logging side effects from set -x.

The set -x flag in heredocs will echo every executed command to build logs. This improves debuggability but may produce verbose output. Confirm this is acceptable for your CI/CD pipeline, especially for sensitive operations.

If verbose output becomes problematic, consider conditionally enabling it (e.g., set -Eeuo pipefail without -x), or document this behavior in build logs.

Also applies to: 90-94, 98-103

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 731c89f and 3bdff2f.

📒 Files selected for processing (1)
  • codeserver/ubi9-python-3.12/Dockerfile.cpu (7 hunks)
🧰 Additional context used
🪛 GitHub Actions: Code static analysis
codeserver/ubi9-python-3.12/Dockerfile.cpu

[error] 95-95: Hadolint reported a syntax issue in Dockerfile.cpu: unexpected '#' at line 95 (expected a new instruction). Process exited with code 123.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build (codeserver-ubi9-python-3.12, 3.12, linux/arm64, false) / build
  • GitHub Check: build (codeserver-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: Red Hat Konflux / odh-workbench-codeserver-datascience-cpu-py312-ubi9-on-pull-request
🔇 Additional comments (3)
codeserver/ubi9-python-3.12/Dockerfile.cpu (3)

58-66: Cache mount syntax and stage references look correct.

All --mount=type=cache declarations are properly formatted and correctly reference build stages where applicable. The rw flags enable write access for cache population as intended.

Also applies to: 106-111, 174-184, 291-309


79-127: USER context preserved correctly across refactored RUN commands.

Each heredoc executes in the context of the preceding USER directive. Root operations remain under USER 0, and user operations under USER 1001. No regressions detected.


121-128: Fix comment placement after oc client heredoc.

Line 128's comment must not follow the heredoc EOF. Apply the same fix: move the comment before the RUN instruction or integrate it into a preceding section comment.

-EOF
-# Install the oc client end
+EOF
+
+# Install the oc client end

Place the "end" comment as a section delimiter before any subsequent RUN or other instruction.

Likely an incorrect or invalid review comment.

Comment on lines 90 to 95
RUN /bin/bash <<'EOF'
set -Eeuxo pipefail
dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0
dnf clean all -y
EOF
# upgrade first to avoid fixable vulnerabilities end
Copy link
Contributor

@coderabbitai coderabbitai bot Nov 6, 2025

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

CRITICAL: Fix Hadolint syntax error—comments cannot follow heredoc EOF.

The comment at line 95 appears immediately after the heredoc EOF, which violates Dockerfile syntax. Hadolint requires a Dockerfile instruction keyword (not a comment) after RUN ends. This same issue occurs at lines 127-128 and 296-297.

Move section-end comments before the corresponding RUN instruction instead.

Apply this diff to relocate the comment:

-# upgrade first to avoid fixable vulnerabilities begin
-# Problem: The operation would result in removing the following protected packages: systemd
-#  (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages)
-# Solution: --best --skip-broken does not work either, so use --nobest
 RUN /bin/bash <<'EOF'
 set -Eeuxo pipefail
 dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0
 dnf clean all -y
 EOF
-# upgrade first to avoid fixable vulnerabilities end
+
+# upgrade first to avoid fixable vulnerabilities end

Relocate the "end" comment immediately BEFORE the next RUN instruction (line 96) as a section delimiter, or consolidate with the section-start comment above the RUN block.

📝 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 /bin/bash <<'EOF'
set -Eeuxo pipefail
dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0
dnf clean all -y
EOF
# upgrade first to avoid fixable vulnerabilities end
# upgrade first to avoid fixable vulnerabilities end
RUN /bin/bash <<'EOF'
set -Eeuxo pipefail
dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setopt=install_weak_deps=0 --setopt=keepcache=0
dnf clean all -y
EOF
🧰 Tools
🪛 GitHub Actions: Code static analysis

[error] 95-95: Hadolint reported a syntax issue in Dockerfile.cpu: unexpected '#' at line 95 (expected a new instruction). Process exited with code 123.

🤖 Prompt for AI Agents
In codeserver/ubi9-python-3.12/Dockerfile.cpu around lines 90-95, the heredoc
RUN block is immediately followed by a comment ("# upgrade first to avoid
fixable vulnerabilities end") which causes a Hadolint/Dockerfile syntax error
because comments cannot appear immediately after an EOF terminator; relocate
that section-end comment to before the corresponding RUN instruction (or merge
it with the section-start comment above the RUN) so the EOF line is directly
followed by a new Dockerfile instruction, and apply the same fix for the other
occurrences at ~lines 127-128 and 296-297.

Copy link
Member Author

Choose a reason for hiding this comment

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

@coderabbitai fixed it, please recheck

Copy link
Contributor

Choose a reason for hiding this comment

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check the specific areas mentioned in the original issue to verify the fix
# Lines 95, 127-128, and 296-297 were mentioned

# Display the file with line numbers around the areas of concern
echo "=== Checking around line 95 (first occurrence) ==="
sed -n '88,100p' codeserver/ubi9-python-3.12/Dockerfile.cpu | cat -n

echo -e "\n=== Checking around line 127-128 (second occurrence) ==="
sed -n '120,135p' codeserver/ubi9-python-3.12/Dockerfile.cpu | cat -n

echo -e "\n=== Checking around line 296-297 (third occurrence) ==="
sed -n '290,305p' codeserver/ubi9-python-3.12/Dockerfile.cpu | cat -n

echo -e "\n=== Searching for all patterns where EOF is followed by a comment ==="
# Look for EOF followed immediately by # (no blank line)
grep -n "^EOF$" codeserver/ubi9-python-3.12/Dockerfile.cpu | while read line; do
    linenum=$(echo "$line" | cut -d: -f1)
    nextline=$((linenum + 1))
    echo "EOF at line $linenum:"
    sed -n "${linenum},${nextline}p" codeserver/ubi9-python-3.12/Dockerfile.cpu | cat -A
done

Length of output: 2714


@jiridanek Perfect! ✅ I've verified the fix and can confirm that all three occurrences have been corrected:

  1. Line 95: EOF now has a blank line before the # upgrade first to avoid fixable vulnerabilities end comment
  2. Line 128: EOF now has a blank line before the # Install the oc client end comment
  3. Line 298: EOF now has a blank line before the next comment

All 14 heredoc blocks in the file now properly have blank lines after their EOF markers, which resolves the Hadolint syntax error. The Dockerfile syntax is now correct! 🎉

@openshift-ci openshift-ci bot added size/l and removed size/l labels Nov 6, 2025
@jiridanek jiridanek added the tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges. label Nov 6, 2025
@openshift-ci openshift-ci bot added size/l and removed size/l labels Nov 6, 2025
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Nov 6, 2025

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: ide-developer
Once this PR has been reviewed and has the lgtm label, please assign jiridanek 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/l and removed size/l labels Nov 6, 2025
@openshift-ci openshift-ci bot removed the lgtm label Nov 6, 2025
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Nov 6, 2025

New changes are detected. LGTM label has been removed.

@openshift-ci openshift-ci bot added size/xl and removed size/l labels Nov 6, 2025
@openshift-ci openshift-ci bot added size/xl and removed size/xl labels Nov 6, 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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu (1)

76-94: CRITICAL: Single-quoted heredoc delimiter prevents variable expansion.

The heredoc uses <<'EOF' (single quotes), which prevents shell variable expansion. The condition at line 78 references $TARGETARCH, but it will remain a literal string "$TARGETARCH" rather than being expanded to its value. This causes the Rust/Cargo setup to never execute, even on s390x.

Additionally, TARGETARCH is defined as an ARG (line 45), not an ENV, so it is not automatically available in the shell context.

Fix: Use an unquoted heredoc delimiter to enable variable expansion:

-RUN /bin/bash <<'EOF'
+RUN /bin/bash <<EOF
 set -Eeuxo pipefail
 if [ "$TARGETARCH" = "s390x" ]; then
     # Install Rust and set up environment

This same issue affects multiple other heredocs in this file (lines 97–104, 211–227, 236–247, 326–333, 336–343, 345–353).

rstudio/rhel9-python-3.12/Dockerfile.cuda (1)

163-165: Remove duplicate NGINX_VERSION declaration.

Line 164 contains a duplicate NGINX_VERSION=1.24 that was already declared on line 163.

 ENV NGINX_VERSION=1.24 \
-    NGINX_VERSION=1.24 \
     NGINX_SHORT_VER=124 \
🧹 Nitpick comments (3)
runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm (1)

82-89: Consider refactoring this multi-command RUN block for consistency.

Lines 82–89 still use the older multi-line RUN style with && continuation. Given the PR objective to wrap multiple RUN commands in heredocs for improved readability and error handling, consider applying the same refactor here to ensure consistency across the Dockerfile.

If refactoring is desired, apply this diff:

-RUN echo "Installing softwares and packages" && \
-    # This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`,
-    #  we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common.
-    # Not using --build-constraints=./requirements.txt because error: Unnamed requirements are not allowed as constraints (found: `https://repo.radeon.com/rocm/manylinux/rocm-rel-6.4/
-    uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml && \
-    # Fix permissions to support pip in Openshift environments \
-    chmod -R g+w /opt/app-root/lib/python3.12/site-packages && \
-    fix-permissions /opt/app-root -P
+RUN /bin/bash <<'EOF'
+set -Eeuxo pipefail
+echo "Installing softwares and packages"
+# This may have to download and compile some dependencies, and as we don't lock requirements from `build-system.requires`,
+#  we often don't know the correct hashes and `--require-hashes` would therefore fail on non amd64, where building is common.
+# Not using --build-constraints=./requirements.txt because error: Unnamed requirements are not allowed as constraints (found: `https://repo.radeon.com/rocm/manylinux/rocm-rel-6.4/
+uv pip install --strict --no-deps --no-cache --no-config --no-progress --verify-hashes --compile-bytecode --index-strategy=unsafe-best-match --requirements=./pylock.toml
+# Fix permissions to support pip in Openshift environments
+chmod -R g+w /opt/app-root/lib/python3.12/site-packages
+fix-permissions /opt/app-root -P
+EOF

Please verify whether this refactor should be applied or if it was intentionally deferred.

codeserver/ubi9-python-3.12/Dockerfile.cpu (1)

245-275: Consider breaking up this large heredoc block.

While the heredoc refactoring is correct, this 30-line block handles many distinct concerns (NGINX directories, httpd directories, code-server extensions). Consider splitting it into smaller, focused blocks (e.g., one for NGINX setup, one for httpd setup, one for code-server directories) to improve maintainability and make failures easier to debug.

scripts/dockerfile_fragments.py (1)

140-145: Test is correct, but consider clarifying the name.

The test correctly verifies that a double trailing newline in the input ("key=value\n\n") results in a blank line before the end marker in the output. However, the name test_lastnewline_removal is slightly misleading—the test actually demonstrates that a trailing newline is preserved (as the blank line before # end), rather than removed.

Consider renaming to something like test_trailing_newline_preservation or test_heredoc_blank_line_before_end_marker to better reflect what's being tested.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d493a28 and 2aed752.

📒 Files selected for processing (23)
  • codeserver/ubi9-python-3.12/Dockerfile.cpu (7 hunks)
  • jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu (2 hunks)
  • jupyter/minimal/ubi9-python-3.12/Dockerfile.cpu (3 hunks)
  • jupyter/minimal/ubi9-python-3.12/Dockerfile.cuda (3 hunks)
  • jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm (3 hunks)
  • jupyter/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda (3 hunks)
  • jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda (3 hunks)
  • jupyter/rocm/pytorch/ubi9-python-3.12/Dockerfile.rocm (3 hunks)
  • jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm (3 hunks)
  • jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda (3 hunks)
  • jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu (3 hunks)
  • rstudio/c9s-python-3.12/Dockerfile.cpu (1 hunks)
  • rstudio/c9s-python-3.12/Dockerfile.cuda (1 hunks)
  • rstudio/rhel9-python-3.12/Dockerfile.cpu (1 hunks)
  • rstudio/rhel9-python-3.12/Dockerfile.cuda (1 hunks)
  • runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu (2 hunks)
  • runtimes/minimal/ubi9-python-3.12/Dockerfile.cpu (2 hunks)
  • runtimes/pytorch+llmcompressor/ubi9-python-3.12/Dockerfile.cuda (2 hunks)
  • runtimes/pytorch/ubi9-python-3.12/Dockerfile.cuda (2 hunks)
  • runtimes/rocm-pytorch/ubi9-python-3.12/Dockerfile.rocm (2 hunks)
  • runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm (2 hunks)
  • runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda (2 hunks)
  • scripts/dockerfile_fragments.py (4 hunks)
✅ Files skipped from review due to trivial changes (1)
  • rstudio/c9s-python-3.12/Dockerfile.cpu
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (51)
  • GitHub Check: build (rstudio-rhel9-python-3.12, 3.12, linux/amd64, true) / build
  • GitHub Check: build (cuda-rstudio-rhel9-python-3.12, 3.12, linux/amd64, true) / build
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-pytorch-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-minimal-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-codeserver-datascience-cpu-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-rstudio-minimal-cpu-py312-c9s-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-datascience-cpu-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-tensorflow-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-trustyai-cpu-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-minimal-rocm-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-rstudio-minimal-cuda-py312-c9s-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-pytorch-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-pytorch-llmcompressor-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-pytorch-rocm-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-minimal-cpu-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-tensorflow-cuda-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-datascience-cpu-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-tensorflow-rocm-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-workbench-jupyter-tensorflow-rocm-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-minimal-cpu-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-pytorch-rocm-py312-ubi9-on-pull-request
  • GitHub Check: Red Hat Konflux / odh-pipeline-runtime-pytorch-llmcompressor-cuda-py312-ubi9-on-pull-request
  • GitHub Check: build (codeserver-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (runtime-minimal-ubi9-python-3.12, 3.12, linux/s390x, false) / build
  • GitHub Check: build (runtime-minimal-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (jupyter-minimal-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (runtime-cuda-pytorch-llmcompressor-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (rstudio-c9s-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (cuda-jupyter-tensorflow-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (codeserver-ubi9-python-3.12, 3.12, linux/arm64, false) / build
  • GitHub Check: build (rocm-jupyter-minimal-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (jupyter-datascience-ubi9-python-3.12, 3.12, linux/ppc64le, false) / build
  • GitHub Check: build (cuda-rstudio-c9s-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (rocm-jupyter-pytorch-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (cuda-jupyter-minimal-ubi9-python-3.12, 3.12, linux/arm64, false) / build
  • GitHub Check: build (jupyter-datascience-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (cuda-jupyter-pytorch-llmcompressor-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (runtime-cuda-tensorflow-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (runtime-cuda-pytorch-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (runtime-datascience-ubi9-python-3.12, 3.12, linux/s390x, false) / build
  • GitHub Check: build (cuda-jupyter-tensorflow-ubi9-python-3.12, 3.12, linux/arm64, false) / build
  • GitHub Check: build (runtime-datascience-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (rocm-runtime-pytorch-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (rocm-runtime-tensorflow-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (rocm-jupyter-tensorflow-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (cuda-jupyter-pytorch-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (jupyter-trustyai-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (cuda-jupyter-minimal-ubi9-python-3.12, 3.12, linux/amd64, false) / build
  • GitHub Check: build (runtime-cuda-tensorflow-ubi9-python-3.12, 3.12, linux/arm64, false) / build
  • GitHub Check: build (jupyter-minimal-ubi9-python-3.12, 3.12, linux/ppc64le, false) / build
  • GitHub Check: build (jupyter-minimal-ubi9-python-3.12, 3.12, linux/s390x, false) / build
🔇 Additional comments (24)
runtimes/rocm-tensorflow/ubi9-python-3.12/Dockerfile.rocm (2)

28-32: LGTM! Heredoc refactor improves readability and error handling.

The refactored RUN block properly uses /bin/bash <<'EOF' with quoted delimiter to prevent variable expansion, and set -Eeuxo pipefail enforces strict error handling (exit on error, undefined variables, pipe failures) and provides command tracing. The dnf commands are preserved correctly.


47-53: LGTM! Heredoc refactor with proper error handling.

The oc client installation is now properly wrapped in a heredoc with strict bash options. The tar extraction syntax (tar -xzvf ... oc) correctly extracts only the oc binary from the archive. The use of quoted EOF prevents unintended variable expansion.

jupyter/trustyai/ubi9-python-3.12/Dockerfile.cpu (3)

64-68: Improved error handling with bash heredoc wrapper.

Converting the inline RUN to a /bin/bash heredoc with strict options (set -Eeuxo pipefail) strengthens error detection for the package upgrade sequence. The single-quoted EOF correctly prevents variable expansion.

Verify that container builds successfully with this change, especially on non-amd64 architectures (given the --nobest --skip-broken flags to handle edge cases).


83-89: Consistent heredoc pattern for OC client installation.

The /bin/bash heredoc with set -Eeuxo pipefail improves error handling and debuggability for the multi-step download, extract, and cleanup sequence. The line continuation in curl and proper cleanup logic are correctly implemented.

Confirm that uname -m correctly detects architecture on all supported platforms (amd64, s390x, ppc64le) and that the tarball is accessible and unpacks without errors.


111-111: Minor formatting improvement.

The blank line improves visual separation of the PATH environment configuration. No functional impact.

rstudio/rhel9-python-3.12/Dockerfile.cpu (1)

30-34: Approved: Clean heredoc refactoring with improved error handling.

The refactoring correctly converts the inline package upgrade into a /bin/bash heredoc with strict error handling (set -Eeuxo pipefail). The commands and flags remain identical—same dnf upgrade options and cleanup—so no functional change. The new form is more readable and provides better error visibility (explicit -e exit-on-error, -u for undefined variables, -x for command tracing). EOF is properly quoted to prevent unintended expansion.

jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu (1)

56-60: ✓ Heredoc for dnf upgrade looks good.

The set -Eeuxo pipefail enables proper error handling, and the single-quoted EOF delimiter is appropriate since this block doesn't require variable expansion.

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

28-32: Heredoc refactoring looks good; verify runtime behavior.

The dnf upgrade and oc client download operations are correctly wrapped in bash heredocs with strict error handling. Commands and options are preserved, and $(uname -m) command substitution should execute correctly at runtime within the <<'EOF' block.

Also applies to: 47-53


37-37: New package installation step added.

Line 37 introduces a new OS package installation (perl, mesa-libGL, skopeo, libxcrypt-compat). Verify this aligns with PR objectives and is intentional (not accidentally added during refactoring).

runtimes/datascience/ubi9-python-3.12/Dockerfile.cpu (3)

32-36: Upgrade heredoc is correct.

dnf upgrade wrapped properly with strict error handling. All original options preserved.


57-69: Nested heredoc syntax is valid but complex.

The nested here-document (outer EOF, inner PROFILE_EOF) uses correct bash syntax and should parse correctly at runtime. The inner here-document with single quotes (<<'PROFILE_EOF') correctly preserves $VAR literals for later expansion when the profile script is sourced.

Verify that this nested heredoc pattern works correctly in your Docker/Buildah/Podman build environment. If issues arise, consider extracting the profile generation into a separate script file.


72-90: Architecture-specific heredocs are well-structured.

The s390x Rust setup, python alternatives, and oc client downloads are correctly wrapped with preserved commands and proper conditional logic within heredocs.

Also applies to: 93-100, 110-116

runtimes/tensorflow/ubi9-python-3.12/Dockerfile.cuda (1)

32-36: Heredoc refactoring is correct.

Both dnf upgrade and oc client download blocks are properly wrapped with strict error handling. Commands and options are preserved correctly.

Also applies to: 51-57

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

41-45: Heredoc refactoring follows established pattern.

dnf upgrade and oc client heredocs are correctly formatted with preserved commands and strict error handling.

Also applies to: 60-66


88-88: Blank line added for formatting.

Minor formatting change (blank line after ENV PATH) for improved readability. Cosmetic only, no functional impact.

jupyter/minimal/ubi9-python-3.12/Dockerfile.rocm (1)

28-32: Heredoc refactoring is correct.

Both dnf upgrade and oc client blocks properly wrapped with strict error handling. All commands and options preserved.

Also applies to: 47-53

jupyter/tensorflow/ubi9-python-3.12/Dockerfile.cuda (1)

43-47: Heredoc refactoring is correct.

dnf upgrade and oc client blocks properly formatted with strict error handling. Commands preserved correctly.

Also applies to: 62-68

jupyter/pytorch/ubi9-python-3.12/Dockerfile.cuda (1)

43-47: Heredoc refactoring is correct and consistent.

Both dnf upgrade and oc client heredocs properly formatted with strict error handling. All commands preserved.

Also applies to: 62-68

jupyter/rocm/tensorflow/ubi9-python-3.12/Dockerfile.rocm (1)

41-45: Heredoc refactoring is correct.

dnf upgrade and oc client blocks properly wrapped with strict error handling. Commands and options preserved correctly.

Also applies to: 60-66

codeserver/ubi9-python-3.12/Dockerfile.cpu (4)

90-96: LGTM! Hadolint syntax issue resolved.

The blank line at line 95 between the EOF terminator and the section-end comment correctly addresses the critical Hadolint syntax error flagged in previous reviews. The heredoc format with set -Eeuxo pipefail also improves error handling.


58-66: LGTM! Consistent heredoc refactoring.

The whl-cache stage correctly wraps the build commands in a bash heredoc with strict error handling. The pattern is consistent with the rest of the file.


122-129: LGTM! EOF blank line fix applied consistently.

The OC client installation block correctly follows the pattern with a blank line after EOF (line 129) before the section-end comment. This matches the fix applied to other blocks.


293-299: LGTM! Third Hadolint syntax fix confirmed.

The blank line at line 299 correctly separates the EOF from the next comment, completing the fix for all three occurrences flagged in previous reviews.

scripts/dockerfile_fragments.py (1)

30-35: LGTM! HEREDOC format aligns with Dockerfile changes.

The heredoc format in the generated fragment correctly matches the refactoring pattern applied throughout the Dockerfiles. The blank line after EOF at line 35 ensures Hadolint compatibility, addressing the critical issues from previous reviews.

Comment on lines +114 to +120
RUN /bin/bash <<'EOF'
set -Eeuxo pipefail
curl -L https://mirror.openshift.com/pub/openshift-v4/$(uname -m)/clients/ocp/stable/openshift-client-linux.tar.gz \
-o /tmp/openshift-client-linux.tar.gz
tar -xzvf /tmp/openshift-client-linux.tar.gz oc
rm -f /tmp/openshift-client-linux.tar.gz
EOF
Copy link
Contributor

@coderabbitai coderabbitai bot Nov 6, 2025

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

CRITICAL: Single-quoted heredoc delimiter prevents command substitution.

Line 116 uses $(uname -m) within the heredoc, but the single-quoted delimiter <<'EOF' prevents command substitution. The curl command will receive a literal string "$(uname -m)" instead of the actual machine architecture, causing the download URL to be malformed and the command to fail.

Fix: Use an unquoted heredoc delimiter to enable command substitution:

-RUN /bin/bash <<'EOF'
+RUN /bin/bash <<EOF
 set -Eeuxo pipefail
 curl -L https://mirror.openshift.com/pub/openshift-v4/$(uname -m)/clients/ocp/stable/openshift-client-linux.tar.gz \
📝 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 /bin/bash <<'EOF'
set -Eeuxo pipefail
curl -L https://mirror.openshift.com/pub/openshift-v4/$(uname -m)/clients/ocp/stable/openshift-client-linux.tar.gz \
-o /tmp/openshift-client-linux.tar.gz
tar -xzvf /tmp/openshift-client-linux.tar.gz oc
rm -f /tmp/openshift-client-linux.tar.gz
EOF
RUN /bin/bash <<EOF
set -Eeuxo pipefail
curl -L https://mirror.openshift.com/pub/openshift-v4/$(uname -m)/clients/ocp/stable/openshift-client-linux.tar.gz \
-o /tmp/openshift-client-linux.tar.gz
tar -xzvf /tmp/openshift-client-linux.tar.gz oc
rm -f /tmp/openshift-client-linux.tar.gz
EOF
🤖 Prompt for AI Agents
In jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu around lines 114 to 120,
the heredoc is quoted (<<'EOF') which prevents command substitution so $(uname
-m) is not expanded; change the heredoc delimiter to an unquoted form (<<EOF) so
shell expansions like $(uname -m) are performed, leaving the rest of the block
intact and keeping existing set -Eeuxo pipefail behavior.

Copy link
Member Author

Choose a reason for hiding this comment

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

@coderabbitai no, this is not how it works, bash will evaluate $(uname -m) just fine, this is heredoc in Dockerfile not heredoc in bash script

Copy link
Contributor

Choose a reason for hiding this comment

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

@jiridanek, you're absolutely right, and I apologize for the confusion!

In a Dockerfile heredoc, the single-quoted delimiter <<'EOF' only prevents the Dockerfile parser from expanding build-time variables like ${ARG} or ${ENV}. The heredoc content is still passed to /bin/bash as-is, and bash will perform its own command substitution when it executes $(uname -m).

This is different from a bash script heredoc, where <<'EOF' would prevent the shell from performing expansions. Thank you for the correction!

    (\_(\ 
    (='.'=) 
    (")_(")
 *learning noted*

✏️ Learnings added
Learnt from: jiridanek
Repo: opendatahub-io/notebooks PR: 2645
File: jupyter/datascience/ubi9-python-3.12/Dockerfile.cpu:114-120
Timestamp: 2025-11-06T10:42:31.884Z
Learning: In Dockerfile heredocs (RUN /bin/bash <<'EOF'), the single-quoted delimiter <<'EOF' only prevents Dockerfile parser from expanding build-time variables like ${ARG} or ${ENV}. The heredoc content is still passed to the specified shell (bash) which will perform its own command substitution for expressions like $(uname -m). This is different from bash script heredocs where <<'EOF' prevents shell expansion.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@openshift-ci openshift-ci bot added size/xl and removed size/xl labels Nov 6, 2025
@jiridanek
Copy link
Member Author

@coderabbitai konflux failure looks flaky https://konflux-ui.apps.stone-prd-rh01.pg1f.p1.openshiftapps.com/ns/open-data-hub-tenant/applications/opendatahub-release/pipelineruns/odh-pipeline-runtime-pytorch-rocm-py312-ubi9-on-pull-reque4wtvl/logs?task=build-images

    × Failed to download `torch==2.7.1+rocm6.3`
    ├─▶ Failed to extract archive:
    │   torch-2.7.1+rocm6.3-cp312-cp312-manylinux_2_28_x86_64.whl
    ╰─▶ I/O operation failed during extraction
  subprocess exited with status 1
  subprocess exited with status 1

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 6, 2025

Tip

For best results, initiate chat on the files or code changes.

@jiridanek, thank you for flagging this! I agree that the failure appears to be flaky and unrelated to the changes in this PR.

The error indicates an I/O operation failure during extraction of the PyTorch ROCm wheel file, which is typically a transient network or infrastructure issue. Since this PR only refactors the Dockerfile syntax by wrapping RUN commands in bash heredocs (without changing the actual package installation logic or versions), it shouldn't affect the PyTorch download/extraction process.

This looks like a good candidate for a retry once the infrastructure issue resolves.

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Nov 6, 2025

@jiridanek: 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-cuda-tf-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test runtime-cuda-tf-ubi9-python-3-12-pr-image-mirror
ci/prow/notebook-rocm-jupyter-pt-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test notebook-rocm-jupyter-pt-ubi9-python-3-12-pr-image-mirror
ci/prow/runtime-cuda-pt-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test runtime-cuda-pt-ubi9-python-3-12-pr-image-mirror
ci/prow/notebook-jupyter-ds-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test notebook-jupyter-ds-ubi9-python-3-12-pr-image-mirror
ci/prow/codeserver-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test codeserver-ubi9-python-3-12-pr-image-mirror
ci/prow/runtime-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test runtime-ubi9-python-3-12-pr-image-mirror
ci/prow/notebook-cuda-jupyter-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test notebook-cuda-jupyter-ubi9-python-3-12-pr-image-mirror
ci/prow/rocm-runtime-pt-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test rocm-runtime-pt-ubi9-python-3-12-pr-image-mirror
ci/prow/notebook-jupyter-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test notebook-jupyter-ubi9-python-3-12-pr-image-mirror
ci/prow/notebook-rocm-jupyter-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test notebook-rocm-jupyter-ubi9-python-3-12-pr-image-mirror
ci/prow/notebook-cuda-jupyter-tf-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test notebook-cuda-jupyter-tf-ubi9-python-3-12-pr-image-mirror
ci/prow/notebook-cuda-jupyter-pt-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test notebook-cuda-jupyter-pt-ubi9-python-3-12-pr-image-mirror
ci/prow/runtime-ds-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test runtime-ds-ubi9-python-3-12-pr-image-mirror
ci/prow/images 35f1815 link true /test images
ci/prow/notebook-jupyter-tai-ubi9-python-3-12-pr-image-mirror 35f1815 link true /test notebook-jupyter-tai-ubi9-python-3-12-pr-image-mirror
ci/prow/rocm-notebooks-py312-e2e-tests 35f1815 link true /test rocm-notebooks-py312-e2e-tests
ci/prow/notebooks-py312-ubi9-e2e-tests 35f1815 link true /test notebooks-py312-ubi9-e2e-tests

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review-requested GitHub Bot creates notification on #pr-review-ai-ide-team slack channel size/xl tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants