From fa669ea4db6274674d4bc60cc3bc1ccea515b968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Kara=C5=9B?= Date: Mon, 13 Oct 2025 14:31:15 +0200 Subject: [PATCH] CLOUDP-295785 - ass skip_if_exists flag to all releasable images --- build_info.json | 8 ++++++++ scripts/release/argparse_utils.py | 12 ++++++++++++ scripts/release/check_changelog.py | 13 +------------ scripts/release/pipeline.py | 21 +++++++++++++++------ scripts/release/tests/build_info_test.py | 8 ++++++++ 5 files changed, 44 insertions(+), 18 deletions(-) create mode 100644 scripts/release/argparse_utils.py diff --git a/build_info.json b/build_info.json index 3cabb12fe..025eaa79b 100644 --- a/build_info.json +++ b/build_info.json @@ -21,6 +21,7 @@ "release": { "sign": true, "olm-tag": true, + "skip-if-exists": true, "repositories": ["quay.io/mongodb/mongodb-kubernetes"], "platforms": [ "linux/arm64", @@ -68,6 +69,7 @@ "release": { "sign": true, "olm-tag": true, + "skip-if-exists": true, "repositories": ["quay.io/mongodb/mongodb-kubernetes-init-database"], "platforms": [ "linux/arm64", @@ -99,6 +101,7 @@ "release": { "sign": true, "olm-tag": true, + "skip-if-exists": true, "repositories": ["quay.io/mongodb/mongodb-kubernetes-init-appdb"], "platforms": [ "linux/arm64", @@ -127,6 +130,7 @@ "release": { "sign": true, "olm-tag": true, + "skip-if-exists": true, "repositories": ["quay.io/mongodb/mongodb-kubernetes-init-ops-manager"], "platforms": [ "linux/amd64" @@ -155,6 +159,7 @@ "release": { "sign": true, "olm-tag": true, + "skip-if-exists": true, "repositories": ["quay.io/mongodb/mongodb-kubernetes-database"], "platforms": [ "linux/arm64", @@ -180,6 +185,7 @@ ] }, "release": { + "skip-if-exists": true, "repositories": ["quay.io/mongodb/mongodb-kubernetes-tests"], "platforms": [ "linux/amd64" @@ -280,6 +286,7 @@ "manual_release": { "sign": true, "olm-tag": true, + "skip-if-exists": true, "repositories": ["quay.io/mongodb/mongodb-agent-ubi", "quay.io/mongodb/mongodb-agent"], "platforms": [ "linux/arm64", @@ -307,6 +314,7 @@ "manual_release": { "sign": true, "olm-tag": true, + "skip-if-exists": true, "repositories": ["quay.io/mongodb/mongodb-enterprise-ops-manager-ubi"], "platforms": [ "linux/amd64" diff --git a/scripts/release/argparse_utils.py b/scripts/release/argparse_utils.py new file mode 100644 index 000000000..3d4ad4539 --- /dev/null +++ b/scripts/release/argparse_utils.py @@ -0,0 +1,12 @@ +import argparse + + +def str2bool(v): + if isinstance(v, bool): + return v + if v.lower() in ("yes", "true", "t", "y", "1"): + return True + elif v.lower() in ("no", "false", "f", "n", "0"): + return False + else: + raise argparse.ArgumentTypeError("Boolean value expected.") diff --git a/scripts/release/check_changelog.py b/scripts/release/check_changelog.py index 277d16d5b..27680128b 100644 --- a/scripts/release/check_changelog.py +++ b/scripts/release/check_changelog.py @@ -3,21 +3,10 @@ from git import Repo +from scripts.release.argparse_utils import str2bool from scripts.release.changelog import get_changelog_entries from scripts.release.constants import DEFAULT_CHANGELOG_PATH, DEFAULT_REPOSITORY_PATH - -def str2bool(v): - if isinstance(v, bool): - return v - if v.lower() in ("yes", "true", "t", "y", "1"): - return True - elif v.lower() in ("no", "false", "f", "n", "0"): - return False - else: - raise argparse.ArgumentTypeError("Boolean value expected.") - - if __name__ == "__main__": parser = argparse.ArgumentParser( description="Check if there are changelog entries", diff --git a/scripts/release/pipeline.py b/scripts/release/pipeline.py index 55c107953..2bdd2fb57 100644 --- a/scripts/release/pipeline.py +++ b/scripts/release/pipeline.py @@ -16,6 +16,7 @@ from opentelemetry.trace import NonRecordingSpan, SpanContext, TraceFlags from lib.base_logger import logger +from scripts.release.argparse_utils import str2bool from scripts.release.atomic_pipeline import ( build_agent, build_database_image, @@ -100,15 +101,16 @@ def image_build_config_from_args(args) -> ImageBuildConfiguration: build_scenario = get_scenario_from_arg(args.build_scenario) build_info = load_build_info(build_scenario) - logger.info(f"image is {image}") - logger.info(f"images are {build_info.images}") + logger.debug(f"image is {image}") + logger.debug(f"images are {build_info.images}") image_build_info = build_info.images.get(image) - logger.info(f"image_build_info is {image_build_info}") + logger.debug(f"image_build_info is {image_build_info}") if not image_build_info: raise ValueError(f"Image '{image}' is not defined in the build info for scenario '{build_scenario}'") # Resolve final values with overrides version = args.version + dockerfile_path = image_build_info.dockerfile_path latest_tag = image_build_info.latest_tag olm_tag = image_build_info.olm_tag if args.registry: @@ -116,9 +118,8 @@ def image_build_config_from_args(args) -> ImageBuildConfiguration: else: registries = image_build_info.repositories platforms = get_platforms_from_arg(args.platform) or image_build_info.platforms - sign = args.sign or image_build_info.sign - dockerfile_path = image_build_info.dockerfile_path - skip_if_exists = image_build_info.skip_if_exists + sign = args.sign if args.sign is not None else image_build_info.sign + skip_if_exists = args.skip_if_exists if args.skip_if_exists is not None else image_build_info.skip_if_exists # Validate version - only agent can have None version as the versions are managed by the agent # which are externally retrieved from release.json @@ -250,6 +251,14 @@ def main(): action="store_true", help="If set force image signing. Default is to infer from build scenario.", ) + parser.add_argument( + "--skip-if-exists", + metavar="", + action="store", + type=str2bool, + nargs="?", + help="Override skip_if_exists behavior instead of resolving from build scenario", + ) # For agent builds parser.add_argument( "--parallel", diff --git a/scripts/release/tests/build_info_test.py b/scripts/release/tests/build_info_test.py index f46039b7e..7e34ca983 100644 --- a/scripts/release/tests/build_info_test.py +++ b/scripts/release/tests/build_info_test.py @@ -290,6 +290,7 @@ def test_load_build_info_release(): repositories=["quay.io/mongodb/mongodb-kubernetes"], platforms=["linux/arm64", "linux/amd64", "linux/s390x", "linux/ppc64le"], dockerfile_path="docker/mongodb-kubernetes-operator/Dockerfile", + skip_if_exists=True, olm_tag=True, sign=True, ), @@ -297,6 +298,7 @@ def test_load_build_info_release(): repositories=["quay.io/mongodb/mongodb-kubernetes-init-database"], platforms=["linux/arm64", "linux/amd64", "linux/s390x", "linux/ppc64le"], dockerfile_path="docker/mongodb-kubernetes-init-database/Dockerfile", + skip_if_exists=True, olm_tag=True, sign=True, ), @@ -304,6 +306,7 @@ def test_load_build_info_release(): repositories=["quay.io/mongodb/mongodb-kubernetes-init-appdb"], platforms=["linux/arm64", "linux/amd64", "linux/s390x", "linux/ppc64le"], dockerfile_path="docker/mongodb-kubernetes-init-appdb/Dockerfile", + skip_if_exists=True, olm_tag=True, sign=True, ), @@ -311,6 +314,7 @@ def test_load_build_info_release(): repositories=["quay.io/mongodb/mongodb-kubernetes-init-ops-manager"], platforms=["linux/amd64"], dockerfile_path="docker/mongodb-kubernetes-init-ops-manager/Dockerfile", + skip_if_exists=True, olm_tag=True, sign=True, ), @@ -318,6 +322,7 @@ def test_load_build_info_release(): repositories=["quay.io/mongodb/mongodb-kubernetes-database"], platforms=["linux/arm64", "linux/amd64", "linux/s390x", "linux/ppc64le"], dockerfile_path="docker/mongodb-kubernetes-database/Dockerfile", + skip_if_exists=True, olm_tag=True, sign=True, ), @@ -325,6 +330,7 @@ def test_load_build_info_release(): repositories=["quay.io/mongodb/mongodb-kubernetes-tests"], platforms=["linux/amd64"], dockerfile_path="docker/mongodb-kubernetes-tests/Dockerfile", + skip_if_exists=True, ), "readiness-probe": ImageInfo( repositories=["quay.io/mongodb/mongodb-kubernetes-readinessprobe"], @@ -370,6 +376,7 @@ def test_load_build_info_manual_release(): repositories=["quay.io/mongodb/mongodb-agent-ubi", "quay.io/mongodb/mongodb-agent"], platforms=["linux/arm64", "linux/amd64", "linux/s390x", "linux/ppc64le"], dockerfile_path="docker/mongodb-agent/Dockerfile", + skip_if_exists=True, olm_tag=True, sign=True, ), @@ -377,6 +384,7 @@ def test_load_build_info_manual_release(): repositories=["quay.io/mongodb/mongodb-enterprise-ops-manager-ubi"], platforms=["linux/amd64"], dockerfile_path="docker/mongodb-enterprise-ops-manager/Dockerfile", + skip_if_exists=True, olm_tag=True, sign=True, ),