ci: add image build jobs (#1051)

Signed-off-by: Mohammed Naser <mnaser@vexxhost.com>
diff --git a/docker-bake.hcl b/docker-bake.hcl
new file mode 100644
index 0000000..5094d56
--- /dev/null
+++ b/docker-bake.hcl
@@ -0,0 +1,197 @@
+variable "REGISTRY" {
+    default = "registry.atmosphere.dev/library"
+}
+
+variable "CACHE_REGISTRY" {
+    default = "registry.atmosphere.dev/cache"
+}
+
+variable "PUSH_TO_CACHE" {
+    default = false
+}
+
+function "cache_from" {
+    params = [image]
+    result = ["type=registry,ref=${CACHE_REGISTRY}/${image}"]
+}
+
+function "cache_to" {
+    params = [image]
+    result = PUSH_TO_CACHE ? [format("%s,%s", cache_from(image)[0], "mode=max,image-manifest=true,oci-mediatypes=true,compression=zstd")] : []
+}
+
+target "ubuntu" {
+    context = "./images/ubuntu"
+
+    cache-from = cache_from("ubuntu")
+    cache-to = cache_to("ubuntu")
+
+    contexts = {
+        ubuntu = "docker-image://ubuntu:jammy-20240227"
+    }
+}
+
+target "git" {
+    context = "./images/git"
+
+    cache-from = cache_from("git")
+    cache-to = cache_to("git")
+}
+
+target "ubuntu-cloud-archive" {
+    name = "ubuntu-cloud-archive-${release.tgt}"
+    context = "./images/ubuntu-cloud-archive"
+
+    cache-from = cache_from("ubuntu-cloud-archive:${release.name}")
+    cache-to = cache_to("ubuntu-cloud-archive:${release.name}")
+
+    matrix = {
+        release = [
+            {
+                tgt = "zed",
+                name = "zed",
+            },
+            {
+                tgt = "bobcat",
+                name = "2023.2",
+            }
+        ]
+    }
+
+    contexts = {
+        ubuntu = "target:ubuntu"
+    }
+
+    args = {
+        RELEASE = release.name
+    }
+}
+
+target "requirements" {
+    name = "requirements-${release.tgt}"
+    context = "./images/requirements"
+
+    cache-from = cache_from("requirements:${release.name}")
+    cache-to = cache_to("requirements:${release.name}")
+
+    matrix = {
+        release = [
+            {
+                tgt = "zed",
+                name = "zed",
+            },
+            {
+                tgt = "bobcat",
+                name = "2023.2",
+            }
+        ]
+    }
+
+    contexts = {
+        ubuntu = "target:ubuntu"
+    }
+
+    args = {
+        RELEASE = release.name
+    }
+}
+
+target "openstack-venv-builder" {
+    name = "openstack-venv-builder-${release.tgt}"
+    context = "./images/openstack-venv-builder"
+
+    cache-from = cache_from("openstack-venv-builder:${release.name}")
+    cache-to = cache_to("openstack-venv-builder:${release.name}")
+
+    matrix = {
+        release = [
+            {
+                tgt = "zed",
+                name = "zed",
+            },
+            {
+                tgt = "bobcat",
+                name = "2023.2",
+            }
+        ]
+    }
+
+    contexts = {
+        ubuntu-cloud-archive = "target:ubuntu-cloud-archive-${release.tgt}",
+        requirements = "target:requirements-${release.tgt}",
+    }
+
+    args = {
+        RELEASE = release.name
+    }
+}
+
+target "openstack-runtime" {
+    name = "openstack-runtime-${release.tgt}"
+    context = "./images/openstack-runtime"
+
+    cache-from = cache_from("openstack-runtime:${release.name}")
+    cache-to = cache_to("openstack-runtime:${release.name}")
+
+    matrix = {
+        release = [
+            {
+                tgt = "zed",
+                name = "zed",
+            },
+            {
+                tgt = "bobcat",
+                name = "2023.2",
+            }
+        ]
+    }
+
+    contexts = {
+        ubuntu-cloud-archive = "target:ubuntu-cloud-archive-${release.tgt}",
+    }
+
+    args = {
+        RELEASE = release.name
+    }
+}
+
+target "barbican" {
+    name = "barbican-${release.tgt}"
+    context = "./images/barbican"
+
+    cache-from = cache_from("barbican:${release.name}")
+    cache-to = cache_to("barbican:${release.name}")
+
+    tags = [
+        "${REGISTRY}/barbican:${release.name}",
+        "${REGISTRY}/barbican:${release.ref}"
+    ]
+
+    matrix = {
+        release = [
+            {
+                tgt = "bobcat",
+                name = "2023.2",
+                ref = "a00fcade4138ffc52cd9c84b5999297966f019b5"
+            }
+        ]
+    }
+
+    contexts = {
+        openstack-venv-builder = "target:openstack-venv-builder-${release.tgt}"
+        openstack-runtime = "target:openstack-runtime-${release.tgt}",
+        git = "target:git"
+    }
+
+    args = {
+        RELEASE = release.name
+        PROJECT = "barbican"
+        BARBICAN_GIT_REF = release.ref
+    }
+}
+
+group "default" {
+    targets = [
+        "barbican"
+    ]
+}