feat: add project fork async job service with cli prune/clear commands and shared container image build target

This commit is contained in:
2026-06-09 14:06:02 +00:00
parent c565e3b55c
commit 05c6fa7f3b
90 changed files with 6889 additions and 1146 deletions
+11 -2
View File
@@ -32,6 +32,12 @@
{% endif %}
</div>
{% if forked_from %}
<div class="project-detail-meta">
<span>&#x2442; Forked from <a href="/projects/{{ forked_from['slug'] }}">{{ forked_from['title'] }}</a></span>
</div>
{% endif %}
<div class="project-detail-author">
{% set _size = 32 %}{% set _size_class = "sm" %}{% set _user = author %}{% include "_avatar_link.html" %}
<div>
@@ -65,6 +71,9 @@
<a href="/projects/{{ project['slug'] or project['uid'] }}/containers" class="project-star-btn">&#x1F5A5;&#xFE0F; Containers</a>
{% endif %}
<button type="button" class="project-star-btn" data-zip-download="/projects/{{ project['slug'] or project['uid'] }}/zip">&#x1F4E6; Download zip</button>
{% if user %}
<button type="button" class="project-star-btn" data-fork-project="/projects/{{ project['slug'] or project['uid'] }}/fork" data-fork-name="{{ project['title'] }}">&#x2442; Fork</button>
{% endif %}
<button type="button" class="project-star-btn" data-share="/projects/{{ project['slug'] or project['uid'] }}">&#x1F517; Share</button>
{% if user %}
{% set _type = "project" %}{% set _uid = project['uid'] %}{% set _my_vote = my_vote %}{% set _count = star_count %}{% set _btn_class = "project-star-btn" %}{% include "_star_vote.html" %}
@@ -73,11 +82,11 @@
{% if is_owner %}
<form method="POST" action="/projects/{{ project['slug'] or project['uid'] }}/private" style="display:inline;">
<input type="hidden" name="value" value="{{ 0 if is_private else 1 }}">
<button type="submit" class="project-star-btn">{% if is_private %}&#x1F513; Make public{% else %}&#x1F512; Make private{% endif %}</button>
<button type="submit" class="project-star-btn" data-confirm-danger data-confirm="{% if is_private %}Make this project public? Everyone will be able to see the project and all its files.{% else %}Make this project private? Only you and administrators will be able to see it.{% endif %}">{% if is_private %}&#x1F513; Make public{% else %}&#x1F512; Make private{% endif %}</button>
</form>
<form method="POST" action="/projects/{{ project['slug'] or project['uid'] }}/readonly" style="display:inline;">
<input type="hidden" name="value" value="{{ 0 if read_only else 1 }}">
<button type="submit" class="project-star-btn" data-confirm="{% if read_only %}Allow file changes again for this project?{% else %}Make this project read-only? Files become immutable until you turn this off.{% endif %}">{% if read_only %}&#x1F4DD; Allow edits{% else %}&#x1F6AB; Make read-only{% endif %}</button>
<button type="submit" class="project-star-btn" data-confirm-danger data-confirm="{% if read_only %}Allow file changes again for this project?{% else %}Make this project read-only? Files become immutable until you turn this off.{% endif %}">{% if read_only %}&#x1F4DD; Allow edits{% else %}&#x1F6AB; Make read-only{% endif %}</button>
</form>
<form method="POST" action="/projects/delete/{{ project['slug'] or project['uid'] }}" style="display:inline;">
<button type="submit" class="project-star-btn" data-confirm="Delete this project?"><span class="icon">&#x1F5D1;&#xFE0F;</span> Delete</button>