ci: add image build jobs (#1051)

Signed-off-by: Mohammed Naser <mnaser@vexxhost.com>
diff --git a/images/build.sh b/images/build.sh
new file mode 100755
index 0000000..d93f853
--- /dev/null
+++ b/images/build.sh
@@ -0,0 +1,43 @@
+#!/bin/bash -xe
+
+TARGET=""
+PUSH=false
+
+while [[ $# -gt 0 ]]; do
+    key="$1"
+
+    case $key in
+        --push)
+        PUSH=true
+        shift
+        ;;
+        *)
+        if [ -z "$TARGET" ]; then
+            TARGET="$1"
+        else
+            echo "Invalid argument: $1"
+            exit 1
+        fi
+        shift
+        ;;
+    esac
+done
+
+if [ -z "$TARGET" ]; then
+    echo "Usage: $0 [--push] <target>"
+    exit 1
+fi
+
+docker buildx create --name=atmosphere --driver=docker-container || true
+
+if [ "$PUSH" = true ]; then
+    docker buildx bake --builder=atmosphere --provenance --sbom=true --push $TARGET
+
+    # Sign all images
+    export COSIGN_PASSWORD=""
+    for IMAGE in $(docker buildx bake --print ${TARGET} | jq -r '.target[].tags | select(. != null)[]'); do
+        cosign sign -y --recursive --key cosign.key ${IMAGE}
+    done
+else
+    docker buildx bake --builder=atmosphere --provenance --sbom=true $TARGET
+fi