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():