3f4b0ea6 Andy McCall 1 month ago ↶
1
{% extends "base.html" %}
2
{% import "repo_tabs.html" as m %}
3
{% block title %}Releases · {{ repo.owner }}/{{ repo.name }}{% endblock %}
4
{% block bodyattrs %} data-repo="{{ repo.url }}"{% endblock %}
5
{% block tabs %}{% call m::tabs(repo, "releases") %}{% endblock %}
6
{% block content %}
7
< div class = " head " > < h1 > Releases < small > {{ releases.len() }}</ small > </ h1 > </ div >
8
{% if !one & & repo.can(crate::auth::Access::Write) %}
9
< div class = " bar " > < a class = " go small " href = " {{ repo.url }}/releases/new" > draft a release</ a > {% if !unreleased.is_empty() %}< span class = " small mute " > tags without a release: {% for t in unreleased %}< a href = " {{ repo.url }}/releases/new?tag={{ t }}" > {{ t }}</ a > {% if !loop.last %}, {% endif %}{% endfor %}</ span > {% endif %}</ div >
10
{% endif %}
11
{% if releases.is_empty() %}< p class = " empty " > No releases yet. Tag a state with < code > oxy tag create v1.0 -m "…"</ code > , push it, then draft a release here.</ p > {% endif %}
12
{% for v in releases %}
13
< section class = " panel release " >
14
< h2 > < a href = " {{ repo.url }}/releases/tag/{{ v.r.tag }}" > {{ v.r.title }}</ a >
15
{% if v.latest %}< span class = " tag head " > latest</ span > {% endif %}{% if v.r.prerelease %}< span class = " tag warn " > pre-release</ span > {% endif %}
16
< span class = " small mute " > {{ v.r.tag }}{% if let Some(s) = v.signer %} · < span class = " sig sig-valid " > ✔</ span > signed by {{ s }}{% else %} · < span class = " sig sig-unsigned " > ○</ span > unsigned tag{% endif %} · {{ v.r.author }} · < time title = " {{ v.r.created_ms|when_i }}" > {{ v.r.created_ms|ago_i }}</ time > </ span > </ h2 >
17
{% if !v.r.notes.is_empty() %}< article class = " doc " > {{ v.notes_html|safe }}</ article > {% endif %}
18
< h3 > Assets</ h3 >
19
< ul class = " plain " >
20
{% for a in v.assets %}< li > < a href = " {{ repo.url }}/asset/{{ a.id }}/{{ a.name }}" > {{ a.name }}</ a > < span class = " small mute " > {{ a.size|bytes }} · blake3 < code title = " {{ a.hash }}" > {{ a.hash|short }}</ code > · {{ a.downloads }} downloads</ span >
21
{% if one & & repo.can(crate::auth::Access::Write) %}< form class = " tiny " method = " post" action = " {{ repo.url }}/releases/edit/{{ v.r.id }}" > < input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" > < input type = " hidden" name = " asset" value = " {{ a.id }}" > < button name = " action" value = " delete_asset" > delete</ button > </ form > {% endif %}</ li > {% endfor %}
22
< li > < a href = " {{ repo.url }}/archive?ref={{ v.r.tag }}&format=tar.zst" > Source ({{ v.r.tag }}.tar.zst)</ a > </ li >
23
< li > < a href = " {{ repo.url }}/archive?ref={{ v.r.tag }}&format=zip" > Source ({{ v.r.tag }}.zip)</ a > </ li >
24
</ ul >
25
{% if one & & repo.can(crate::auth::Access::Write) %}
26
< form class = " card " method = " post" action = " {{ repo.url }}/releases/upload/{{ v.r.id }}" enctype = " multipart/form-data" >
27
< input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" >
28
< label for = " asset" > Attach files</ label > < input type = " file" id = " asset " name = " asset" multiple required >
29
< button type = " submit" > UPLOAD</ button >
30
</ form >
31
< form class = " card wide " method = " post" action = " {{ repo.url }}/releases/edit/{{ v.r.id }}" >
32
< input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" >
33
< label for = " title" > Title</ label > < input type = " text" id = " title " name = " title" value = " {{ v.r.title }}" >
34
< label for = " notes" > Notes</ label > < textarea id = " notes " name = " notes" class = " md " rows = " 8" > {{ v.r.notes }}</ textarea >
35
< div class = " choice " > < label > < input type = " checkbox" name = " prerelease" value = " 1" {% if v.r.prerelease %} checked {% endif %}> pre-release</ label > </ div >
36
< div class = " choice " > < button type = " submit" name = " action" value = " save" > SAVE</ button > < button type = " submit" name = " action" value = " delete" class = " danger-btn " onclick = " return confirm ( ' Delete this release? The tag stays.' ) " > DELETE RELEASE</ button > </ div >
37
</ form >
38
{% endif %}
39
</ section >
40
{% endfor %}
41
{% endblock %}