This lists all available tags
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
(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),
])
# 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,
+ })