Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions src/bci_build/containercrate.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
"""Crate to handle multibuild containers in the generator."""

import xml.etree.ElementTree as ET
from xml.dom import minidom

from bci_build.service import Service


class ContainerCrate:
"""ContainerCrate combines container build flavors into a single OBS multibuild
Expand Down Expand Up @@ -48,3 +53,26 @@ def multibuild(self, container) -> str:
for pkg in self.all_build_flavors(container)
)
return f"<multibuild>\n{flavors}\n</multibuild>"

def service(self, container) -> str:
"""Return the _service file string to write for this ContainerCrate."""
from bci_build.package import ALL_CONTAINER_IMAGE_NAMES

root = ET.Element("services")
root.append(
Service(name=f"{container.build_recipe_type}_label_helper").as_xml_element()
)
root.append(Service(name="kiwi_metainfo_helper").as_xml_element())
all_bcis = list(ALL_CONTAINER_IMAGE_NAMES.values())
all_bcis.sort(key=lambda bci: bci.uid)
for c in filter(
lambda bci: bci.crate == self and bci.os_version == container.os_version,
all_bcis,
):
for r in c.replacements_via_service:
rtree = r.to_service(f"Dockerfile.{c.build_flavor}").as_xml_element()
root.append(rtree)

return minidom.parseString(ET.tostring(root, encoding="unicode")).toprettyxml(
indent=" "
)
70 changes: 8 additions & 62 deletions src/bci_build/package/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import abc
import asyncio
import datetime
import enum
import os
import textwrap
from collections.abc import Callable
Expand All @@ -29,7 +28,7 @@
from bci_build.registry import ApplicationCollectionRegistry
from bci_build.registry import Registry
from bci_build.registry import publish_registry
from bci_build.service import Service
from bci_build.replacement import Replacement
from bci_build.templates import DOCKERFILE_TEMPLATE
from bci_build.templates import INFOHEADER_TEMPLATE
from bci_build.templates import KIWI_TEMPLATE
Expand Down Expand Up @@ -74,15 +73,6 @@ def __str__(self) -> str:
return self.name


@enum.unique
class ParseVersion(enum.StrEnum):
MAJOR = enum.auto()
MINOR = enum.auto()
PATCH = enum.auto()
PATCH_UPDATE = enum.auto()
OFFSET = enum.auto()


@dataclass
class StableUser:
"""Data class that stores information about stable user and group
Expand All @@ -99,54 +89,6 @@ class StableUser:
group_id: int


@dataclass
class Replacement:
"""Represents a replacement via the `obs-service-replace_using_package_version
<https://github.com/openSUSE/obs-service-replace_using_package_version>`_.

"""

#: regex to be replaced in :py:attr:`~bci_build.package.Replacement.file_name`, :file:`Dockerfile` or :file:`$pkg_name.kiwi`
regex_in_build_description: str

#: package name to be queried for the version
package_name: str

#: override file name, if unset use :file:`Dockerfile` or :file:`$pkg_name.kiwi`
file_name: str | None = None

#: specify how the version should be formatted, see
#: `<https://github.com/openSUSE/obs-service-replace_using_package_version#usage>`_
#: for further details
parse_version: None | ParseVersion = None

def __post_init__(self) -> None:
"""Barf if someone tries to replace variables in README, as those
changes will be only performed in the buildroot, but not in the actual
source package.

"""
if "%%" not in self.regex_in_build_description:
raise ValueError("regex_in_build_description must be in the form %%foo%%")
if self.file_name and "readme" in self.file_name.lower():
raise ValueError(f"Cannot replace variables in {self.file_name}!")

def to_service(self, default_file_name: str) -> Service:
"""Convert this replacement into a
:py:class:`~bci__build.service.Service`.

"""
return Service(
name="replace_using_package_version",
param=[
("file", self.file_name or default_file_name),
("regex", self.regex_in_build_description),
("package", self.package_name),
]
+ ([("parse-version", self.parse_version)] if self.parse_version else []),
)


def _build_tag_prefix(os_version: OsVersion) -> str:
if os_version == OsVersion.TUMBLEWEED:
return "opensuse/bci"
Expand Down Expand Up @@ -1164,9 +1106,13 @@ async def write_file_to_dest(fname: str, contents: str | bytes) -> None:
tasks.append(write_file_to_dest(mname, self.crate.multibuild(self)))
files.append(mname)

tasks.append(
write_file_to_dest("_service", SERVICE_TEMPLATE.render(image=self))
)
sname = "_service"
tasks.append(write_file_to_dest(sname, self.crate.service(self)))
files.append(sname)
else:
sname = "_service"
tasks.append(write_file_to_dest(sname, SERVICE_TEMPLATE.render(image=self)))
files.append(sname)

changes_file_name = self.package_name + ".changes"
if not (Path(dest) / changes_file_name).exists():
Expand Down
2 changes: 1 addition & 1 deletion src/bci_build/package/apache_tomcat.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
from bci_build.package import ApplicationStackContainer
from bci_build.package import OsContainer
from bci_build.package import Package
from bci_build.package import Replacement
from bci_build.package import _build_tag_prefix
from bci_build.replacement import Replacement

# last version needs to be the newest
_TOMCAT_VERSIONS: list[str] = ["9", "10.1"]
Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/appcontainers.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@
from bci_build.package import ApplicationStackContainer
from bci_build.package import OsContainer
from bci_build.package import Package
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package import _build_tag_prefix
from bci_build.package.helpers import generate_from_image_tag
from bci_build.package.helpers import generate_package_version_check
from bci_build.package.versions import format_version
from bci_build.package.versions import get_pkg_version
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion


def _envsubst_pkg_name(os_version: OsVersion) -> str:
Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/bind.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
from bci_build.os_version import CAN_BE_LATEST_OS_VERSION
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import ApplicationStackContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package.helpers import generate_from_image_tag
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

_BIND_FILES = {
"entrypoint.sh": (
Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/cosign.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
from bci_build.os_version import CAN_BE_LATEST_OS_VERSION
from bci_build.package import ApplicationStackContainer
from bci_build.package import OsVersion
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package.helpers import generate_from_image_tag
from bci_build.package.helpers import generate_package_version_check
from bci_build.package.versions import format_version
from bci_build.package.versions import get_pkg_version
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

COSIGN_CONTAINERS = [
ApplicationStackContainer(
Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/firefox.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
from bci_build.os_version import OsVersion
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import ApplicationStackContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package.helpers import generate_from_image_tag
from bci_build.package.kiosk import KIOSK_EXCLUSIVE_ARCH
from bci_build.package.kiosk import KIOSK_SUPPORT_ENDS
from bci_build.package.kiosk import KioskRegistry
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

FIREFOX_CONTAINERS = [
ApplicationStackContainer(
Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/gcc.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
from bci_build.os_version import OsVersion
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import DevelopmentContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package import generate_disk_size_constraints
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

_GCC_VERSIONS = Literal[7, 12, 13, 14, 15]

Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
from bci_build.os_version import ALL_NONBASE_OS_VERSIONS
from bci_build.os_version import CAN_BE_LATEST_OS_VERSION
from bci_build.package import ApplicationStackContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package.helpers import generate_from_image_tag
from bci_build.package.helpers import generate_package_version_check
from bci_build.package.versions import format_version
from bci_build.package.versions import get_pkg_version
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

GIT_CONTAINERS = [
ApplicationStackContainer(
Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/golang.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import LOG_CLEAN
from bci_build.package import DevelopmentContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package import generate_disk_size_constraints
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

_GO_VER_T = Literal["1.20", "1.21", "1.22", "1.23", "1.24", "1.25"]
_GOLANG_VERSIONS: list[_GO_VER_T] = ["1.24", "1.25"]
Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/grafana.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
from bci_build.os_version import OsVersion
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import ApplicationStackContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package.helpers import generate_from_image_tag
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

_GRAFANA_FILES = {}
for filename in ("run.sh", "LICENSE"):
Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/helm.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
from bci_build.os_version import ALL_NONBASE_OS_VERSIONS
from bci_build.os_version import CAN_BE_LATEST_OS_VERSION
from bci_build.package import ApplicationStackContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package.helpers import generate_from_image_tag
from bci_build.package.helpers import generate_package_version_check
from bci_build.package.versions import format_version
from bci_build.package.versions import get_pkg_version
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

HELM_CONTAINERS = [
ApplicationStackContainer(
Expand Down
2 changes: 1 addition & 1 deletion src/bci_build/package/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import RELEASED_OS_VERSIONS
from bci_build.package import OsContainer
from bci_build.package import ParseVersion
from bci_build.package import _build_tag_prefix
from bci_build.util import ParseVersion


def generate_package_version_check(
Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/kiwi.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
from bci_build.os_version import OsVersion
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import DevelopmentContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package import generate_disk_size_constraints
from bci_build.package.helpers import generate_package_version_check
from bci_build.package.versions import format_version
from bci_build.package.versions import get_pkg_version
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion


def generate_kiwi_10_config():
Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/kubectl.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
from bci_build.os_version import CAN_BE_LATEST_OS_VERSION
from bci_build.os_version import OsVersion
from bci_build.package import ApplicationStackContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package.helpers import generate_from_image_tag
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

_KUBECTL_VERSIONS = {
OsVersion.TUMBLEWEED: ("1.31", "1.31", "1.32", "1.33", "1.34"),
Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/kubevirt.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
from bci_build.os_version import OsVersion
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import ApplicationStackContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package.helpers import generate_from_image_tag
from bci_build.package.helpers import generate_package_version_check
from bci_build.package.versions import format_version
from bci_build.package.versions import get_pkg_version
from bci_build.registry import SUSERegistry
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

KUBEVIRT_EXCLUSIVE_ARCH = [Arch.X86_64]

Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/kubevirt_cdi.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
from bci_build.os_version import OsVersion
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import ApplicationStackContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package.helpers import generate_from_image_tag
from bci_build.package.helpers import generate_package_version_check
from bci_build.package.kubevirt import KubeVirtRegistry
from bci_build.package.versions import format_version
from bci_build.package.versions import get_pkg_version
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

CDI_EXCLUSIVE_ARCH = [Arch.X86_64]

Expand Down
4 changes: 2 additions & 2 deletions src/bci_build/package/mariadb.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
from bci_build.os_version import OsVersion
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import ApplicationStackContainer
from bci_build.package import ParseVersion
from bci_build.package import Replacement
from bci_build.package import generate_disk_size_constraints
from bci_build.package.helpers import generate_from_image_tag
from bci_build.package.helpers import generate_package_version_check
from bci_build.package.versions import get_pkg_version
from bci_build.replacement import Replacement
from bci_build.util import ParseVersion

_MARIADB_IDEXEC = b"""#!/bin/bash

Expand Down
2 changes: 1 addition & 1 deletion src/bci_build/package/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from bci_build.os_version import _SUPPORTED_UNTIL_SLE
from bci_build.os_version import OsVersion
from bci_build.package import DevelopmentContainer
from bci_build.package import Replacement
from bci_build.replacement import Replacement

_NODE_VERSIONS = Literal[16, 18, 20, 21, 22, 23, 24]

Expand Down
2 changes: 1 addition & 1 deletion src/bci_build/package/openjdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
from bci_build.os_version import OsVersion
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import DevelopmentContainer
from bci_build.package import Replacement
from bci_build.package import _build_tag_prefix
from bci_build.package import generate_disk_size_constraints
from bci_build.replacement import Replacement


def supported_until(os_version: OsVersion, jre_major: int) -> datetime.date | None:
Expand Down
2 changes: 1 addition & 1 deletion src/bci_build/package/php.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from bci_build.package import DOCKERFILE_RUN
from bci_build.package import _BASH_SET
from bci_build.package import DevelopmentContainer
from bci_build.package import Replacement
from bci_build.replacement import Replacement


@enum.unique
Expand Down
Loading
Loading