From f9870bc9aefeb271927ffd5ad558b22e416793ef Mon Sep 17 00:00:00 2001 From: William FH <13333726+hinthornw@users.noreply.github.com> Date: Tue, 10 Feb 2026 15:11:24 -0800 Subject: [PATCH] chore: Drop support for bullseye builds (#6779) It's EOL for debian. --- libs/cli/langgraph_cli/__init__.py | 2 +- libs/cli/langgraph_cli/config.py | 7 +++++- libs/cli/langgraph_cli/schemas.py | 4 ++-- libs/cli/schemas/schema.json | 5 ++--- libs/cli/schemas/schema.v0.json | 5 ++--- libs/cli/tests/unit_tests/test_config.py | 27 +++++++++++++++++------- 6 files changed, 32 insertions(+), 18 deletions(-) diff --git a/libs/cli/langgraph_cli/__init__.py b/libs/cli/langgraph_cli/__init__.py index 9b084a609..4b2ce7df3 100644 --- a/libs/cli/langgraph_cli/__init__.py +++ b/libs/cli/langgraph_cli/__init__.py @@ -1 +1 @@ -__version__ = "0.4.12" +__version__ = "0.4.13" diff --git a/libs/cli/langgraph_cli/config.py b/libs/cli/langgraph_cli/config.py index 393f54f6d..c21402eea 100644 --- a/libs/cli/langgraph_cli/config.py +++ b/libs/cli/langgraph_cli/config.py @@ -210,10 +210,15 @@ def validate_config(config: Config) -> Config: # Validate image_distro config if image_distro := config.get("image_distro"): + if image_distro == "bullseye": + raise click.UsageError( + "Bullseye images were deprecated in version 0.4.13. " + "Please use 'bookworm' or 'debian' instead." + ) if image_distro not in Distros.__args__: raise click.UsageError( f"Invalid image_distro: '{image_distro}'. " - "Must be one of 'debian', 'bullseye', or 'bookworm'." + "Must be one of 'debian', 'wolfi', or 'bookworm'." ) if pip_installer := config.get("pip_installer"): diff --git a/libs/cli/langgraph_cli/schemas.py b/libs/cli/langgraph_cli/schemas.py index fb517becd..8b460e6ee 100644 --- a/libs/cli/langgraph_cli/schemas.py +++ b/libs/cli/langgraph_cli/schemas.py @@ -1,6 +1,6 @@ from typing import Any, Literal, TypedDict -Distros = Literal["debian", "wolfi", "bullseye", "bookworm"] +Distros = Literal["debian", "wolfi", "bookworm"] MiddlewareOrders = Literal["auth_first", "middleware_first"] @@ -559,7 +559,7 @@ class Config(TypedDict, total=False): image_distro: Distros | None """Optional. Linux distribution for the base image. - Must be one of 'wolfi', 'debian', 'bullseye', or 'bookworm'. + Must be one of 'wolfi', 'debian', or 'bookworm'. If omitted, defaults to 'debian' ('latest'). """ diff --git a/libs/cli/schemas/schema.json b/libs/cli/schemas/schema.json index e4f31bb4d..c9b774861 100644 --- a/libs/cli/schemas/schema.json +++ b/libs/cli/schemas/schema.json @@ -147,7 +147,6 @@ { "enum": [ "bookworm", - "bullseye", "debian", "wolfi" ] @@ -156,7 +155,7 @@ "type": "null" } ], - "description": "Optional. Linux distribution for the base image.\n\nMust be one of 'wolfi', 'debian', 'bullseye', or 'bookworm'.\nIf omitted, defaults to 'debian' ('latest').\n" + "description": "Optional. Linux distribution for the base image.\n\nMust be one of 'wolfi', 'debian', or 'bookworm'.\nIf omitted, defaults to 'debian' ('latest').\n" }, "keep_pkg_tools": { "anyOf": [ @@ -370,7 +369,7 @@ "type": "null" } ], - "description": "Optional. Linux distribution for the base image.\n\nMust be one of 'wolfi', 'debian', 'bullseye', or 'bookworm'.\nIf omitted, defaults to 'debian' ('latest').\n" + "description": "Optional. Linux distribution for the base image.\n\nMust be one of 'wolfi', 'debian', or 'bookworm'.\nIf omitted, defaults to 'debian' ('latest').\n" }, "keep_pkg_tools": { "anyOf": [ diff --git a/libs/cli/schemas/schema.v0.json b/libs/cli/schemas/schema.v0.json index e4f31bb4d..c9b774861 100644 --- a/libs/cli/schemas/schema.v0.json +++ b/libs/cli/schemas/schema.v0.json @@ -147,7 +147,6 @@ { "enum": [ "bookworm", - "bullseye", "debian", "wolfi" ] @@ -156,7 +155,7 @@ "type": "null" } ], - "description": "Optional. Linux distribution for the base image.\n\nMust be one of 'wolfi', 'debian', 'bullseye', or 'bookworm'.\nIf omitted, defaults to 'debian' ('latest').\n" + "description": "Optional. Linux distribution for the base image.\n\nMust be one of 'wolfi', 'debian', or 'bookworm'.\nIf omitted, defaults to 'debian' ('latest').\n" }, "keep_pkg_tools": { "anyOf": [ @@ -370,7 +369,7 @@ "type": "null" } ], - "description": "Optional. Linux distribution for the base image.\n\nMust be one of 'wolfi', 'debian', 'bullseye', or 'bookworm'.\nIf omitted, defaults to 'debian' ('latest').\n" + "description": "Optional. Linux distribution for the base image.\n\nMust be one of 'wolfi', 'debian', or 'bookworm'.\nIf omitted, defaults to 'debian' ('latest').\n" }, "keep_pkg_tools": { "anyOf": [ diff --git a/libs/cli/tests/unit_tests/test_config.py b/libs/cli/tests/unit_tests/test_config.py index 566ba272f..eecc887ed 100644 --- a/libs/cli/tests/unit_tests/test_config.py +++ b/libs/cli/tests/unit_tests/test_config.py @@ -120,14 +120,14 @@ def test_validate_config(): validate_config({"python_version": "3.10"}) assert "Minimum required version" in str(exc_info.value) - config = validate_config( - { - "python_version": "3.11-bullseye", - "dependencies": ["."], - "graphs": {"agent": "./agent.py:graph"}, - } - ) - assert config["python_version"] == "3.11-bullseye" + with pytest.raises(click.UsageError, match="Bullseye images were deprecated"): + validate_config( + { + "python_version": "3.11-bullseye", + "dependencies": ["."], + "graphs": {"agent": "./agent.py:graph"}, + } + ) config = validate_config( { @@ -181,6 +181,17 @@ def test_validate_config_image_distro(): ) assert config["image_distro"] == "debian" + # Bullseye should raise deprecation error + with pytest.raises(click.UsageError, match="Bullseye images were deprecated"): + validate_config( + { + "python_version": "3.11", + "dependencies": ["."], + "graphs": {"agent": "./agent.py:graph"}, + "image_distro": "bullseye", + } + ) + # Invalid image_distro values should raise error with pytest.raises(click.UsageError) as exc_info: validate_config(