code: def update_versions(new_py_version: str) -> None:
      """
      `new_py_version` is either a release version (e.g. "2.1.0") or a dev version
      (e.g. "2.1.0.dev0").
      """
      current_py_version = get_current_py_version()
      current_py_version_without_suffix = replace_dev_suffix_with(
          current_py_version, ""
      )
  
      # Python
      replace_occurrences(
          files=[Path("mlflow", "version.py")],
          pattern=re.escape(current_py_version),
          repl=new_py_version,
      )
      # JS
      replace_occurrences(
          files=[
              Path(
                  "mlflow",
                  "server",
                  "js",
                  "src",
                  "common",
                  "constants.tsx",
              )
          ],
          pattern=re.escape(current_py_version),
          repl=new_py_version,
      )
  
      # Java
      for java_extension in ["xml", "java"]:
          replace_occurrences(
              files=Path("mlflow", "java").rglob(f"*.{java_extension}"),
              pattern=rf"{re.escape(current_py_version_without_suffix)}(-SNAPSHOT)?",
              repl=replace_dev_suffix_with(new_py_version, "-SNAPSHOT"),
          )
  
      # R
      replace_occurrences(
          files=[Path("mlflow", "R", "mlflow", "DESCRIPTION")],
          pattern=f"Version: {re.escape(current_py_version_without_suffix)}",
          repl=f"Version: {replace_dev_suffix_with(new_py_version, '')}",
      )
  
file_path: mlflow/dev/update_mlflow_versions.py
imports: import re
  from pathlib import Path
  from typing import List
  import click
  from packaging.version import Version
label_desc: Use image node_id 4 for calling a global function with example usage: update_versions(new_py_version) without return types