Break-out early if the image already exists (#23)

diff --git a/ci/build-image-strategy b/ci/build-image-strategy
new file mode 100755
index 0000000..495bced
--- /dev/null
+++ b/ci/build-image-strategy
@@ -0,0 +1,52 @@
+#!/usr/bin/env python3
+
+import glob
+import json
+import requests
+import sys
+
+MATRIX = []
+
+RELEASES = sorted([r.split("/")[-1] for r in glob.glob("images/openstack/releases/*")])
+PROJECTS = sorted([r.split("/")[-1] for r in glob.glob("images/openstack/projects/*")])
+
+DATA = {}
+
+if len(sys.argv) > 1 and sys.argv[1] == "all":
+    DATA = {
+        "fail-fast": False,
+        "matrix": {
+            "release": RELEASES,
+            "project": PROJECTS,
+        },
+    }
+else:
+    for release in RELEASES:
+        for project in PROJECTS:
+            ref = (
+                open(f"images/openstack/projects/{project}/{release}/ref", "r")
+                .read()
+                .strip()
+            )
+
+            r = requests.get(
+                f"https://quay.io/api/v1/repository/vexxhost/{project}/tag/?specificTag={ref}"
+            )
+
+            if r.json().get("tags") == []:
+                MATRIX += [
+                    {
+                        "release": release,
+                        "project": project,
+                    }
+                ]
+
+    if len(MATRIX) != 0:
+        DATA = {
+            "fail-fast": False,
+            "matrix": {
+                "include": MATRIX,
+            },
+        }
+
+json.dump(DATA, sys.stdout, separators=(",", ":"))