fix(cli): skip version warning message for servers (#14470)

This commit is contained in:
Benjamin Maquet 2025-08-19 17:37:46 +02:00 committed by GitHub
parent c0b32ced34
commit 952807eb13
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 56 additions and 2 deletions

View File

@ -45,6 +45,7 @@ class ServerVersionStats(BaseModel):
latest: Optional[VersionStats] = None
current_server_type: Optional[str] = None
current_server_default_cli_version: Optional[VersionStats] = None
is_cloud_server: Optional[bool] = None
class ClientVersionStats(BaseModel):
@ -145,7 +146,9 @@ async def get_server_config(gms_url: str, token: Optional[str]) -> RestServiceCo
async def get_server_version_stats(
server: Optional[DataHubGraph] = None,
) -> Tuple[Optional[str], Optional[Version], Optional[str], Optional[datetime]]:
) -> Tuple[
Optional[str], Optional[Version], Optional[str], Optional[datetime], Optional[bool]
]:
import aiohttp
server_config: Optional[RestServiceConfig] = None
@ -167,11 +170,13 @@ async def get_server_version_stats(
server_version: Optional[Version] = None
current_server_default_cli_version = None
current_server_release_date = None
is_cloud_server: Optional[bool] = None
if server_config:
server_version_string = server_config.service_version
commit_hash = server_config.commit_hash
server_type = server_config.server_type
current_server_default_cli_version = server_config.default_cli_version
is_cloud_server = server_config.is_datahub_cloud
if server_type == "quickstart" and commit_hash:
async with aiohttp.ClientSession(
headers={"Accept": "application/vnd.github.v3+json"}
@ -191,6 +196,7 @@ async def get_server_version_stats(
server_version,
current_server_default_cli_version,
current_server_release_date,
is_cloud_server,
)
@ -236,6 +242,7 @@ async def _retrieve_version_stats(
current_server_version,
current_server_default_cli_version,
current_server_release_date,
is_cloud_server,
) = results[2]
server_version_stats = None
@ -255,6 +262,7 @@ async def _retrieve_version_stats(
else None
),
current_server_type=current_server_type,
is_cloud_server=is_cloud_server,
)
if client_version_stats and server_version_stats:
@ -353,7 +361,11 @@ def _maybe_print_upgrade_message(
else None
)
client_server_compat = 0
if version_stats.server.current_server_type != "cloud":
# Skip version compatibility checks for cloud servers (serverEnv="cloud")
# Cloud servers use different versioning schemes between server and CLI
is_cloud = version_stats.server.is_cloud_server
if not is_cloud:
client_server_compat = is_client_server_compatible(
version_stats.client.current, version_stats.server.current
)

View File

@ -1,4 +1,5 @@
from datetime import datetime, timedelta, timezone
from unittest.mock import patch
from packaging.version import Version
@ -7,6 +8,7 @@ from datahub.upgrade.upgrade import (
DataHubVersionStats,
ServerVersionStats,
VersionStats,
_maybe_print_upgrade_message,
_safe_version_stats,
get_days,
is_client_server_compatible,
@ -97,3 +99,43 @@ def test_is_server_default_cli_ahead():
# Invalid versions (prerelease)
assert not is_server_default_cli_ahead(make_version_stats("0.9.5rc1", "0.9.7"))
assert not is_server_default_cli_ahead(make_version_stats("0.9.5", "0.9.7rc1"))
@patch("datahub.upgrade.upgrade.click.echo")
def test_cloud_server_skips_version_warnings(mock_echo):
"""Test that cloud servers (serverEnv=cloud) skip version mismatch warnings."""
version_stats = DataHubVersionStats(
server=ServerVersionStats(
current=VersionStats(version=Version("0.3.13")),
current_server_type="prod", # serverType from config
is_cloud_server=True, # serverEnv="cloud" -> is_datahub_cloud=True
),
client=ClientVersionStats(current=VersionStats(version=Version("1.2.0.4"))),
)
# Should not show any version warnings for cloud servers
_maybe_print_upgrade_message(version_stats)
mock_echo.assert_not_called()
@patch("datahub.upgrade.upgrade.click.echo")
def test_non_cloud_server_shows_version_warnings(mock_echo):
"""Test that non-cloud servers show version mismatch warnings."""
version_stats = DataHubVersionStats(
server=ServerVersionStats(
current=VersionStats(version=Version("0.9.5")),
current_server_type="oss",
is_cloud_server=False,
),
client=ClientVersionStats(current=VersionStats(version=Version("0.9.7"))),
)
# Should show version warning for non-cloud servers with version mismatch
_maybe_print_upgrade_message(version_stats)
mock_echo.assert_called_once()
# Verify the warning message contains the expected text
call_args = mock_echo.call_args[0][0]
assert "❗Client-Server Incompatible❗" in call_args
assert "0.9.7" in call_args # Client version
assert "0.9.5" in call_args # Server version