mirror of
				https://github.com/datahub-project/datahub.git
				synced 2025-11-03 20:27:50 +00:00 
			
		
		
		
	fix(cli): skip version warning message for servers (#14470)
This commit is contained in:
		
							parent
							
								
									c0b32ced34
								
							
						
					
					
						commit
						952807eb13
					
				@ -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
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user