From 25efee4ba3de897bd91019d18ad9de72da00b4cd Mon Sep 17 00:00:00 2001 From: John Mulligan Date: Fri, 17 Oct 2025 20:05:09 -0400 Subject: [PATCH] script/build-with-container: add more detailed variants Create two new variants 'packages.minimal' or 'packages.crimson'. The first disables test deps (make check) and crimson deps. The second only disables test deps and explicitly enables crimson deps. The existing 'packages' variant now tries to determine if it should switch to 'packages.minimal' or 'packages.crimson' by checking for the same env vars install-deps.sh was (WITH_CRIMSON). Signed-off-by: John Mulligan --- src/script/build-with-container.py | 54 +++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/src/script/build-with-container.py b/src/script/build-with-container.py index fd233596ddc..4c8d47a832f 100755 --- a/src/script/build-with-container.py +++ b/src/script/build-with-container.py @@ -371,7 +371,13 @@ class ImageSource(StrEnum): class ImageVariant(StrEnum): DEFAULT = 'default' # build everything + make check - PACKAGES = 'packages' # test deps. ignored, only for packages + # test dependencies will not be instaled, other parameters + # are automatically pulled from the environment (etc) + PACKAGES_AUTO = 'packages' + # test dependencies will not be installed nor crimson deps + PACKAGES_MINIMAL = 'packages.minimal' + # test dependencies skipped but crimson deps are included + PACKAGES_AND_CRIMSON = 'packages.crimson' class Context: @@ -404,6 +410,39 @@ class Context: base = self.cli.image_repo or "ceph-build" return f"{base}:{self.target_tag()}" + def packages_build(self): + """Return true if only packages will be build (not make check).""" + return self.cli.image_variant in { + ImageVariant.PACKAGES_AUTO, + ImageVariant.PACKAGES_MINIMAL, + ImageVariant.PACKAGES_AND_CRIMSON, + } + + def variant(self): + """Return calculated variant. Checks env vars to select between + packages with or without crimson. + """ + with_crimson = os.environ.get('WITH_CRIMSON') + if ( + self.cli.image_variant is ImageVariant.PACKAGES_AUTO + and with_crimson + ): + return ImageVariant.PACKAGES_AND_CRIMSON + elif self.cli.image_variant is ImageVariant.PACKAGES_AUTO: + return ImageVariant.PACKAGES_MINIMAL + return self.cli.image_variant + + def crimson_build(self): + """Detects if crimson deps should be installed in the build image. + Returns True/False if build flag is known or None for default. + """ + if self.variant() is ImageVariant.PACKAGES_AND_CRIMSON: + return True + if self.variant() is ImageVariant.DEFAULT: + with_crimson = os.environ.get('WITH_CRIMSON') + return None if with_crimson is None else bool(with_crimson) + return False + def target_tag(self): suffix = "" if self.cli.tag and self.cli.tag.startswith("+"): @@ -416,8 +455,9 @@ class Context: branch = _git_current_branch(self).replace("/", "-") except subprocess.CalledProcessError: branch = "UNKNOWN" - if self.cli.image_variant is not ImageVariant.DEFAULT: - suffix = f".{self.cli.image_variant}{suffix}" + variant = self.variant() + if variant is not ImageVariant.DEFAULT: + suffix = f".{variant}{suffix}" return f"{branch}.{self.cli.distro}{suffix}" def base_branch(self): @@ -609,6 +649,7 @@ def build_container(ctx): "-t", ctx.image_name, f"--label=io.ceph.build-with-container.src={_hash_sources()}", + f"--label=io.ceph.build-with-container.image-variant={ctx.variant()}", f"--build-arg=CEPH_BASE_BRANCH={ctx.base_branch()}", ] if ctx.cli.distro: @@ -623,8 +664,13 @@ def build_container(ctx): f"--volume={ctx.dnf_cache_dir}:/var/cache/dnf:Z", "--build-arg=CLEAN_DNF=no", ] - if ctx.cli.image_variant is ImageVariant.PACKAGES: + if ctx.packages_build(): cmd.append("--build-arg=FOR_MAKE_CHECK=false") + crimson_build = ctx.crimson_build() + if crimson_build is not None: + # the WITH_CRIMSON var is false only when empty (in install-deps) + with_crimson = '1' if crimson_build else '' + cmd.append(f"--build-arg=WITH_CRIMSON={with_crimson}") if ctx.cli.build_args: cmd.extend([f"--build-arg={v}" for v in ctx.cli.build_args]) cmd += ["-f", ctx.cli.containerfile, ctx.cli.containerdir] -- 2.39.5