1---2pagination:3 data: forge.pages.releases4---5{% extends "base.njk" %}6{% import "macros.njk" as m with context %}7{% import "ui.njk" as ui %}8{% block content %}9{% css %}10/* A release's files: name, size, sha256; then who signed SHA256SUMS. */11.downloads { padding: var(--space-2) var(--space-3); border-bottom: var(--hairline) solid var(--border); }12.downloads table { width: 100%; border-collapse: collapse; }13.downloads td { padding: var(--space-1) var(--space-3) var(--space-1) 0; vertical-align: top; }14.downloads td.file { white-space: nowrap; font-weight: var(--fw-medium); }15.downloads td.size { white-space: nowrap; text-align: right; font: var(--fw-regular) var(--text-xs) var(--mono); }16.downloads td.sum { font-size: var(--text-xs); overflow-wrap: anywhere; width: 100%; }17.downloads p { margin: var(--space-2) 0 var(--space-1); font-size: var(--text-sm); }18/* Phones: a file's name and size on a line, its sha256 the width under them. */19@media (max-width: 720px) {20 .downloads tr { display: grid; grid-template-columns: 1fr auto; column-gap: var(--space-3); padding: var(--space-1) 0; }21 .downloads td { padding: 0; }22 .downloads td.file { white-space: normal; overflow-wrap: anywhere; }23 .downloads td.sum { grid-column: 1 / -1; }24}25{% endcss %}26{# Release notes: each tag's commits since the tag before it, under the27 section Jev sorted them into (lib/jev-commits.ts). The wording is the28 commit subjects; commits without an answer are under Other. A tag with29 a release (forge release publish, lib/releases.ts) lists its files30 first. #}31{% for r in p.releases %}32{% set head %}<b class="mono release-tag">{{ r.tag.sha | commitLink(p.repo, r.tag.name) | safe }}</b><span class="grow">{{ ('since ' ~ r.prev) if r.prev else 'first release' }}, {{ r.count | plural('commit') }}{{ ' or more' if r.more }}</span><span class="end">{{ r.tag.date | date }}</span>{% endset %}33{% call ui.panel(head, '', 'id="' + r.tag.name + '"') %}34{% if r.files %}35<div class="downloads">36<table>37<tbody>38{% for f in r.files.files %}<tr><td class="file mono"><a href="{{ f.href }}" download>{{ f.name }}</a></td><td class="size desc">{{ f.size | size }}</td><td class="sum mono desc" title="sha256">{{ f.sha256 or 'not in SHA256SUMS' }}</td></tr>39{% endfor %}40</tbody>41</table>42<p><a href="{{ r.files.sums }}" download>SHA256SUMS</a> {% if r.files.signed == 'good' %}<span class="ci pass" title="SHA256SUMS.sig verified against the forge's keys">✓ signed by {{ r.files.signer }}</span>{% elif r.files.signed %}<span class="ci fail">signature {{ r.files.signed }}</span>{% else %}<span class="desc">signature not checked</span>{% endif %} <span class="desc">(<a href="{{ r.files.sig }}" download>.sig</a>; <code>forge release verify <file></code>)</span>43<br>CI of {{ r.tag.sha | short }}: {{ r.ci | ciHtml(true) | safe }}44<br><span class="desc">published {{ r.files.date | ago | safe }}{% if r.files.source and r.files.source != r.tag.sha %}, from {{ r.files.source | short }}, where the tag was then{% endif %}</span></p>45</div>46{% endif %}47<div class="notes">48{% for g in r.groups %}49{% if g.folded %}<details><summary>{{ g.title }} <span class="desc">{{ g.items.length }}</span></summary>{% else %}<h3>{{ g.title }}</h3>{% endif %}50<ul>51{% for c in g.items %}<li>{{ c.sha | commitLink(p.repo, c.subject) | safe }} <span class="sha desc">{{ c.sha | short }}</span></li>52{% endfor %}53</ul>54{% if g.folded %}</details>{% endif %}55{% endfor %}56{% if r.more %}<p class="desc">Older commits in this release aren't listed.</p>{% endif %}57</div>58{% endcall %}59{% else %}60<div class="panel"><p class="empty">No tags yet. Tag a commit and push it: <code>git tag v0.1 && git push --tags</code></p></div>61{% endfor %}62{% endblock %}