From 3d5618071fb52c37779fb6d9951f321ba7b741a4 Mon Sep 17 00:00:00 2001 From: Jonas Scharpf Date: Wed, 23 Oct 2024 09:36:37 +0200 Subject: [PATCH] Support rc_aware version CMKVersion of testlib - ignore rc for debian package file names - add is_release_candidate function in CMKVersion - add "version_without_rc" and "version_rc_aware" property in Version CMK-19234 Change-Id: I7fd4cd0c172bb1e409ac1bd4f7998beab3e22278 --- cmk/gui/utils/agent.py | 11 +++++++++-- cmk/utils/version.py | 8 ++++++++ tests/testlib/containers.py | 13 ++++--------- tests/testlib/docker.py | 2 +- tests/testlib/version.py | 13 +++++++------ 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/cmk/gui/utils/agent.py b/cmk/gui/utils/agent.py index 400aac42a54..9614ceb5554 100644 --- a/cmk/gui/utils/agent.py +++ b/cmk/gui/utils/agent.py @@ -7,6 +7,7 @@ import cmk.utils.paths from cmk.utils.version import __version__ as cmk_version +from cmk.utils.version import Version def packed_agent_path_windows_msi() -> Path: @@ -14,8 +15,14 @@ def packed_agent_path_windows_msi() -> Path: def packed_agent_path_linux_deb() -> Path: - return Path(cmk.utils.paths.agents_dir) / f"check-mk-agent_{cmk_version}-1_all.deb" + return ( + Path(cmk.utils.paths.agents_dir) + / f"check-mk-agent_{Version.from_str(cmk_version).version_without_rc}-1_all.deb" + ) def packed_agent_path_linux_rpm() -> Path: - return Path(cmk.utils.paths.agents_dir) / f"check-mk-agent-{cmk_version}-1.noarch.rpm" + return ( + Path(cmk.utils.paths.agents_dir) + / f"check-mk-agent-{Version.from_str(cmk_version).version_without_rc}-1.noarch.rpm" + ) diff --git a/cmk/utils/version.py b/cmk/utils/version.py index ab7ec9f63b2..c4f5f68ffe9 100644 --- a/cmk/utils/version.py +++ b/cmk/utils/version.py @@ -269,6 +269,14 @@ def __init__( def version_base(self) -> str: return "" if self.base is None else str(self.base) + @property + def version_without_rc(self) -> str: + return f"{'' if self.base is None else self.base}{self.release.suffix()}".lstrip("-") + + @property + def version_rc_aware(self) -> str: + return str(self) + def __repr__(self) -> str: return f"{self.__class__.__name__}({self.base!r}, {self.release!r}, {self.release_candidate!r})" diff --git a/tests/testlib/containers.py b/tests/testlib/containers.py index 83615072b12..d17fd941439 100644 --- a/tests/testlib/containers.py +++ b/tests/testlib/containers.py @@ -31,7 +31,6 @@ # Make the tests.testlib available sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))) -from cmk.utils.version import Version _DOCKER_REGISTRY = "artifacts.lan.tribe29.com:4000" _DOCKER_REGISTRY_URL = "https://%s/v2/" % _DOCKER_REGISTRY @@ -284,9 +283,7 @@ def _create_cmk_image( # This installs the requested Checkmk Edition+Version into the new image, for this reason we add # these parts to the target image name. The tag is equal to the origin image. - image_name_with_tag = ( - f"{_DOCKER_REGISTRY}/{distro_name}-{version.edition.short}-{version.version}:{docker_tag}" - ) + image_name_with_tag = f"{_DOCKER_REGISTRY}/{distro_name}-{version.edition.short}-{version.version_rc_aware}:{docker_tag}" if use_local_package := check_for_local_package(version, distro_name): logger.info("+====================================================================+") logger.info("| Use locally available package (i.e. don't try to fetch test-image) |") @@ -321,6 +318,7 @@ def _create_cmk_image( "com.checkmk.base_image_hash": base_image.short_id, "com.checkmk.cmk_edition_short": version.edition.short, "com.checkmk.cmk_version": version.version, + "com.checkmk.cmk_version_rc_aware": version.version_rc_aware, "com.checkmk.cmk_branch": version.branch, # override the base image label "com.checkmk.image_type": "cmk-image", @@ -380,10 +378,7 @@ def _create_cmk_image( labeled_container.remove(v=True, force=True) logger.info("Commited image [%s] (%s)", image_name_with_tag, image.short_id) - if ( - not use_local_package - and Version.from_str(version.version).release_candidate.value is None - ): + if not use_local_package and not version.is_release_candidate(): try: logger.info( "Uploading [%s] to registry (%s)", @@ -452,7 +447,7 @@ def _is_using_current_cmk_package(image: Image, version: CMKVersion) -> bool: def get_current_cmk_hash_for_artifact(version: CMKVersion, package_name: str) -> str: hash_file_name = f"{package_name}.hash" r = requests.get( - f"https://tstbuilds-artifacts.lan.tribe29.com/{version.version}/{hash_file_name}", + f"https://tstbuilds-artifacts.lan.tribe29.com/{version.version_rc_aware}/{hash_file_name}", auth=get_cmk_download_credentials(), timeout=30, ) diff --git a/tests/testlib/docker.py b/tests/testlib/docker.py index 535c9713327..9020e21fa3b 100644 --- a/tests/testlib/docker.py +++ b/tests/testlib/docker.py @@ -65,7 +65,7 @@ def image_name(version: CMKVersion) -> str: def package_name(version: CMKVersion) -> str: - return f"check-mk-{version.edition.long}-{version.version.split('-rc')[0]}_0.{distro_codename}_amd64.deb" + return f"check-mk-{version.edition.long}-{version.version}_0.{distro_codename}_amd64.deb" def prepare_build() -> None: diff --git a/tests/testlib/version.py b/tests/testlib/version.py index 026b6993d2c..b02cdcb1e38 100644 --- a/tests/testlib/version.py +++ b/tests/testlib/version.py @@ -53,7 +53,8 @@ def __init__( branch_version: str = current_branch_version(), ) -> None: self.version_spec: Final = version_spec - self.version: Final = self._version(version_spec, branch, branch_version) + self.version_rc_aware: Final = self._version(version_spec, branch, branch_version) + self.version: Final = re.sub(r"-rc(\d+)", "", self.version_rc_aware) self.edition: Final = edition self.branch: Final = branch self.branch_version: Final = branch_version @@ -101,11 +102,14 @@ def is_cloud_edition(self) -> bool: def is_saas_edition(self) -> bool: return self.edition is Edition.CSE + def is_release_candidate(self) -> bool: + return self.version != self.version_rc_aware + def version_directory(self) -> str: return self.omd_version() def omd_version(self) -> str: - return f"{self.version.split('-rc')[0]}.{self.edition.short}" + return f"{self.version}.{self.edition.short}" def version_path(self) -> str: return "/omd/versions/%s" % self.version_directory() @@ -158,11 +162,8 @@ def _sanitize_version_spec(version: str) -> tuple[Version, time.struct_time | No """ _timestamp = None - # ignore release candidate - _version = re.sub(r"-rc(\d+)", "", version) - # treat `patch-version` as `micro-version`. - _version = _version.replace("0p", "") + _version = version.replace("0p", "") # detect daily builds if match := re.search(