]> git.ipfire.org Git - pbs.git/commitdiff
releases: Add a simple listing of images
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 11 Feb 2025 13:59:32 +0000 (13:59 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 11 Feb 2025 13:59:32 +0000 (13:59 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/buildservice/images.py
src/templates/distros/releases/show.html
src/templates/images/macros.html [new file with mode: 0644]

index 3d9d3b63d341a467283a74c3fe7f5102a1c86854..6794c73f5d58231fc401e8fddcf674d19f584e0e 100644 (file)
@@ -243,6 +243,11 @@ dist_templates_events_DATA = \
 
 templates_eventsdir = $(templatesdir)/events
 
+dist_templates_images_DATA = \
+       src/templates/images/macros.html
+
+templates_imagesdir = $(templatesdir)/images
+
 dist_templates_jobs_DATA = \
        src/templates/jobs/abort.html \
        src/templates/jobs/index.html \
index e3c832ed290ab5aa8bfcba676fe9e3d059dd6042..6833dea0b5498fc6bbb08ed318791aa5b71d359a 100644 (file)
@@ -32,6 +32,14 @@ log = logging.getLogger("pbs.images")
 class Image(database.Base, database.BackendMixin, database.SoftDeleteMixin):
        __tablename__ = "images"
 
+       # Sorting
+
+       def __lt__(self, other):
+               if isinstance(other, self.__class__):
+                       return self.arch < other.arch
+
+               return NotImplemented
+
        # ID
 
        id = Column(Integer, primary_key=True)
@@ -82,6 +90,15 @@ class Image(database.Base, database.BackendMixin, database.SoftDeleteMixin):
 
        path = Column(Text, nullable=False)
 
+       # Link
+
+       @property
+       def link(self):
+               """
+                       Returns a link where clients can download this image from
+               """
+               return self.backend.path_to_url(self.path, mirrored=self.release.is_mirrored())
+
        # Size
 
        size = Column(BigInteger, nullable=False)
index 3730874bde6739c0f4e252e98d64845091e104a2..952c702ed45e89c8159e6a054a5c717d56083cbd 100644 (file)
@@ -1,6 +1,7 @@
 {% extends "base.html" %}
 
 {% from "macros.html" import Text with context %}
+{% from "images/macros.html" import ImageList with context %}
 
 {% block title %}{{ distro }} - {{ release }}{% endblock %}
 
                        </div>
                </section>
        {% endif %}
+
+       {# Images #}
+       <section class="section">
+               <div class="container">
+                       {{ ImageList(release.images) }}
+               </div>
+       </section>
 {% endblock %}
diff --git a/src/templates/images/macros.html b/src/templates/images/macros.html
new file mode 100644 (file)
index 0000000..14bfe5c
--- /dev/null
@@ -0,0 +1,57 @@
+{% macro ImageList(images) %}
+       {% for type, images in images | groupby("type") %}
+               <div class="block">
+                       {# Headline #}
+                       <h5 class="title is-5">
+                               {% if type == "iso" %}
+                                       {{ _("ISO Image") }}
+                               {% elif type == "oci" %}
+                                       {{ _("Container Image") }}
+                               {% else %}
+                                       <span class="has-text-light">
+                                               {{ _("Unknown Image Type") }}
+                                       </span>
+                               {% endif %}
+                       </h5>
+
+                       <div class="level">
+                               <div class="level-left">
+                                       {% for image in images | sort %}
+                                               <div class="level-item">
+                                                       <nav class="level">
+                                                               <div class="level-item">
+                                                                       <div class="tags has-addons">
+                                                                               <span class="tag is-{{ image.arch }}">
+                                                                                       {{ image.arch }}
+                                                                               </span>
+
+                                                                               <span class="tag is-dark">
+                                                                                       {{ image.size | filesizeformat(binary=True) }}
+                                                                               </span>
+                                                                       </div>
+                                                               </div>
+
+                                                               {# Download Link #}
+                                                               <div class="level-item">
+                                                                       <small>
+                                                                               <a href="{{ image.link }}">
+                                                                                       <span class="icon-text">
+                                                                                               <span class="icon">
+                                                                                                       <i class="fa-solid fa-download"></i>
+                                                                                               </span>
+
+                                                                                               <span>
+                                                                                                       {{ _("Download") }}
+                                                                                               </span>
+                                                                                       </span>
+                                                                               </a>
+                                                                       </small>
+                                                               </div>
+                                                       </nav>
+                                               </div>
+                                       {% endfor %}
+                               </div>
+                       </div>
+               </div>
+       {% endfor %}
+{% endmacro %}