This is an automated email from the ASF dual-hosted git repository.

github-actions[bot] pushed a commit to branch cherry-pick-3604c670-to-branch-1.3
in repository https://gitbox.apache.org/repos/asf/gravitino.git

commit facc217c3e73c429eebd4bcf0da3d039ae05b5bf
Author: Qi Yu <[email protected]>
AuthorDate: Thu Aug 27 14:09:10 2026 +0800

    [#12660] fix(mcp-server): Invoke isort/black console scripts and pin their 
versions (#12661)
    
    ### What changes were proposed in this pull request?
    
    In `mcp-server/build.gradle.kts`:
    
    1. Invoke the formatters through their venv console scripts
    (`.venv/bin/isort`, `.venv/bin/black`) instead of `python -m <tool>`,
    via a small `venvExecutable(name)` helper that mirrors the existing
    `venvPython` Windows/POSIX handling.
    2. Pin the installed versions (`black==26.5.1`, `isort==9.0.0`) instead
    of installing them unconstrained.
    
    ### Why are the changes needed?
    
    `isort` 9.0.0 no longer ships an `isort/__main__.py`, so `python -m
    isort` fails outright:
    
    ```
    .venv/bin/python: No code object available for isort.__main__;
    'isort' is a package and cannot be directly executed
    > Task :mcp-server:formatCheckPython FAILED
    ```
    
    `installFormatTools` installed `black` and `isort` without version
    constraints, so CI resolved the new release as soon as it was published
    and every job that runs `formatCheckPython` started failing — including
    the backend integration test jobs, which run the check before the tests.
    Pinning also keeps a future `black` release from silently changing the
    format check outcome.
    
    Fix: #12660
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Locally on a clean venv:
    
    - `./gradlew :mcp-server:formatCheckPython` — BUILD SUCCESSFUL (`80
    files would be left unchanged`); fails on `main` with the error above.
    - `./gradlew :mcp-server:formatApplyPython` — BUILD SUCCESSFUL, no files
    modified.
---
 mcp-server/build.gradle.kts | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/mcp-server/build.gradle.kts b/mcp-server/build.gradle.kts
index fe773fcf62..9bc51ad8e6 100644
--- a/mcp-server/build.gradle.kts
+++ b/mcp-server/build.gradle.kts
@@ -39,13 +39,21 @@ fun getUvExecutable(): String {
   }
 }
 
-val venvPython = when {
+// The formatters are invoked through their console scripts rather than 
`python -m <tool>`:
+// isort 9 no longer ships an `__main__` module, so `python -m isort` cannot 
be executed.
+fun venvExecutable(name: String): String = when {
   System.getProperty("os.name").contains("win", ignoreCase = true) ->
-    venvDir.resolve("Scripts/python.exe").absolutePath
+    venvDir.resolve("Scripts/$name.exe").absolutePath
   else ->
-    venvDir.resolve("bin/python").absolutePath
+    venvDir.resolve("bin/$name").absolutePath
 }
 
+val venvPython = venvExecutable("python")
+
+// Pinned so that a new formatter release cannot change the outcome of the 
format check in CI.
+val blackRequirement = "black==26.5.1"
+val isortRequirement = "isort==9.0.0"
+
 tasks {
   register<Exec>("installUv") {
     group = "python"
@@ -160,7 +168,7 @@ tasks {
     workingDir(pythonProjectDir)
 
     doFirst {
-      commandLine(getUvExecutable(), "pip", "install", "--python", venvPython, 
"black", "isort")
+      commandLine(getUvExecutable(), "pip", "install", "--python", venvPython, 
blackRequirement, isortRequirement)
     }
 
     doLast {
@@ -213,13 +221,13 @@ tasks {
       // Apply isort
       exec {
         workingDir = pythonProjectDir
-        commandLine(venvPython, "-m", "isort", "mcp_server", "tests")
+        commandLine(venvExecutable("isort"), "mcp_server", "tests")
       }
 
       // Apply Black
       exec {
         workingDir = pythonProjectDir
-        commandLine(venvPython, "-m", "black", "mcp_server", "tests")
+        commandLine(venvExecutable("black"), "mcp_server", "tests")
       }
 
       logger.lifecycle("Python formatting applied (isort + Black)")
@@ -234,8 +242,10 @@ tasks {
     doLast {
       val isortExitCode = exec {
         workingDir = pythonProjectDir
-        commandLine(venvPython, "-m", "isort", "--check", "mcp_server", 
"tests")
-        isIgnoreExitValue = false
+        commandLine(venvExecutable("isort"), "--check", "mcp_server", "tests")
+        // Let the exit code reach the check below, so the failure is reported 
with the message
+        // that names the tool instead of a bare Gradle ExecException.
+        isIgnoreExitValue = true
       }.exitValue
 
       if (isortExitCode != 0) {
@@ -244,8 +254,10 @@ tasks {
 
       val blackExitCode = exec {
         workingDir = pythonProjectDir
-        commandLine(venvPython, "-m", "black", "--check", "mcp_server", 
"tests")
-        isIgnoreExitValue = false
+        commandLine(venvExecutable("black"), "--check", "mcp_server", "tests")
+        // Let the exit code reach the check below, so the failure is reported 
with the message
+        // that names the tool instead of a bare Gradle ExecException.
+        isIgnoreExitValue = true
       }.exitValue
 
       if (blackExitCode != 0) {

Reply via email to