Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions airbyte/_registry_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ def parse_changelog_html( # noqa: PLR0914

def registry_entry_commit_date(entry: dict) -> str | None:
"""Return the YYYY-MM-DD date of a registry entry's git commit timestamp."""
commit_timestamp = entry.get("generated", {}).get("git", {}).get("commit_timestamp")
git_info = (entry.get("generated") or {}).get("git") or {}
commit_timestamp = git_info.get("commit_timestamp")
if isinstance(commit_timestamp, str):
date_match = re.match(r"(\d{4}-\d{2}-\d{2})", commit_timestamp)
if date_match:
Expand All @@ -110,7 +111,9 @@ def fetch_registry_version_date(connector_name: str, version: str) -> str | None
docker_repo = connector.get("dockerRepository", "")
if docker_repo == f"airbyte/{connector_name}":
if connector.get("dockerImageTag") == version:
current_version_date = registry_entry_commit_date(connector)
current_version_date = connector.get(
"releaseDate"
) or registry_entry_commit_date(connector)
if current_version_date:
return current_version_date

Expand Down
38 changes: 38 additions & 0 deletions tests/unit_tests/test_mcp_connector_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -715,6 +715,44 @@ def test_fetch_registry_version_date_uses_current_version_commit_timestamp() ->
assert fetch_registry_version_date("source-faker", "7.2.1") == "2026-07-10"


@pytest.mark.parametrize(
"generated",
[
pytest.param(None, id="null_generated"),
pytest.param({"git": None}, id="null_git"),
],
)
def test_registry_entry_commit_date_tolerates_null_generated_metadata(
generated: object,
) -> None:
"""JSON null `generated`/`generated.git` values are treated as missing."""
from airbyte._registry_utils import registry_entry_commit_date

assert registry_entry_commit_date({"generated": generated}) is None


def test_registry_entry_release_date_none_with_null_generated() -> None:
"""An entry with `generated=None` and no `releaseDate` converts without raising."""
from airbyte.registry import _registry_entry_to_connector_metadata

metadata = _registry_entry_to_connector_metadata(_registry_entry(generated=None))

assert metadata.release_date is None


def test_fetch_registry_version_date_prefers_release_date_for_current_version() -> None:
"""An explicit `releaseDate` wins over the current version's commit timestamp."""
from airbyte._registry_utils import fetch_registry_version_date

entry = _registry_entry(
releaseDate="2026-07-12",
generated={"git": {"commit_timestamp": "2026-07-10T14:26:59Z"}},
)
with patch("airbyte._registry_utils.requests.get") as mock_get:
mock_get.return_value = _mock_registry_response(entry)
assert fetch_registry_version_date("source-faker", "7.2.1") == "2026-07-12"


def test_fetch_registry_version_date_reads_release_candidates() -> None:
"""Non-current versions still resolve through `releases.releaseCandidates`."""
from airbyte._registry_utils import fetch_registry_version_date
Expand Down
Loading