]> git.ipfire.org Git - pbs.git/commitdiff
registry: Add a tags handler
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 10 Feb 2025 10:49:00 +0000 (10:49 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 10 Feb 2025 10:49:00 +0000 (10:49 +0000)
This lists all available tags

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/web/__init__.py
src/web/registry.py

index 0d0da65610659fb5a611f8453538abddf8f41316..e5a07af7c24d981d7863efc6f9770b6308455e60 100644 (file)
@@ -214,6 +214,10 @@ class Application(tornado.web.Application):
                        (r"/v2/([a-z0-9]+(?:(?:\.|_|__|-+)[a-z0-9]+)*(?:\/[a-z0-9]+(?:(?:\.|_|__|-+)[a-z0-9]+)*)*)/blobs/(sha256:[a-f0-9]{64})",
                                registry.ManifestHandler),
 
+                       # Tags
+                       (r"/v2/([a-z0-9]+(?:(?:\.|_|__|-+)[a-z0-9]+)*(?:\/[a-z0-9]+(?:(?:\.|_|__|-+)[a-z0-9]+)*)*)/tags/list",
+                               registry.TagsHandler),
+
                        # Catch anything else
                        (r"/v2/.*", registry.NotFoundHandler),
                ])
index 3c2700408c85ad495b809f3a2365ef6999e0ec24..df93b3bf2dcde8dfa55f4685c91b9deb89599e70 100644 (file)
@@ -237,3 +237,23 @@ class BlobHandler(BaseHandler):
                # Send the blob!
                if send_body:
                        await self.stream_blob(blob)
+
+
+class TagsHandler(BaseHandler):
+       async def get(self, distro_slug):
+               # Fetch the distribution
+               distro = await self.backend.distros.get_by_slug(distro_slug)
+               if not distro:
+                       raise NameUnknownError
+
+               tags = [
+                       "latest",
+               ]
+
+               for release in await distro.get_releases():
+                       tags.append(release.slug)
+
+               self.finish({
+                       "name" : distro.slug,
+                       "tags" : tags,
+               })