Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-langgraph-cli for 
openSUSE:Factory checked in at 2026-10-17 21:26:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-langgraph-cli (Old)
 and      /work/SRC/openSUSE:Factory/.python-langgraph-cli.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-langgraph-cli"

Sat Oct 17 21:26:58 2026 rev:6 rq:1385354 version:0.4.36

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-langgraph-cli/python-langgraph-cli.changes    
    2026-10-15 12:25:41.844020444 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-langgraph-cli.new.3698736/python-langgraph-cli.changes
   2026-10-17 21:27:01.717951014 +0200
@@ -1,0 +2,7 @@
+Sat Oct 17 06:30:15 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 0.4.36:
+  * Deploy honors the active Docker context endpoint unless
+    DOCKER_HOST is set
+
+-------------------------------------------------------------------

Old:
----
  langgraph_cli-0.4.35.tar.gz

New:
----
  langgraph_cli-0.4.36.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-langgraph-cli.spec ++++++
--- /var/tmp/diff_new_pack.upgPoa/_old  2026-10-17 21:27:02.410979929 +0200
+++ /var/tmp/diff_new_pack.upgPoa/_new  2026-10-17 21:27:02.412980012 +0200
@@ -23,7 +23,7 @@
 %endif
 %{?sle15_python_module_pythons}
 Name:           python-langgraph-cli
-Version:        0.4.35
+Version:        0.4.36
 Release:        0
 Summary:        CLI for interacting with the LangGraph API
 License:        MIT

++++++ langgraph_cli-0.4.35.tar.gz -> langgraph_cli-0.4.36.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_cli-0.4.35/PKG-INFO 
new/langgraph_cli-0.4.36/PKG-INFO
--- old/langgraph_cli-0.4.35/PKG-INFO   2020-02-02 01:00:00.000000000 +0100
+++ new/langgraph_cli-0.4.36/PKG-INFO   2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.5
 Name: langgraph-cli
-Version: 0.4.35
+Version: 0.4.36
 Summary: CLI for interacting with LangGraph API
 Project-URL: Source, 
https://github.com/langchain-ai/langgraph/tree/main/libs/cli
 Project-URL: Twitter, https://x.com/langchain_oss
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_cli-0.4.35/langgraph_cli/__init__.py 
new/langgraph_cli-0.4.36/langgraph_cli/__init__.py
--- old/langgraph_cli-0.4.35/langgraph_cli/__init__.py  2020-02-02 
01:00:00.000000000 +0100
+++ new/langgraph_cli-0.4.36/langgraph_cli/__init__.py  2020-02-02 
01:00:00.000000000 +0100
@@ -1 +1 @@
-__version__ = "0.4.35"
+__version__ = "0.4.36"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langgraph_cli-0.4.35/langgraph_cli/deploy.py 
new/langgraph_cli-0.4.36/langgraph_cli/deploy.py
--- old/langgraph_cli-0.4.35/langgraph_cli/deploy.py    2020-02-02 
01:00:00.000000000 +0100
+++ new/langgraph_cli-0.4.36/langgraph_cli/deploy.py    2020-02-02 
01:00:00.000000000 +0100
@@ -1209,6 +1209,33 @@
         return cls(("docker", "buildx", "build"), flags)
 
 
+def _active_docker_host(runner: CommandRunner) -> str | None:
+    """Return the daemon endpoint of the user's active Docker context.
+
+    None when `DOCKER_HOST` is set, which Docker honors with any config
+    directory. Also None when the lookup fails (for example, `DOCKER_CONTEXT`
+    names a context that doesn't exist) or the context has no Docker endpoint
+    (Docker prints `<no value>`); that keeps Docker's own default in place.
+    """
+    if os.environ.get("DOCKER_HOST"):
+        return None
+    try:
+        stdout, _ = runner.run(
+            subp_exec(
+                "docker",
+                "context",
+                "inspect",
+                "--format",
+                "{{.Endpoints.docker.Host}}",
+                collect=True,
+            )
+        )
+    except (click.exceptions.Exit, OSError):
+        return None
+    host = (stdout or "").strip()
+    return host if "://" in host else None
+
+
 def _docker_argv(docker_config_dir: str | None) -> tuple[str, ...]:
     if docker_config_dir is None:
         return ("docker",)
@@ -1242,17 +1269,13 @@
     runner: CommandRunner,
     image: str,
     *,
-    docker_config_dir: str | None,
+    docker: tuple[str, ...],
     verbose: bool,
 ) -> None:
     for attempt in range(1, _PUSH_ATTEMPTS + 1):
         try:
             with Progress(message="Pushing...", elapsed=not verbose):
-                runner.run(
-                    subp_exec(
-                        *_docker_argv(docker_config_dir), "push", image, 
verbose=verbose
-                    )
-                )
+                runner.run(subp_exec(*docker, "push", image, verbose=verbose))
             return
         except click.exceptions.Exit:
             if attempt == _PUSH_ATTEMPTS:
@@ -1337,6 +1360,11 @@
         registry_host = repository.split("/")[0]
 
         with _docker_config_for_token(registry_host, deployment_token, 
username) as cfg:
+            # A config directory has no current context, so Docker would fall
+            # back to /var/run/docker.sock; keep using the daemon the build 
used.
+            docker_host = _active_docker_host(runner)
+            host_args = ("--host", docker_host) if docker_host else ()
+            docker = (*_docker_argv(cfg), *host_args)
             _log_deploy_step(step, f"Logging into {registry_host}")
             token_input = (
                 deployment_token
@@ -1345,7 +1373,7 @@
             )
             runner.run(
                 subp_exec(
-                    *_docker_argv(cfg),
+                    *docker,
                     "login",
                     "-u",
                     username,
@@ -1361,7 +1389,7 @@
             runner.run(
                 subp_exec("docker", "tag", image_to_push, remote_image, 
verbose=verbose)
             )
-            _push_image(runner, remote_image, docker_config_dir=cfg, 
verbose=verbose)
+            _push_image(runner, remote_image, docker=docker, verbose=verbose)
         step += 1
 
         resolved_image = _resolve_pushed_image_digest(
@@ -1826,7 +1854,7 @@
                 _build_image(runner, ctx.spec, image, verbose=ctx.verbose)
             step += 1
             _log_deploy_step(step, f"Pushing image {image}")
-            _push_image(runner, image, docker_config_dir=None, 
verbose=ctx.verbose)
+            _push_image(runner, image, docker=_docker_argv(None), 
verbose=ctx.verbose)
             step += 1
             digest = _resolve_pushed_image_digest(
                 runner, remote_image=image, docker_config_dir=None, 
verbose=ctx.verbose
@@ -2185,11 +2213,13 @@
             ),
             click.option(
                 "--deployment-type",
-                type=click.Choice(["dev", "prod"]),
+                type=click.Choice(["serverless", "dedicated", "dev", "prod"]),
                 default="dev",
                 show_default=True,
                 help=(
-                    "Deployment type (used when creating a new deployment). "
+                    "Deployment type (used when creating a new deployment): "
+                    "serverless (scale to zero) or dedicated (prod); "
+                    "legacy dev and prod are also accepted. "
                     "Ignored with --push-to."
                 ),
             ),
@@ -2480,7 +2510,9 @@
             ),
             verbose=verbose,
             selector=selector,
-            deployment_type=deployment_type,
+            deployment_type={"serverless": "dev_zero", "dedicated": 
"prod"}.get(
+                deployment_type, deployment_type
+            ),
             secrets=secrets,
             tracked_packages=tracked_packages,
         )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/langgraph_cli-0.4.35/tests/unit_tests/cli/test_deploy_command.py 
new/langgraph_cli-0.4.36/tests/unit_tests/cli/test_deploy_command.py
--- old/langgraph_cli-0.4.35/tests/unit_tests/cli/test_deploy_command.py        
2020-02-02 01:00:00.000000000 +0100
+++ new/langgraph_cli-0.4.36/tests/unit_tests/cli/test_deploy_command.py        
2020-02-02 01:00:00.000000000 +0100
@@ -52,6 +52,8 @@
 OBJECT_PATH = "tarballs/src.tgz"
 PLATFORM_FORMAT = "{{.Os}}/{{.Architecture}}"
 DIGESTS_FORMAT = "{{json .RepoDigests}}"
+CONTEXT_HOST_FORMAT = "{{.Endpoints.docker.Host}}"
+CONTEXT_HOST = "unix:///Users/dev/.docker/run/docker.sock"
 NOT_A_CLI_DEPLOYMENT = (
     "push token is only available for 'internal_docker' source deployments"
 )
@@ -192,6 +194,8 @@
 class DockerDouble:
     timeline: list[str]
     failing_pushes: int = 0
+    context_lookup_fails: bool = False
+    context_host: str = CONTEXT_HOST
     builds: list[dict] = field(default_factory=list)
     commands: list[DockerCommand] = field(default_factory=list)
 
@@ -235,6 +239,10 @@
         if "push" in args and self.failing_pushes > 0:
             self.failing_pushes -= 1
             raise click.exceptions.Exit(1)
+        if CONTEXT_HOST_FORMAT in args:
+            if self.context_lookup_fails:
+                raise click.exceptions.Exit(1)
+            return f"{self.context_host}\n", None
         if PLATFORM_FORMAT in args:
             return "linux/amd64\n", None
         if DIGESTS_FORMAT in args:
@@ -244,6 +252,8 @@
 
     @staticmethod
     def _verb(args: tuple[str, ...]) -> str:
+        if CONTEXT_HOST_FORMAT in args:
+            return "inspect-context"
         if PLATFORM_FORMAT in args:
             return "inspect-platform"
         if DIGESTS_FORMAT in args:
@@ -292,7 +302,12 @@
         json.dumps({"graphs": {"agent": "agent.py:graph"}, "dependencies": 
["."]})
     )
     monkeypatch.chdir(tmp_path)
-    for name in ("LANGSMITH_TENANT_ID", "LANGSMITH_ENDPOINT", 
"LANGGRAPH_HOST_URL"):
+    for name in (
+        "LANGSMITH_TENANT_ID",
+        "LANGSMITH_ENDPOINT",
+        "LANGGRAPH_HOST_URL",
+        "DOCKER_HOST",
+    ):
         monkeypatch.delenv(name, raising=False)
 
     timeline: list[str] = []
@@ -340,6 +355,7 @@
         CREATE_DEPLOYMENT,
         "docker build",
         _push_token(CREATED_ID),
+        "docker inspect-context",
         "docker login",
         "docker tag",
         "docker push",
@@ -349,6 +365,27 @@
     assert "Deployment updated" in result.output
 
 
[email protected](
+    ("deployment_type", "wire_type"),
+    [
+        ("serverless", "dev_zero"),
+        ("dedicated", "prod"),
+        ("dev", "dev"),
+        ("prod", "prod"),
+    ],
+)
[email protected]("build_mode", ["--no-remote", "--remote"])
+def test_deployment_type_aliases(
+    deploy_project: DeployProject, deployment_type: str, wire_type: str, 
build_mode: str
+) -> None:
+    result = deploy_project.run(build_mode, "--deployment-type", 
deployment_type)
+
+    assert result.exit_code == 0, result.output
+    assert 
deploy_project.control_plane.bodies[CREATE_DEPLOYMENT]["source_config"] == {
+        "deployment_type": wire_type
+    }
+
+
 def test_first_local_deploy_creates_an_internal_docker_deployment(
     deploy_project: DeployProject,
 ) -> None:
@@ -406,7 +443,7 @@
 
     login = deploy_project.docker.command("login")
     assert login.args[:2] == ("docker", "--config")
-    assert login.args[3:] == (
+    assert login.args[-5:] == (
         "login",
         "-u",
         "oauth2accesstoken",
@@ -416,6 +453,53 @@
     assert login.kwargs["input"] == f"{PUSH_TOKEN}\n"
 
 
+def test_local_deploy_logs_in_and_pushes_through_the_active_docker_context(
+    deploy_project: DeployProject,
+) -> None:
+    """The temporary config has no current context, so without the active
+    context's endpoint Docker would push through /var/run/docker.sock."""
+    result = deploy_project.run("--no-remote")
+
+    assert result.exit_code == 0, result.output
+    for verb in ("login", "push"):
+        args = deploy_project.docker.command(verb).args
+        assert args[3:5] == ("--host", CONTEXT_HOST), verb
+
+
+def test_local_deploy_leaves_an_explicit_docker_host_to_docker(
+    deploy_project: DeployProject, monkeypatch: pytest.MonkeyPatch
+) -> None:
+    monkeypatch.setenv("DOCKER_HOST", "tcp://127.0.0.1:2375")
+
+    result = deploy_project.run("--no-remote")
+
+    assert result.exit_code == 0, result.output
+    for verb in ("login", "push"):
+        assert "--host" not in deploy_project.docker.command(verb).args, verb
+
+
+def test_local_deploy_keeps_dockers_default_when_the_context_lookup_fails(
+    deploy_project: DeployProject,
+) -> None:
+    deploy_project.docker.context_lookup_fails = True
+
+    result = deploy_project.run("--no-remote")
+
+    assert result.exit_code == 0, result.output
+    assert "--host" not in deploy_project.docker.command("push").args
+
+
+def test_local_deploy_ignores_a_context_without_a_docker_endpoint(
+    deploy_project: DeployProject,
+) -> None:
+    deploy_project.docker.context_host = "<no value>"
+
+    result = deploy_project.run("--no-remote")
+
+    assert result.exit_code == 0, result.output
+    assert "--host" not in deploy_project.docker.command("push").args
+
+
 def test_local_deploy_tells_the_control_plane_it_honors_registry_usernames(
     deploy_project: DeployProject,
 ) -> None:
@@ -438,7 +522,7 @@
     deploy_project.run("--no-remote")
 
     login = deploy_project.docker.command("login")
-    assert login.args[3:] == (
+    assert login.args[-5:] == (
         "login",
         "-u",
         "AWS",
@@ -506,6 +590,7 @@
     assert deploy_project.docker.builds == []
     assert deploy_project.docker.verbs() == [
         "docker inspect-platform",
+        "docker inspect-context",
         "docker login",
         "docker tag",
         "docker push",

Reply via email to