Skip to content

Commit

Permalink
Add Replacement.to_service helper method
Browse files Browse the repository at this point in the history
  • Loading branch information
dcermak committed Oct 14, 2024
1 parent 31f06bd commit e2844dc
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/bci_build/package/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,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.templates import DOCKERFILE_TEMPLATE
from bci_build.templates import INFOHEADER_TEMPLATE
from bci_build.templates import KIWI_TEMPLATE
Expand Down Expand Up @@ -106,6 +107,21 @@ def __post_init__(self) -> None:
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:
Expand Down
44 changes: 44 additions & 0 deletions tests/test_service.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
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
Expand All @@ -19,6 +20,49 @@ def test_service_with_params_as_xml():
)


@pytest.mark.parametrize(
"replacement, default_file_name, service",
[
# bare bone example
(
Replacement(regex := "%ver%", pkg := "pkgFoo"),
"Dockerfile",
Service(
name=(name := "replace_using_package_version"),
param=[("file", "Dockerfile"), ("regex", regex), ("package", pkg)],
),
),
# the default file name is ignored if the parameter file_name is given
(
Replacement(regex, pkg, file_name=(fname := "testfile")),
"Dockerfile",
Service(
name=name,
param=[("file", fname), ("regex", regex), ("package", pkg)],
),
),
# specify a parse_version
(
Replacement(regex, pkg, parse_version=ParseVersion.MAJOR),
"Dockerfile",
Service(
name=name,
param=[
("file", "Dockerfile"),
("regex", regex),
("package", pkg),
("parse-version", "major"),
],
),
),
],
)
def test_replacement_to_service(
replacement: Replacement, default_file_name: str, service: Service
):
assert replacement.to_service(default_file_name) == service


_BASE_KWARGS = {
"name": "test",
"package_name": "test-image",
Expand Down

0 comments on commit e2844dc

Please sign in to comment.