diff --git a/podman/domain/images_build.py b/podman/domain/images_build.py index 3cfb4e76..451b5763 100644 --- a/podman/domain/images_build.py +++ b/podman/domain/images_build.py @@ -66,6 +66,8 @@ def build(self, **kwargs) -> tuple[Image, Iterator[bytes]]: layers (bool) - Cache intermediate layers during build. output (str) - specifies if any custom build output is selected for following build. outputformat (str) - The format of the output image's manifest and configuration data. + manifest (str) - add the image to the specified manifest list. + Creates manifest list if it does not exist. Returns: first item is the podman.domain.images.Image built @@ -173,6 +175,7 @@ def _render_params(kwargs) -> dict[str, list[Any]]: "forcerm": kwargs.get("forcerm"), "httpproxy": kwargs.get("http_proxy"), "networkmode": kwargs.get("network_mode"), + "manifest": kwargs.get("manifest"), "nocache": kwargs.get("nocache"), "platform": kwargs.get("platform"), "pull": kwargs.get("pull"), diff --git a/podman/tests/integration/test_images.py b/podman/tests/integration/test_images.py index 4d3b36f4..e910a651 100644 --- a/podman/tests/integration/test_images.py +++ b/podman/tests/integration/test_images.py @@ -38,6 +38,12 @@ def setUp(self): self.client = PodmanClient(base_url=self.socket_uri) self.addCleanup(self.client.close) + self.test_manifest_name = "dummy:v1.2.3" + + def tearDown(self) -> None: + if self.client.manifests.exists(self.test_manifest_name): + self.client.manifests.remove(self.test_manifest_name) + def test_image_crud(self): """Test Image CRUD. @@ -144,6 +150,17 @@ def test_build(self): self.assertIsNotNone(image) self.assertIsNotNone(image.id) + def test_build_with_manifest(self): + buffer = io.StringIO("""FROM quay.io/libpod/alpine_labels:latest""") + + self.assertFalse(self.client.manifests.exists(self.test_manifest_name)) + + image, _ = self.client.images.build(fileobj=buffer, manifest=self.test_manifest_name) + self.assertIsNotNone(image) + self.assertIsNotNone(image.id) + + self.assertTrue(self.client.manifests.exists(self.test_manifest_name)) + def test_build_with_context(self): context = io.BytesIO() with tarfile.open(fileobj=context, mode="w") as tar: diff --git a/podman/tests/unit/test_build.py b/podman/tests/unit/test_build.py index 6adf0fe8..5015e269 100644 --- a/podman/tests/unit/test_build.py +++ b/podman/tests/unit/test_build.py @@ -66,7 +66,8 @@ def test_build(self, mock_prepare_containerfile, mock_create_tar): "&buildargs=%7B%22BUILD_DATE%22%3A+%22January+1%2C+1970%22%7D" "&cpuperiod=10" "&extrahosts=%7B%22database%22%3A+%22127.0.0.1%22%7D" - "&labels=%7B%22Unittest%22%3A+%22true%22%7D", + "&labels=%7B%22Unittest%22%3A+%22true%22%7D" + "&manifest=example%3Av1.2.3", text=buffer.getvalue(), ) mock.get( @@ -98,6 +99,7 @@ def test_build(self, mock_prepare_containerfile, mock_create_tar): }, extra_hosts={"database": "127.0.0.1"}, labels={"Unittest": "true"}, + manifest="example:v1.2.3", ) self.assertIsInstance(image, Image) self.assertEqual(image.id, "032b8b2855fc")