diff --git a/src/bci_build/containercrate.py b/src/bci_build/containercrate.py deleted file mode 100644 index 6cd7046c9..000000000 --- a/src/bci_build/containercrate.py +++ /dev/null @@ -1,46 +0,0 @@ -"""Crate to handle multibuild containers in the generator.""" - - -class ContainerCrate: - """ContainerCrate is combining multiple container build flavors. - - This provides package-central functions like generating _service and - _multibuild files. - """ - - def __init__(self, containers: list): - """Assign the crate for every container.""" - self._all_build_flavors: dict[tuple, set] = {} - for container in containers: - if container.build_flavor: - self._all_build_flavors.setdefault( - (container.os_version, container.package_name), set() - ).add(container.build_flavor) - - for container in containers: - if container.crate is not None: - raise ValueError("Container is already part of a ContainerCrate") - container.crate = self - - def all_build_flavors(self, container) -> list[str]: - """Return all build flavors for this container in the crate""" - return sorted( - self._all_build_flavors.get( - (container.os_version, container.package_name), [""] - ) - ) - - def default_dockerfile(self) -> str: - """Return a default Dockerfile to disable build on default flavor.""" - return """#!ExclusiveArch: do-not-build - -# For this container we only build the Dockerfile.$flavor builds. -""" - - def multibuild(self, container) -> str: - """Return the _multibuild file string to write for this ContainerCrate.""" - flavors: str = "\n".join( - " " * 4 + f"{pkg}" - for pkg in self.all_build_flavors(container) - ) - return f"\n{flavors}\n" diff --git a/src/bci_build/package/__init__.py b/src/bci_build/package/__init__.py index 88d045920..8387f51e4 100644 --- a/src/bci_build/package/__init__.py +++ b/src/bci_build/package/__init__.py @@ -22,7 +22,6 @@ from bci_build.container_attributes import PackageType from bci_build.container_attributes import ReleaseStage from bci_build.container_attributes import SupportLevel -from bci_build.containercrate import ContainerCrate from bci_build.os_version import ALL_OS_LTSS_VERSIONS from bci_build.os_version import RELEASED_OS_VERSIONS from bci_build.os_version import OsVersion @@ -202,9 +201,6 @@ class BaseContainerImage(ObsPackageBase): #: build flavors to produce for this container variant build_flavor: str | None = None - #: create that this container is part of - crate: ContainerCrate = None - #: Add any replacements via `obs-service-replace_using_package_version #: `_ #: that are used in this image into this list. @@ -1103,15 +1099,6 @@ async def write_file_to_dest(fname: str, contents: str | bytes) -> None: False ), f"got an unexpected build_recipe_type: '{self.build_recipe_type}'" - if self.build_flavor: - dfile = "Dockerfile" - tasks.append(write_file_to_dest(dfile, self.crate.default_dockerfile())) - files.append(dfile) - - mname = "_multibuild" - tasks.append(write_file_to_dest(mname, self.crate.multibuild(self))) - files.append(mname) - if with_service_file: tasks.append(self._write_service_file(dest)) diff --git a/src/bci_build/package/apache_tomcat.py b/src/bci_build/package/apache_tomcat.py index 4e5b41117..0dcea6844 100644 --- a/src/bci_build/package/apache_tomcat.py +++ b/src/bci_build/package/apache_tomcat.py @@ -3,7 +3,6 @@ import datetime from bci_build.container_attributes import PackageType -from bci_build.containercrate import ContainerCrate from bci_build.os_version import CAN_BE_LATEST_OS_VERSION from bci_build.os_version import OsVersion from bci_build.package import DOCKERFILE_RUN @@ -12,6 +11,7 @@ from bci_build.package import Package from bci_build.package import Replacement from bci_build.package import _build_tag_prefix +from bci_build.package.obs_package import ObsPackage from bci_build.registry import publish_registry # last version needs to be the newest @@ -50,14 +50,11 @@ def _get_sac_supported_until( ) -TOMCAT_CONTAINERS = [ - ApplicationStackContainer( +def _create_tomcat_container( + os_version: OsVersion, tomcat_ver: str, jre_version: int +) -> ApplicationStackContainer: + return ApplicationStackContainer( name="apache-tomcat", - package_name=( - f"apache-tomcat-{tomcat_ver.partition('.')[0]}-image" - if os_version.is_tumbleweed - else f"sac-apache-tomcat-{tomcat_ver.partition('.')[0]}-image" - ), _publish_registry=publish_registry(os_version, app_collection=True), pretty_name="Apache Tomcat", custom_description=( @@ -126,15 +123,29 @@ def _get_sac_supported_until( entrypoint_user="tomcat", logo_url="https://tomcat.apache.org/res/images/tomcat.png", ) - for tomcat_ver, os_version, jre_version in ( - ("10.1", OsVersion.TUMBLEWEED, 22), - ("10.1", OsVersion.TUMBLEWEED, 21), - ("10.1", OsVersion.TUMBLEWEED, 17), - ("9", OsVersion.TUMBLEWEED, 17), - ("10.1", OsVersion.SP6, 21), - ("10.1", OsVersion.SP6, 17), - # (10.1, OsVersion.SP7, 21), - ) -] -TOMCAT_CRATE = ContainerCrate(TOMCAT_CONTAINERS) + +TOMCAT_CONTAINERS: list[ObsPackage | ApplicationStackContainer] = [ + ObsPackage.from_bcis( + bcis=[ + _create_tomcat_container(os_version, tomcat_ver, jre_version) + for tomcat_ver, os_version, jre_version in ( + ("10.1", OsVersion.TUMBLEWEED, 22), + ("10.1", OsVersion.TUMBLEWEED, 21), + ("10.1", OsVersion.TUMBLEWEED, 17), + ) + ], + package_name="apache-tomcat-10-image", + ), + _create_tomcat_container(OsVersion.TUMBLEWEED, "9", 17), + ObsPackage.from_bcis( + package_name="sac-apache-tomcat-image", + bcis=[ + _create_tomcat_container(os_version, tomcat_ver, jre_version) + for tomcat_ver, os_version, jre_version in ( + ("10.1", OsVersion.SP6, 21), + ("10.1", OsVersion.SP6, 17), + ) + ], + ), +] diff --git a/tests/test_crate.py b/tests/test_obs_package.py similarity index 54% rename from tests/test_crate.py rename to tests/test_obs_package.py index 15d0635ba..758565261 100644 --- a/tests/test_crate.py +++ b/tests/test_obs_package.py @@ -1,7 +1,7 @@ from bci_build.container_attributes import BuildType -from bci_build.containercrate import ContainerCrate from bci_build.os_version import OsVersion from bci_build.package import DevelopmentContainer +from bci_build.package.obs_package import ObsPackage _BASE_KWARGS = { "name": "test", @@ -14,16 +14,20 @@ def test_multibuild_with_multi_flavor_docker(): - containers = [ - DevelopmentContainer( - **_BASE_KWARGS, - build_recipe_type=BuildType.DOCKER, - build_flavor=flavor, - ) - for flavor in ("flavor1", "flavor2") - ] + pkg = ObsPackage( + package_name="test", + bcis=[ + DevelopmentContainer( + **_BASE_KWARGS, + build_recipe_type=BuildType.DOCKER, + build_flavor=flavor, + ) + for flavor in ("flavor1", "flavor2") + ], + os_version=_BASE_KWARGS["os_version"], + ) assert ( - ContainerCrate(containers).multibuild(containers[0]) + pkg.multibuild == """ flavor1 flavor2 diff --git a/tests/test_service.py b/tests/test_service.py index dec954db1..b5dd5c431 100644 --- a/tests/test_service.py +++ b/tests/test_service.py @@ -1,12 +1,13 @@ +import pytest + from bci_build.container_attributes import BuildType from bci_build.containercrate import ContainerCrate -import pytest from bci_build.os_version import OsVersion from bci_build.package import DevelopmentContainer from bci_build.package import ParseVersion from bci_build.package import Replacement -from bci_build.templates import SERVICE_TEMPLATE from bci_build.service import Service +from bci_build.templates import SERVICE_TEMPLATE def test_service_without_params_as_xml():