treewide: add product info to OCI OS images

Add the product info to the OCI OS image config.

Change-Id: I70c572f2698c8d8bb0edc0ba969d8c6b37ae4c00
Reviewed-on: https://review.monogon.dev/c/monogon/+/4193
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
Tested-by: Jenkins CI
diff --git a/osbase/build/genproductinfo/test.bzl b/osbase/build/genproductinfo/test.bzl
new file mode 100644
index 0000000..e639867
--- /dev/null
+++ b/osbase/build/genproductinfo/test.bzl
@@ -0,0 +1,39 @@
+# Copyright The Monogon Project Authors.
+# SPDX-License-Identifier: Apache-2.0
+
+def _test_product_info_impl(ctx):
+    raw_product_info = json.encode({
+        "id": ctx.attr.os_id,
+        "name": ctx.attr.os_name,
+        "version": "0.0.0",
+        "variant": ctx.attr.architecture,
+        "architecture": ctx.attr.architecture,
+    })
+    product_info_file = ctx.actions.declare_file(ctx.label.name + ".json")
+    ctx.actions.write(product_info_file, raw_product_info)
+    return [DefaultInfo(files = depset([product_info_file]))]
+
+_test_product_info = rule(
+    implementation = _test_product_info_impl,
+    attrs = {
+        "os_name": attr.string(mandatory = True),
+        "os_id": attr.string(mandatory = True),
+        "architecture": attr.string(mandatory = True),
+    },
+)
+
+def _test_product_info_macro_impl(**kwargs):
+    _test_product_info(
+        architecture = select({
+            "@platforms//cpu:x86_64": "x86_64",
+            "@platforms//cpu:aarch64": "aarch64",
+        }),
+        **kwargs
+    )
+
+test_product_info = macro(
+    inherit_attrs = _test_product_info,
+    attrs = {"architecture": None},
+    implementation = _test_product_info_macro_impl,
+    doc = "This is a simplified variant of product_info for use in tests.",
+)