treewide: build product info

This change adds the type definition and generator for product info,
which will be added to the OCI OS image to provide information about the
contents.

Here is an example product info:

{
	"id": "metropolis-node",
	"name": "Metropolis Node",
	"version": "0.1.0-dev1059",
	"variant": "x86_64-race",
	"commit_hash": "56248c1c1d5039bdf3c1043ade88f3f158ceb52b",
	"commit_date": "2025-05-08T18:26:46+00:00",
	"build_tree_dirty": true,
	"components": [
		{"id": "linux", "version": "6.12.15"},
		{"id": "kubernetes", "version": "1.32.0"}
	]
}

The product info has the same inputs and a similar purpose as the
os-release file, so they are both generated by the same build action.

Change-Id: I89d453f2d72ac9df49e404f46381cd594534f800
Reviewed-on: https://review.monogon.dev/c/monogon/+/4192
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/installer/BUILD.bazel b/metropolis/installer/BUILD.bazel
index cf7beb0..29eb04c 100644
--- a/metropolis/installer/BUILD.bazel
+++ b/metropolis/installer/BUILD.bazel
@@ -1,5 +1,5 @@
 load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
-load("//osbase/build/genosrelease:defs.bzl", "os_release")
+load("//osbase/build/genproductinfo:defs.bzl", "product_info")
 load("//osbase/build/mkcpio:def.bzl", "node_initramfs")
 load("//osbase/build/mkpayload:def.bzl", "efi_unified_kernel_image")
 
@@ -43,10 +43,11 @@
     visibility = ["//metropolis/installer/test:__pkg__"],
 )
 
-os_release(
-    name = "installer-release-info",
+product_info(
+    name = "product_info",
     os_id = "metropolis-installer",
     os_name = "Metropolis Installer",
+    out_os_release = ":product_info_os_release",
     stamp_var = "STABLE_MONOGON_metropolis_version",
 )
 
@@ -58,6 +59,6 @@
         ":initramfs",
     ],
     kernel = "//third_party/linux",
-    os_release = ":installer-release-info",
+    os_release = ":product_info_os_release",
     visibility = ["//visibility:public"],
 )