Skip to content

Conversation

@idobiran11
Copy link

@idobiran11 idobiran11 commented Dec 11, 2025

PR Type

Enhancement


Description

  • Pin mlflow to 2.22.4 everywhere

  • Pin fonttools by Python version

  • Regenerate locks with python-version hints

  • Improve Debian install robustness in test image


Diagram Walkthrough

flowchart LR
  extras["extras-requirements.txt (pins)"]
  mlrunapi_req["dockerfiles/mlrun-api/requirements.txt (add mlflow pin)"]
  jup_lock["dockerfiles/jupyter/locked-requirements.txt (update pins)"]
  kfp_lock["dockerfiles/mlrun-kfp/locked-requirements.txt (update pins)"]
  test_lock["dockerfiles/test/locked-requirements.txt (update pins)"]
  testsys_lock["dockerfiles/test-system/locked-requirements.txt (update pins)"]
  test_docker["dockerfiles/test/Dockerfile (apt install tweak)"]

  extras -- "mlflow==2.22.4, fonttools split pins" --> jup_lock
  extras -- "mlflow==2.22.4, fonttools split pins" --> kfp_lock
  extras -- "mlflow==2.22.4, fonttools split pins" --> test_lock
  extras -- "mlflow==2.22.4, fonttools split pins" --> testsys_lock
  mlrunapi_req -- "require mlflow 2.22.4" --> test_lock
  mlrunapi_req -- "require mlflow 2.22.4" --> testsys_lock
  test_docker -- "optional pkg install" --> test_lock
Loading

File Walkthrough

Relevant files
Dependencies
9 files
locked-requirements.txt
Update mlflow and fonttools pins and hashes                           
+60/-50 
locked-requirements.txt
Add python-version compile hint, split fonttools pins, bump mlflow
+68/-9   
locked-requirements.txt
Add python-version compile hint, split fonttools pins, bump mlflow
+68/-10 
locked-requirements.txt
Split fonttools pins by Python and bump mlflow                     
+64/-8   
extras-requirements.txt
Add fonttools version split and pin mlflow                             
+3/-1     
requirements.txt
Pin mlflow to 2.22.4 in API service                                           
+1/-0     
locked-requirements.txt
Align dependency locks with mlflow and fonttools pins       
+2723/-2924
locked-requirements.txt
Refresh locks with mlflow 2.22.4 and fonttools rules         
+2674/-2378
locked-requirements.txt
Update locked dependencies to new pins                                     
+85/-608
Enhancement
1 files
Dockerfile
Install software-properties-common optionally on Debian   
+4/-1     

@pull-request-agent
Copy link

pull-request-agent bot commented Dec 11, 2025

PR Reviewer Guide 🔍

(Review updated until commit 48aea87)

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
🧪 No relevant tests
🔒 No security concerns identified
⚡ Recommended focus areas for review

Env-specific Pinning

The split pin for fonttools by Python version is applied here; confirm all build/test images actually run with the intended Python versions so the correct pin (4.59.0 for <3.10, 4.61.0 for >=3.10) is selected consistently.

fonttools==4.59.0 ; python_full_version < '3.10' \
    --hash=sha256:052444a5d0151878e87e3e512a1aa1a0ab35ee4c28afde0a778e23b0ace4a7de \
    --hash=sha256:169b99a2553a227f7b5fea8d9ecd673aa258617f466b2abc6091fe4512a0dcd0 \
    --hash=sha256:209b75943d158f610b78320eacb5539aa9e920bee2c775445b2846c65d20e19d \
    --hash=sha256:21e606b2d38fed938dde871c5736822dd6bda7a4631b92e509a1f5cd1b90c5df \
    --hash=sha256:241313683afd3baacb32a6bd124d0bce7404bc5280e12e291bae1b9bba28711d \
    --hash=sha256:26731739daa23b872643f0e4072d5939960237d540c35c14e6a06d47d71ca8fe \
    --hash=sha256:2e7cf8044ce2598bb87e44ba1d2c6e45d7a8decf56055b92906dc53f67c76d64 \
    --hash=sha256:31003b6a10f70742a63126b80863ab48175fb8272a18ca0846c0482968f0588e \
    --hash=sha256:332bfe685d1ac58ca8d62b8d6c71c2e52a6c64bc218dc8f7825c9ea51385aa01 \
    --hash=sha256:37c377f7cb2ab2eca8a0b319c68146d34a339792f9420fca6cd49cf28d370705 \
    --hash=sha256:37e01c6ec0c98599778c2e688350d624fa4770fbd6144551bd5e032f1199171c \
    --hash=sha256:401b1941ce37e78b8fd119b419b617277c65ae9417742a63282257434fd68ea2 \
    --hash=sha256:4536f2695fe5c1ffb528d84a35a7d3967e5558d2af58b4775e7ab1449d65767b \
    --hash=sha256:4c908a7036f0f3677f8afa577bcd973e3e20ddd2f7c42a33208d18bee95cdb6f \
    --hash=sha256:51ab1ff33c19e336c02dee1e9fd1abd974a4ca3d8f7eef2a104d0816a241ce97 \
    --hash=sha256:524133c1be38445c5c0575eacea42dbd44374b310b1ffc4b60ff01d881fabb96 \
    --hash=sha256:57bb7e26928573ee7c6504f54c05860d867fd35e675769f3ce01b52af38d48e2 \
    --hash=sha256:60f6665579e909b618282f3c14fa0b80570fbf1ee0e67678b9a9d43aa5d67a37 \
    --hash=sha256:62224a9bb85b4b66d1b46d45cbe43d71cbf8f527d332b177e3b96191ffbc1e64 \
    --hash=sha256:6770d7da00f358183d8fd5c4615436189e4f683bdb6affb02cad3d221d7bb757 \
    --hash=sha256:6801aeddb6acb2c42eafa45bc1cb98ba236871ae6f33f31e984670b749a8e58e \
    --hash=sha256:70d6b3ceaa9cc5a6ac52884f3b3d9544e8e231e95b23f138bdb78e6d4dc0eae3 \
    --hash=sha256:78813b49d749e1bb4db1c57f2d4d7e6db22c253cb0a86ad819f5dc197710d4b2 \
    --hash=sha256:841b2186adce48903c0fef235421ae21549020eca942c1da773ac380b056ab3c \
    --hash=sha256:84fc186980231a287b28560d3123bd255d3c6b6659828c642b4cf961e2b923d0 \
    --hash=sha256:885bde7d26e5b40e15c47bd5def48b38cbd50830a65f98122a8fb90962af7cd1 \
    --hash=sha256:8b4309a2775e4feee7356e63b163969a215d663399cce1b3d3b65e7ec2d9680e \
    --hash=sha256:8d77f92438daeaddc05682f0f3dac90c5b9829bcac75b57e8ce09cb67786073c \
    --hash=sha256:902425f5afe28572d65d2bf9c33edd5265c612ff82c69e6f83ea13eafc0dcbea \
    --hash=sha256:9bcc1e77fbd1609198966ded6b2a9897bd6c6bcbd2287a2fc7d75f1a254179c5 \
    --hash=sha256:a408c3c51358c89b29cfa5317cf11518b7ce5de1717abb55c5ae2d2921027de6 \
    --hash=sha256:a9bf8adc9e1f3012edc8f09b08336272aec0c55bc677422273e21280db748f7c \
    --hash=sha256:b818db35879d2edf7f46c7e729c700a0bce03b61b9412f5a7118406687cb151d \
    --hash=sha256:b8974b2a266b54c96709bd5e239979cddfd2dbceed331aa567ea1d7c4a2202db \
    --hash=sha256:be392ec3529e2f57faa28709d60723a763904f71a2b63aabe14fee6648fe3b14 \
    --hash=sha256:d3972b13148c1d1fbc092b27678a33b3080d1ac0ca305742b0119b75f9e87e38 \
    --hash=sha256:d40dcf533ca481355aa7b682e9e079f766f35715defa4929aeb5597f9604272e \
    --hash=sha256:e93df708c69a193fc7987192f94df250f83f3851fda49413f02ba5dded639482 \
    --hash=sha256:efd7e6660674e234e29937bc1481dceb7e0336bfae75b856b4fb272b5093c5d4 \
    --hash=sha256:f9b3a78f69dcbd803cf2fb3f972779875b244c1115481dfbdd567b2c22b31f6b \
    --hash=sha256:fa39475eaccb98f9199eccfda4298abaf35ae0caec676ffc25b3a5e224044464 \
    --hash=sha256:fbce6dae41b692a5973d0f2158f782b9ad05babc2c2019a970a1094a23909b1b
    # via
    #   -r dockerfiles/mlrun-kfp/../../extras-requirements.txt
    #   -r extras-requirements.txt
    #   matplotlib
fonttools==4.61.0 ; python_full_version >= '3.10' \
    --hash=sha256:0011d640afa61053bc6590f9a3394bd222de7cfde19346588beabac374e9d8ac \
    --hash=sha256:02bdf8e04d1a70476564b8640380f04bb4ac74edc1fc71f1bacb840b3e398ee9 \
    --hash=sha256:0bdcf2e29d65c26299cc3d502f4612365e8b90a939f46cd92d037b6cb7bb544a \
    --hash=sha256:13e3e20a5463bfeb77b3557d04b30bd6a96a6bb5c15c7b2e7908903e69d437a0 \
    --hash=sha256:14a290c5c93fcab76b7f451e6a4b7721b712d90b3b5ed6908f1abcf794e90d6d \
    --hash=sha256:14fafda386377b6131d9e448af42d0926bad47e038de0e5ba1d58c25d621f028 \
    --hash=sha256:1cfa2eb9bae650e58f0e8ad53c49d19a844d6034d6b259f30f197238abc1ccee \
    --hash=sha256:276f14c560e6f98d24ef7f5f44438e55ff5a67f78fa85236b218462c9f5d0635 \
    --hash=sha256:2cb5e45a824ce14b90510024d0d39dae51bd4fbb54c42a9334ea8c8cf4d95cbe \
    --hash=sha256:2de14557d113faa5fb519f7f29c3abe4d69c17fe6a5a2595cc8cda7338029219 \
    --hash=sha256:2f0bafc8a3b3749c69cc610e5aa3da832d39c2a37a68f03d18ec9a02ecaac04a \
    --hash=sha256:328a9c227984bebaf69f3ac9062265f8f6acc7ddf2e4e344c63358579af0aa3d \
    --hash=sha256:3b2065d94e5d63aafc2591c8b6ccbdb511001d9619f1bca8ad39b745ebeb5efa \
    --hash=sha256:4238120002e68296d55e091411c09eab94e111c8ce64716d17df53fd0eb3bb3d \
    --hash=sha256:46cb3d9279f758ac0cf671dc3482da877104b65682679f01b246515db03dbb72 \
    --hash=sha256:58b4f1b78dfbfe855bb8a6801b31b8cdcca0e2847ec769ad8e0b0b692832dd3b \
    --hash=sha256:59587bbe455dbdf75354a9dbca1697a35a8903e01fab4248d6b98a17032cee52 \
    --hash=sha256:5a9b78da5d5faa17e63b2404b77feeae105c1b7e75f26020ab7a27b76e02039f \
    --hash=sha256:627216062d90ab0d98215176d8b9562c4dd5b61271d35f130bcd30f6a8aaa33a \
    --hash=sha256:63c7125d31abe3e61d7bb917329b5543c5b3448db95f24081a13aaf064360fc8 \
    --hash=sha256:6781e7a4bb010be1cd69a29927b0305c86b843395f2613bdabe115f7d6ea7f34 \
    --hash=sha256:67d841aa272be5500de7f447c40d1d8452783af33b4c3599899319f6ef9ad3c1 \
    --hash=sha256:68704a8bbe0b61976262b255e90cde593dc0fe3676542d9b4d846bad2a890a76 \
    --hash=sha256:6b493c32d2555e9944ec1b911ea649ff8f01a649ad9cba6c118d6798e932b3f0 \
    --hash=sha256:6e5ca8c62efdec7972dfdfd454415c4db49b89aeaefaaacada432f3b7eea9866 \
    --hash=sha256:70e2a0c0182ee75e493ef33061bfebf140ea57e035481d2f95aa03b66c7a0e05 \
    --hash=sha256:787ef9dfd1ea9fe49573c272412ae5f479d78e671981819538143bec65863865 \
    --hash=sha256:7b446623c9cd5f14a59493818eaa80255eec2468c27d2c01b56e05357c263195 \
    --hash=sha256:7fb5b84f48a6a733ca3d7f41aa9551908ccabe8669ffe79586560abcc00a9cfd \
    --hash=sha256:9064b0f55b947e929ac669af5311ab1f26f750214db6dd9a0c97e091e918f486 \
    --hash=sha256:96dfc9bc1f2302224e48e6ee37e656eddbab810b724b52e9d9c13a57a6abad01 \
    --hash=sha256:9821ed77bb676736b88fa87a737c97b6af06e8109667e625a4f00158540ce044 \
    --hash=sha256:a32a16951cbf113d38f1dd8551b277b6e06e0f6f776fece0f99f746d739e1be3 \
    --hash=sha256:a5c5fff72bf31b0e558ed085e4fd7ed96eb85881404ecc39ed2a779e7cf724eb \
    --hash=sha256:ad751319dc532a79bdf628b8439af167181b4210a0cd28a8935ca615d9fdd727 \
    --hash=sha256:adbb4ecee1a779469a77377bbe490565effe8fce6fb2e6f95f064de58f8bac85 \
    --hash=sha256:b2b734d8391afe3c682320840c8191de9bd24e7eb85768dd4dc06ed1b63dbb1b \
    --hash=sha256:b5ca59b7417d149cf24e4c1933c9f44b2957424fc03536f132346d5242e0ebe5 \
    --hash=sha256:b6ceac262cc62bec01b3bb59abccf41b24ef6580869e306a4e88b7e56bb4bdda \
    --hash=sha256:ba774b8cbd8754f54b8eb58124e8bd45f736b2743325ab1a5229698942b9b433 \
    --hash=sha256:c53b47834ae41e8e4829171cc44fec0fdf125545a15f6da41776b926b9645a9a \
    --hash=sha256:c84b430616ed73ce46e9cafd0bf0800e366a3e02fb7e1ad7c1e214dbe3862b1f \
    --hash=sha256:dc25a4a9c1225653e4431a9413d0381b1c62317b0f543bdcec24e1991f612f33 \
    --hash=sha256:df8cbce85cf482eb01f4551edca978c719f099c623277bda8332e5dbe7dba09d \
    --hash=sha256:e074bc07c31406f45c418e17c1722e83560f181d122c412fa9e815df0ff74810 \
    --hash=sha256:e0d87e81e4d869549585ba0beb3f033718501c1095004f5e6aef598d13ebc216 \
    --hash=sha256:e24a1565c4e57111ec7f4915f8981ecbb61adf66a55f378fdc00e206059fcfef \
    --hash=sha256:e2bfacb5351303cae9f072ccf3fc6ecb437a6f359c0606bae4b1ab6715201d87 \
    --hash=sha256:e6cd0d9051b8ddaf7385f99dd82ec2a058e2b46cf1f1961e68e1ff20fcbb61af \
    --hash=sha256:ec520a1f0c7758d7a858a00f090c1745f6cde6a7c5e76fb70ea4044a15f712e7
    # via
    #   -r dockerfiles/mlrun-kfp/../../extras-requirements.txt
    #   -r extras-requirements.txt
    #   matplotlib
Optional Install Robustness

The software-properties-common install now uses || true. Verify that later build steps do not rely on tools from this package; otherwise failures could be masked on Debian.

# Install software-properties-common if available (Ubuntu-specific, optional on Debian)
RUN apt-get update && apt-get install --no-install-recommends -y software-properties-common || true \
    && rm -rf /var/lib/apt/lists/*
Version Consistency

mlflow==2.22.4 is pinned and fonttools is split by Python version; verify downstream locked requirement files and images remain in sync and no transitive dependency conflicts arise with matplotlib or mlflow extras.

fonttools==4.61.0; python_version >= "3.10"
fonttools==4.59.0; python_version < "3.10"
mlflow==2.22.4

@pull-request-agent
Copy link

pull-request-agent bot commented Dec 11, 2025

PR Code Suggestions ✨

Latest suggestions up to 48aea87

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Restore necessary Python markers

Removing the Python version marker can introduce incompatible pins for non-3.11
runtimes if any exist. Ensure your GPU image actually runs only on the supported
Python version, or restore markers for packages known to differ by Python version to
prevent resolution/install failures.

dockerfiles/gpu/locked-requirements.txt [254-256]

-bokeh==3.7.3
+bokeh==3.7.3 ; python_full_version >= '3.11'
Suggestion importance[1-10]: 7

__

Why: Line 254 changes bokeh by removing the Python marker; reintroducing the marker can prevent cross-version incompatibilities, though impact depends on supported runtimes.

Medium
Keep per-Python wheels split

Consolidating contourpy to a single pin across Python versions may lead to binary
wheel incompatibilities, especially for older minor versions. Restore the
per-version pins to avoid import/runtime errors in environments not matching the
wheel build tags.

dockerfiles/gpu/locked-requirements.txt [488-491]

-contourpy==1.3.3
+contourpy==1.3.0 ; python_full_version < '3.10'
+contourpy==1.3.2 ; python_full_version == '3.10.*'
+contourpy==1.3.3 ; python_full_version >= '3.11'
Suggestion importance[1-10]: 7

__

Why: Lines 488-491 consolidate contourpy; keeping per-version pins can avoid wheel/ABI issues across Python versions, improving robustness for mixed environments.

Medium
Preserve interpreter-specific grpc pins

Unifying grpcio-tools across Python versions can break code generation due to pinned
protobuf/ABI mismatches on older interpreters. If you support multiple Python
versions, keep version-conditional pins aligned with upstream compatibility
matrices.

dockerfiles/gpu/locked-requirements.txt [1187-1190]

-grpcio-tools==1.62.3
+grpcio-tools==1.48.2 ; python_full_version < '3.11'
+grpcio-tools==1.62.3 ; python_full_version >= '3.11'
Suggestion importance[1-10]: 7

__

Why: Lines 1187-1190 introduce unconditional grpcio-tools; recommending version-conditional pins aligns with prior diff context and can prevent protobuf/ABI mismatches across interpreters.

Medium
Avoid hard Python-version pin

Pinning to --python-version 3.11 in the lock command can break builds on different
Python runtimes used by your images or CI. If your targets include other Python
versions, remove the hard pin or generate per-Python lock files to prevent resolver
mismatches and runtime incompatibilities.

dockerfiles/mlrun/locked-requirements.txt [2]

-#    uv pip compile requirements.txt extras-requirements.txt dockerfiles/mlrun/requirements.txt --python-version 3.11 --output-file dockerfiles/mlrun/locked-requirements.txt
+#    uv pip compile requirements.txt extras-requirements.txt dockerfiles/mlrun/requirements.txt --output-file dockerfiles/mlrun/locked-requirements.txt
Suggestion importance[1-10]: 6

__

Why: The existing line with --python-version 3.11 is present at line 2 and the advice to avoid hard-pinning can improve portability across runtimes, though it depends on project policy and is not strictly a bug fix.

Low
Restore version markers for compatibility

Consolidating click to a single version may break environments previously
constrained by Python markers (e.g., <3.10). If you still build images for older
Python, reintroduce markers or ensure click==8.3.1 supports all targeted runtimes to
avoid import/runtime failures.

dockerfiles/mlrun/locked-requirements.txt [518-520]

-click==8.3.1 \
+click==8.3.1 ; python_version >= '3.10' \
     --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \
     --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6
-...
-# (older split markers for click were removed)
+click==8.1.8 ; python_version < '3.10' \
+    --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \
+    --hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a
Suggestion importance[1-10]: 6

__

Why: The unified click==8.3.1 is at lines 518-520; reintroducing markers could prevent breakage on older Pythons if still supported. Useful but contingent on supported Python matrix.

Low
Align lockfile Python compatibility

Pinning the lockfile to Python 3.11 in the generation command may produce wheels
incompatible with other Python minors/patches used by your GPU image matrix. Verify
that all runtime images use Python 3.11 exactly, or regenerate per-target Python
version. Otherwise, builds on differing Python versions can break at install time.

dockerfiles/gpu/locked-requirements.txt [2]

-#    uv pip compile requirements.txt extras-requirements.txt dockerfiles/mlrun/requirements.txt --python-version 3.11 --output-file dockerfiles/gpu/locked-requirements.txt
+#    uv pip compile requirements.txt extras-requirements.txt dockerfiles/mlrun/requirements.txt --python-version 3.11.* --output-file dockerfiles/gpu/locked-requirements.txt
Suggestion importance[1-10]: 6

__

Why: The line at 2 adds a generation command pinned to Python 3.11; suggesting verification or broader pin (3.11.*) is reasonable but not critical, and it's an advisement rather than a precise fix.

Low
Reintroduce version-split dependency

You removed the split pins by Python version. If any downstream dependency expects
click <8.2 on older interpreters, this can break CLI entry points. Re-add the
version markers to match interpreter constraints or confirm all environments use the
newer-compatible Python.

dockerfiles/gpu/locked-requirements.txt [459-461]

-click==8.2.1
+click==8.1.8 ; python_full_version < '3.10'
+click==8.2.1 ; python_full_version >= '3.10'
Suggestion importance[1-10]: 6

__

Why: At lines 459-461, click is unconditionally pinned; restoring version-split could help multi-Python support, but if project standardizes on newer Python this may be unnecessary.

Low
Reinstate ABI safety marker

Dropping the Python version marker can cause installation of incompatible wheels on
unsupported Python versions. If non-3.11 environments are still built or used,
re-add the marker to ensure correct ABI-matching wheels.

dockerfiles/gpu/locked-requirements.txt [1504-1506]

-lz4==4.4.4
+lz4==4.4.4 ; python_full_version >= '3.11'
Suggestion importance[1-10]: 6

__

Why: Line 1504 removes the Python marker for lz4; re-adding the marker can prevent incompatible wheel installs if non-3.11 environments are still targeted.

Low
General
Validate conditional dependency marker

The environment marker excludes Python >3.11.2, but upstream aiohttp previously
depended on async-timeout. Since you upgraded aiohttp to 3.13.2, ensure no remaining
consumers need this conditional to avoid runtime import errors on newer Python.
Align or remove the marker based on actual deps.

dockerfiles/mlrun/locked-requirements.txt [238-241]

 async-timeout==5.0.1 ; python_full_version <= '3.11.2' \
     --hash=sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c \
     --hash=sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3
-    # via redis
+    # via
+    #   redis
+    #   (verify no aiohttp path requires it; remove marker/package if unused)
Suggestion importance[1-10]: 5

__

Why: The snippet with the environment marker appears (lines 238-241) and advising verification after upgrading aiohttp is sensible, but it’s an ensure/verify suggestion without actionable change.

Low
Ensure stable CA bundle version

Jumping to a future-dated certifi can cause SSL trust discrepancies with system cert
stores in some base images. Verify TLS handshake behavior against your services; if
issues arise, revert to a widely tested current release for stability.

dockerfiles/mlrun/locked-requirements.txt [317-319]

-certifi==2025.11.12 \
-    --hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \
-    --hash=sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316
+certifi==2025.7.14 \
+    --hash=sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2 \
+    --hash=sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995
Suggestion importance[1-10]: 5

__

Why: The certifi==2025.11.12 pin is at lines 317-319; recommending a revert for stability is cautious but speculative without concrete incompatibility evidence.

Low
Verify async stack compatibility

aiohttp 3.13 changed some behaviors and dropped past async-timeout coupling; ensure
downstream packages (e.g., aiobotocore, aioitertools) remain compatible. If you
observe runtime or type errors, consider pinning compatible minors across this async
stack to avoid subtle event-loop issues.

dockerfiles/mlrun/locked-requirements.txt [17-137]

 aiohttp==3.13.2 \
     --hash=sha256:04c3971421576ed24c191f610052bcb2f059e395bc2489dd99e397f9bc466329 \
-    ... (many hashes) ...
+    ... (retain full hash list) ...
     --hash=sha256:ff5e771f5dcbc81c64898c597a434f7682f2259e0cd666932a913d53d1341d1a
-    # via
-    #   -r requirements.txt
-    #   adlfs
+aioitertools==0.13.0 \
+    --hash=sha256:0be0292b856f08dfac90e31f4739432f4cb6d7520ab9eb73e143f4f2fa5259be \
+    --hash=sha256:620bd241acc0bbb9ec819f1ab215866871b4bbd1f73836a55f799200ee86950c
+# Verified compatible versions across aiohttp/aiobotocore/aioitertools
Suggestion importance[1-10]: 5

__

Why: The aiohttp==3.13.2 block is at lines 17-137 and noting potential compatibility issues across async deps is prudent, but it largely asks to verify and doesn’t pinpoint a concrete issue in the diff.

Low
Security
Remove unnecessary new dependency

Introducing annotated-doc adds a new transitive dependency path to your API surface.
Verify this package is actually required by your fastapi version; if not strictly
needed, remove it from the lock to reduce supply-chain and compatibility risk.

dockerfiles/mlrun/locked-requirements.txt [181-184]

-annotated-doc==0.0.4 \
-    --hash=sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320 \
-    --hash=sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4
-    # via fastapi
+# (Remove the annotated-doc block entirely if FastAPI does not require it)
Suggestion importance[1-10]: 4

__

Why: The annotated-doc block exists at lines 181-184, and the suggestion to verify necessity is reasonable but speculative and provides no concrete evidence it’s unnecessary; moderate impact at best.

Low

Previous suggestions

Suggestions up to commit 03c0347
CategorySuggestion                                                                                                                                    Impact
Possible issue
Restore Python guards on pins

Reintroducing unconditional pins (removing environment markers) can produce
incompatible installs if this lock is reused on unsupported Python versions. Ensure
this file is only consumed in Python versions compatible with all unconditional
pins, or retain markers for packages with Python-specific wheels.

dockerfiles/gpu/locked-requirements.txt [254-256]

-bokeh==3.7.3
+bokeh==3.7.3 ; python_version >= "3.11"
Suggestion importance[1-10]: 7

__

Why: The PR removed the python_full_version marker for bokeh; reinstating environment guards could avoid incompatibility on unsupported Pythons if this lock is reused beyond 3.11.

Medium
Maintain version-split for compatibility

Removing the Python-specific split to a single click pin risks incompatibility on
older images. If the GPU image or downstream tools may run under varied Python
versions, keep version markers to prevent resolver conflicts and runtime errors.

dockerfiles/gpu/locked-requirements.txt [459-461]

-click==8.2.1
+click==8.1.8 ; python_version < "3.10"
+click==8.2.1 ; python_version >= "3.10"
Suggestion importance[1-10]: 7

__

Why: The PR consolidates click to a single pin; restoring split markers can prevent incompatibilities on older Python, assuming multi-Python usage of the lock.

Medium
Re-add Python-aware contourpy pins

contourpy wheels differ by Python version; making this unconditional can break
installs on unsupported Pythons. Reinstate markers so the resolver selects a
compatible build for each Python.

dockerfiles/gpu/locked-requirements.txt [488-491]

-contourpy==1.3.3
+contourpy==1.3.0 ; python_version < "3.10"
+contourpy==1.3.2 ; python_version == "3.10"
+contourpy==1.3.3 ; python_version >= "3.11"
Suggestion importance[1-10]: 7

__

Why: The PR collapsed multiple contourpy pins into one; reintroducing markers helps ensure wheel availability across Python versions if needed.

Medium
Sync dask stack with markers

Align dask/distributed pins with Python markers if multiple Python versions are in
scope. Mixed unconditional pins may select wheels unsupported by older Pythons,
causing install or runtime failures.

dockerfiles/gpu/locked-requirements.txt [617-619]

-distributed==2024.12.1
+dask==2023.12.1 ; python_version < "3.11"
+dask==2024.12.1 ; python_version >= "3.11"
+distributed==2023.12.1 ; python_version < "3.11"
+distributed==2024.12.1 ; python_version >= "3.11"
Suggestion importance[1-10]: 7

__

Why: dask/distributed were unified to unconditional pins; adding markers maintains compatibility for older Python environments if the lock is reused.

Medium
Remove hardcoded Python version

Avoid pinning a specific Python minor version in the lock-generation command comment
unless the runtime is guaranteed to be 3.11. If images are ever built with a
different Python, resolution may mismatch and produce incompatible wheels. Reflect
the actual build Python or remove the flag to prevent drift.

dockerfiles/gpu/locked-requirements.txt [2]

-#    uv pip compile requirements.txt extras-requirements.txt dockerfiles/mlrun/requirements.txt --python-version 3.11 --output-file dockerfiles/gpu/locked-requirements.txt
+#    uv pip compile requirements.txt extras-requirements.txt dockerfiles/mlrun/requirements.txt --output-file dockerfiles/gpu/locked-requirements.txt
Suggestion importance[1-10]: 6

__

Why: The existing code at line 2 pins --python-version 3.11 in the generation comment; recommending removal can prevent drift if builds vary, but it's context-dependent and not critical.

Low
Guard lz4 by Python version

lz4 provides wheels that may not exist for all Python minors; removing the Python
guard risks build-from-source or failures. Add back the marker to ensure only
supported Python variants consume this pin.

dockerfiles/gpu/locked-requirements.txt [1504-1506]

-lz4==4.4.4
+lz4==4.4.4 ; python_version >= "3.11"
Suggestion importance[1-10]: 6

__

Why: The PR removed the python version guard for lz4; restoring it can reduce risk of missing wheels on older Python, though impact depends on supported Python scope.

Low
Restore version-guarded click pins

Merging multiple click pins into a single unguarded pin can break consumers that
previously relied on version-specific markers. Reintroduce environment markers if
different Python versions are supported to prevent incompatible resolution at build
time.

dockerfiles/mlrun/locked-requirements.txt [519-523]

-click==8.3.1 \
-    --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \
-    --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6
+click==8.2.1 ; python_full_version >= '3.10' \
+    --hash=sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202 \
+    --hash=sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b
+click==8.1.8 ; python_full_version < '3.10' \
+    --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \
+    --hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a
     # via
     #   -r requirements.txt
     #   dask
     #   distributed
     #   flask
     #   mlflow-skinny
     #   uvicorn
Suggestion importance[1-10]: 5

__

Why: The existing unified click==8.3.1 is present at those lines; the suggestion to restore version markers could help multi-Python environments but isn't clearly required by this PR and reintroduces older versions without evidence.

Low
General
Avoid hardcoding Python version

Locking with a fixed --python-version 3.11 may produce wheels incompatible with
other interpreter versions used by your images. If multi-Python builds are expected,
regenerate per-target locks or drop the explicit flag to match the actual build
runtime.

dockerfiles/mlrun/locked-requirements.txt [2]

-#    uv pip compile requirements.txt extras-requirements.txt dockerfiles/mlrun/requirements.txt --python-version 3.11 --output-file dockerfiles/mlrun/locked-requirements.txt
+#    uv pip compile requirements.txt extras-requirements.txt dockerfiles/mlrun/requirements.txt --output-file dockerfiles/mlrun/locked-requirements.txt
Suggestion importance[1-10]: 6

__

Why: The comment line exactly matches and advising against --python-version 3.11 can improve portability; however, it's a process/config note rather than a concrete code bug.

Low
Narrow environment marker scope

Since aiohttp==3.13.2 is now pinned, async-timeout should not be pulled for aiohttp
on Python 3.11+. Keep the marker restricted to avoid unnecessary backports and
conflicts. Verify no other dependency (besides redis) requires async-timeout;
otherwise, consider scoping it further.

dockerfiles/mlrun/locked-requirements.txt [238-241]

-async-timeout==5.0.1 ; python_full_version <= '3.11.2' \
+async-timeout==5.0.1 ; python_full_version <= '3.11.2' and extra == "redis" \
     --hash=sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c \
     --hash=sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3
     # via redis
Suggestion importance[1-10]: 4

__

Why: The snippet matches the new hunk and the rationale (aiohttp 3.13+ not needing async-timeout) is reasonable, but adding an extra marker extra == "redis" is not grounded in the lockfile context and may be incorrect; suggests verification rather than a precise fix.

Low
Avoid unnecessary transitive pins

New transitive fastapi dependency pin can introduce ABI or API shifts. Confirm this
package is intended and compatible; if not required, avoid pinning it to reduce
surface area and potential conflicts.

dockerfiles/mlrun/locked-requirements.txt [181-185]

-annotated-doc==0.0.4 \
-    --hash=sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320 \
-    --hash=sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4
-    # via fastapi
+# annotated-doc is a transitive dependency of fastapi; pin only if explicitly required
+# annotated-doc==0.0.4 \
+#     --hash=sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320 \
+#     --hash=sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4
+#     # via fastapi
Suggestion importance[1-10]: 3

__

Why: The lines exist and adding annotated-doc may be unnecessary, but removing a pinned transitive from a lockfile undermines reproducibility; the advice is cautious and low impact.

Low
Suggestions up to commit 561453e
CategorySuggestion                                                                                                                                    Impact
General
Avoid duplicate version pins

Pinning mlflow here while also pinning it in extras-requirements.txt risks version
drift between images and extras, causing runtime incompatibilities. Consolidate the
mlflow pin to a single source or ensure both locations use exactly the same
constraint via a shared include.

dockerfiles/mlrun-api/requirements.txt [19-23]

 mlrun-pipelines-kfp-v1-8~=0.5.7
 grpcio~=1.70.0
 fonttools==4.61.0
-mlflow==2.22.4
+# mlflow pinned in extras-requirements.txt to a single source of truth
Suggestion importance[1-10]: 7

__

Why: Correctly identifies duplicate pinning of mlflow across files which can drift; consolidating improves maintainability though it’s advisory rather than a concrete bug fix.

Medium
Validate hard pin compatibility

Pinning mlflow exactly may conflict with transitive constraints from the locked
requirements in production images. If a hard pin is required, verify all dependent
integrations (e.g., tracking server, SQLAlchemy, alembic) match this version, or
consider a compatible range to reduce breakage risk.

extras-requirements.txt [41]

-mlflow==2.22.4
+mlflow==2.22.4  # ensure compatibility with alembic/sqlalchemy versions across images
Suggestion importance[1-10]: 6

__

Why: Sensible caution about locking mlflow==2.22.4 and its dependencies; it’s accurate and relevant but primarily a verification note with limited immediate impact.

Low
Check alembic compatibility

Upgrading alembic can introduce migration API changes; ensure the pinned mlflow
version’s SQLAlchemy/alembic compatibility matrix is satisfied to prevent migration
failures at startup. Run a migration dry-run in CI.

dockerfiles/mlrun-api/locked-requirements.txt [170-172]

 alembic==1.17.2 \
     --hash=sha256:bbe9751705c5e0f14877f02d46c53d10885e377e3d90eda810a016f9baa19e8e \
     --hash=sha256:f483dd1fe93f6c5d49217055e4d15b905b425b6af906746abb35b69c1996c4e6
+# Confirm compatibility with mlflow==2.22.4 and SQLAlchemy versions
Suggestion importance[1-10]: 6

__

Why: Advises verifying alembic upgrade compatibility with mlflow/SQLAlchemy; relevant and prudent though mostly a CI/process check.

Low
Verify TLS store compatibility

The lock pins certifi to a future-dated release; ensure your base OS trust store and
requests/urllib3 stacks are compatible to avoid SSL verification mismatches. If
build images lack CA updates, this can break outbound TLS.

dockerfiles/mlrun-api/locked-requirements.txt [314-316]

 certifi==2025.11.12 \
     --hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \
     --hash=sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316
+# Verify TLS chain with base image CA store to prevent SSL errors
Suggestion importance[1-10]: 5

__

Why: The note about certifi potentially mismatching OS trust stores is reasonable and relevant, but it’s an operational check rather than a code issue.

Low
Reconfirm conditional dependency need

aiohttp 3.13 no longer requires async-timeout on modern Python, but your conditional
pin remains. Confirm your runtime Python version; if >3.11.2, this extra may be
unnecessary and could cause dependency resolution issues.

dockerfiles/mlrun-api/locked-requirements.txt [239-242]

 aiohttp==3.13.2 \
     --hash=sha256:04c3971421576ed24c191f610052bcb2f059e395bc2489dd99e397f9bc466329 \
     ...
+# async-timeout only for <=3.11.2 runtimes; validate actual Python version in images
 async-timeout==5.0.1 ; python_full_version <= '3.11.2' \
     --hash=sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c \
     --hash=sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3
Suggestion importance[1-10]: 5

__

Why: Points out the conditional async-timeout with newer aiohttp; it’s contextually accurate but mainly suggests validation without a concrete change.

Low
Suggestions up to commit 4939ff7
CategorySuggestion                                                                                                                                    Impact
General
Reassess overrides usage

Using --overrides can force versions conflicting with transitive constraints,
potentially breaking reproducible builds. Ensure the override file is minimal and
only includes intentional pins; otherwise drop the flag to respect upstream
constraints.

Makefile [935]

---overrides dockerfiles/mlrun-api/requirements.txt \
+# Consider removing overrides if causing conflicts:
+# --overrides dockerfiles/mlrun-api/requirements.txt \
Suggestion importance[1-10]: 6

__

Why: Advising caution with --overrides is relevant given the PR adds it; it’s a valid maintenance consideration, though it’s a recommendation rather than a concrete bug fix.

Low
Avoid overly strict mlflow pin

Strictly pinning mlflow==3.2.0 while enabling overrides in the lock process can
cause conflicts with plugins or providers expecting newer mlflow APIs. Use a
compatible range to avoid resolver breaks and ABI/API mismatches.

dockerfiles/mlrun-api/requirements.txt [23]

-mlflow==3.2.0
+mlflow>=3.2,<3.3
Suggestion importance[1-10]: 5

__

Why: Using a range for mlflow may ease compatibility with plugins, but the PR intentionally pins versions and no concrete conflict is shown; it's a reasonable but non-critical improvement.

Low
Clarify override consistency note

Documenting --overrides in the lock header while also pinning strict versions can
lead to non-reproducible locks if overrides drift. Add a note to keep override and
requirements pins consistent to avoid resolver conflicts.

dockerfiles/mlrun-api/locked-requirements.txt [2]

 #    uv pip compile requirements.txt extras-requirements.txt dockerfiles/mlrun-api/requirements.txt --overrides dockerfiles/mlrun-api/requirements.txt --python-version 3.11 --output-file dockerfiles/mlrun-api/locked-requirements.txt
+# NOTE: Keep dockerfiles/mlrun-api/requirements.txt pins minimal and consistent with overrides to prevent resolver conflicts.
Suggestion importance[1-10]: 3

__

Why: Adding a note improves documentation but offers minimal functional impact; also, guidelines disallow high scores for comment-only changes.

Low
Possible issue
Relax strict version pin

Pinning fonttools==4.61.0 may be too old for transitive dependencies (e.g.,
Matplotlib or Pillow) often requiring newer fonttools, causing install or runtime
conflicts. Consider a compatible range to reduce resolver failures.

dockerfiles/mlrun-api/requirements.txt [22]

-fonttools==4.61.0
+fonttools>=4.61,<5
Suggestion importance[1-10]: 5

__

Why: The suggestion to relax fonttools==4.61.0 to a compatible range could reduce resolver conflicts, but it's speculative without evidence from this PR; impact is moderate and context-dependent.

Low
Suggestions up to commit 5fb65c8
CategorySuggestion                                                                                                                                    Impact
Possible issue
Use correct uv override flag

Ensure the --overrides flag matches the actual file name expected by uv (singular
--override in some versions). A mismatched flag can silently be ignored, producing
an incorrect lock.

dockerfiles/mlrun-api/locked-requirements.txt [2]

-#    uv pip compile requirements.txt extras-requirements.txt dockerfiles/mlrun-api/requirements.txt --overrides dockerfiles/mlrun-api/requirements.txt --python-version 3.11 --output-file dockerfiles/mlrun-api/locked-requirements.txt
+#    uv pip compile requirements.txt extras-requirements.txt dockerfiles/mlrun-api/requirements.txt --override dockerfiles/mlrun-api/requirements.txt --python-version 3.11 --output-file dockerfiles/mlrun-api/locked-requirements.txt
Suggestion importance[1-10]: 7

__

Why: This points out a potential mismatch in uv CLI flags shown in the autogenerated header; correctness depends on uv version, but using the wrong flag could indeed yield an incorrect lock.

Medium
Fix uv flag spelling

Verify the correct uv flag spelling; many uv versions expect --override (singular).
Using an unrecognized flag can result in overrides not applied, yielding a bad lock
file.

Makefile [935]

---overrides dockerfiles/mlrun-api/requirements.txt \
+--override dockerfiles/mlrun-api/requirements.txt \
Suggestion importance[1-10]: 7

__

Why: The Makefile line uses --overrides; if the tool expects --override, overrides may be ignored, making this potentially impactful though version-dependent.

Medium
General
Align mlflow constraints

A hard pin to mlflow==3.2.0 can drift from dependencies.py which specifies ~3.2.
Align the constraint to avoid environment divergence between installations.

dockerfiles/mlrun-api/requirements.txt [23]

-mlflow==3.2.0
+mlflow~=3.2.0
Suggestion importance[1-10]: 6

__

Why: Aligning mlflow constraints between files reduces divergence risk; it correctly references the new pin and suggests a compatible range consistent with dependencies.py.

Low
Narrow the mlflow version range

Bumping mlflow to ~3.2 may introduce incompatible API or dependency changes versus
the rest of your stack. Consider scoping this upgrade to a narrower patch range
until compatibility is verified.

dependencies.py [64]

-"mlflow": ["mlflow~=3.2"],
+"mlflow": ["mlflow~=3.2.0"],
Suggestion importance[1-10]: 5

__

Why: The suggestion correctly references the added mlflow constraint and proposes narrowing to patch-level; it's a reasonable caution but not strictly necessary without evidence of incompatibility.

Low
Relax strict fonttools pin

Pinning fonttools may conflict with transitive deps (e.g., matplotlib) and restrict
security updates. Prefer a compatible range to reduce breakage risk unless exact pin
is required.

dockerfiles/mlrun-api/requirements.txt [22]

-fonttools==4.61.0
+fonttools~=4.61.0
Suggestion importance[1-10]: 4

__

Why: Relaxing an exact pin could reduce conflicts but may also introduce variability; it's a style/maintainability improvement with moderate impact and context-dependent.

Low

@pull-request-agent
Copy link

Persistent review updated to latest commit 5fb65c8

@pull-request-agent
Copy link

Persistent review updated to latest commit 4939ff7

@pull-request-agent
Copy link

Persistent review updated to latest commit 561453e

@pull-request-agent
Copy link

Persistent review updated to latest commit 03c0347

@pull-request-agent
Copy link

Persistent review updated to latest commit 48aea87

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants