From 3cb8992d56f2cee8a7cb151253125e30931ccd6d Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Dec 12 2024 01:52:40 +0000 Subject: Use new container and bootable-container productmd types In https://github.com/release-engineering/productmd/pull/181 I added new `bootable-container` and `container` types to productmd. This makes pungi always use the bootable-container type for ostree_container images (previously 'ociarchive'), and default to using the container type for Kiwi-built oci.tar.xz container images (previously 'docker'). This is a significant change for anything that relies on productmd/fedfind conventions to 'identify' images, as these images will now have a different identity. But I think it's a valuable improvement in their identities. 'ociarchive' never made any sense as an image 'type' - it's a format - and 'docker' wasn't a very good type for images that are explicitly OCI container images, not Docker-native ones. We also can now easily distinguish between 'regular' container images and ones that are intended to be bootable. Signed-off-by: Adam Williamson --- diff --git a/pungi/phases/kiwibuild.py b/pungi/phases/kiwibuild.py index 400ea6a..9b75dd7 100644 --- a/pungi/phases/kiwibuild.py +++ b/pungi/phases/kiwibuild.py @@ -25,6 +25,7 @@ KIWIEXTENSIONS = [ ("fex", ["squashfs.xz"], "squashfs.xz"), ("fex", ["squashfs.gz"], "squashfs.gz"), ("fex", ["squashfs"], "squashfs"), + ("container", ["oci.tar.xz"], "tar.xz"), ] @@ -242,13 +243,15 @@ class RunKiwiBuildThread(WorkerThread): def _find_type_and_format(path): - for type_, suffixes in EXTENSIONS.items(): - for suffix in suffixes: - if path.endswith(suffix): - return type_, suffix # these are our kiwi-exclusive mappings for images whose extensions - # aren't quite the same as imagefactory + # aren't quite the same as imagefactory. they come first as we + # want our oci.tar.xz mapping to win over the tar.xz one in + # EXTENSIONS for type_, suffixes, format_ in KIWIEXTENSIONS: if any(path.endswith(suffix) for suffix in suffixes): return type_, format_ + for type_, suffixes in EXTENSIONS.items(): + for suffix in suffixes: + if path.endswith(suffix): + return type_, suffix return None, None diff --git a/pungi/phases/ostree_container.py b/pungi/phases/ostree_container.py index c50633d..c017962 100644 --- a/pungi/phases/ostree_container.py +++ b/pungi/phases/ostree_container.py @@ -164,9 +164,9 @@ class OSTreeContainerThread(WorkerThread): # Update image manifest img = Image(compose.im) - # Get the manifest type from the config if supplied, otherwise we - # determine the manifest type based on the koji output - img.type = "ociarchive" + # these are hardcoded as they should always be correct, we + # could potentially allow overriding them via config though + img.type = "bootable-container" img.format = "ociarchive" img.path = os.path.relpath(fullpath, compose.paths.compose.topdir()) img.mtime = util.get_mtime(fullpath) diff --git a/setup.py b/setup.py index fd249c0..839400b 100755 --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ setup( "jsonschema", "kobo", "lxml", - "productmd>=1.23", + "productmd>=1.43", "dogpile.cache", ], extras_require={':python_version=="2.7"': ["enum34", "lockfile"]},