Skip to content

Commit

Permalink
metadata-service[orchestrator]: ensure RC are always newer than curre…
Browse files Browse the repository at this point in the history
…nt version in the registry (#46735)
  • Loading branch information
alafanechere authored Oct 14, 2024
1 parent 953ed48 commit 085a72f
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@
import json
from typing import List, Union

import semver
import sentry_sdk
from dagster import AutoMaterializePolicy, MetadataValue, OpExecutionContext, Output, asset
from dagster import MetadataValue, OpExecutionContext, Output, asset
from dagster_gcp.gcs.file_manager import GCSFileHandle, GCSFileManager
from metadata_service.models.generated.ConnectorRegistryDestinationDefinition import ConnectorRegistryDestinationDefinition
from metadata_service.models.generated.ConnectorRegistrySourceDefinition import ConnectorRegistrySourceDefinition
from metadata_service.models.generated.ConnectorRegistryV0 import ConnectorRegistryV0
from metadata_service.models.transform import to_json_sanitized_dict
from orchestrator.assets.registry_entry import ConnectorTypePrimaryKey, ConnectorTypes, read_registry_entry_blob
from orchestrator.assets.registry_entry import ConnectorTypePrimaryKey, ConnectorTypes
from orchestrator.logging import sentry
from orchestrator.logging.publish_connector_lifecycle import PublishConnectorLifecycle, PublishConnectorLifecycleStage, StageStatus
from orchestrator.models.metadata import LatestMetadataEntry, MetadataDefinition
from orchestrator.utils.object_helpers import default_none_to_dict
from pydash.objects import set_with

Expand Down Expand Up @@ -89,12 +89,18 @@ def apply_release_candidates(
latest_registry_entry: dict,
release_candidate_registry_entry: PolymorphicRegistryEntry,
) -> dict:
updated_registry_entry = copy.deepcopy(latest_registry_entry)
updated_registry_entry.setdefault("releases", {})
updated_registry_entry["releases"]["releaseCandidates"] = {
release_candidate_registry_entry.dockerImageTag: to_json_sanitized_dict(release_candidate_registry_entry)
}
return updated_registry_entry
# Ensure that the release candidate is newer than the latest registry entry
if semver.Version.parse(release_candidate_registry_entry.dockerImageTag) > semver.Version.parse(
latest_registry_entry["dockerImageTag"]
):
updated_registry_entry = copy.deepcopy(latest_registry_entry)
updated_registry_entry.setdefault("releases", {})
updated_registry_entry["releases"]["releaseCandidates"] = {
release_candidate_registry_entry.dockerImageTag: to_json_sanitized_dict(release_candidate_registry_entry)
}
return updated_registry_entry
else:
return latest_registry_entry


def apply_release_candidate_entries(registry_entry_dict: dict, docker_repository_to_rc_registry_entry: dict) -> dict:
Expand Down
19 changes: 18 additions & 1 deletion airbyte-ci/connectors/metadata_service/orchestrator/poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "orchestrator"
version = "0.5.7"
version = "0.5.8"
description = ""
authors = ["Ben Church <[email protected]>"]
readme = "README.md"
Expand Down Expand Up @@ -36,6 +36,7 @@ pendulum = "<3.0.0"

[tool.poetry.group.dev.dependencies]
pytest = "^8"
pytest-mock = "^3.14.0"

[build-system]
requires = ["poetry-core"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
#

import copy
from unittest import mock
from uuid import UUID

Expand All @@ -11,6 +12,7 @@
from metadata_service.models.generated.ConnectorRegistryDestinationDefinition import ConnectorRegistryDestinationDefinition
from metadata_service.models.generated.ConnectorRegistrySourceDefinition import ConnectorRegistrySourceDefinition
from metadata_service.models.generated.ConnectorRegistryV0 import ConnectorRegistryV0
from orchestrator.assets import registry
from orchestrator.assets.registry_entry import (
get_connector_type_from_registry_entry,
get_registry_entry_write_path,
Expand Down Expand Up @@ -485,3 +487,56 @@ def test_language_from_tags_does_not_override_top_level_language():
mock_metadata_entry.dependency_file_url = "test-dependency-file-url"
result = metadata_to_registry_entry(mock_metadata_entry, "oss")
assert result["language"] == "python"


def test_apply_release_candidates_with_older_rc(mocker):
uuid = UUID(int=1)
latest_registry_entry = {
"name": "source-test",
"sourceDefinitionId": str(uuid),
"dockerRepository": "test-repo",
"documentationUrl": "https://test_documentation_url.com",
"spec": {},
"dockerImageTag": "1.1.0",
"releases": {},
}
rc_registry_entry = ConnectorRegistrySourceDefinition.parse_obj(
{
"name": "source-test",
"sourceDefinitionId": str(uuid),
"dockerRepository": "test-repo",
"documentationUrl": "https://test_documentation_url.com",
"spec": {},
"dockerImageTag": "1.1.0-rc.1",
"releases": {"isReleaseCandidate": True},
}
)

result = registry.apply_release_candidates(latest_registry_entry, rc_registry_entry)
assert not result["releases"]


def test_apply_release_candidates_newer_version(mocker):
uuid = UUID(int=1)
latest_registry_entry = {
"name": "source-test",
"sourceDefinitionId": str(uuid),
"dockerRepository": "test-repo",
"documentationUrl": "https://test_documentation_url.com",
"spec": {},
"dockerImageTag": "1.0.0",
"releases": {},
}
rc_registry_entry = ConnectorRegistrySourceDefinition.parse_obj(
{
"name": "source-test",
"sourceDefinitionId": str(uuid),
"dockerRepository": "test-repo",
"documentationUrl": "https://test_documentation_url.com",
"spec": {},
"dockerImageTag": "1.1.0-rc.1",
"releases": {"isReleaseCandidate": True},
}
)
result = registry.apply_release_candidates(latest_registry_entry, rc_registry_entry)
assert "1.1.0-rc.1" in result["releases"]["releaseCandidates"]

0 comments on commit 085a72f

Please sign in to comment.