<divclass="choice"><label><inputtype="checkbox"name="enabled"value="1"{% ifrow.git_mirror %} checked{% endif %}> keep a read-only Git mirror of <strong>{{ row.default_bookmark }}</strong></label></div>
58
<pclass="small mute">For tools that only speak Git (CI runners, IDEs): <code>git clone {{ shell.base_url }}{{ repo.url }}.git</code>. Private repositories take a personal access token as the password. Pushing to the mirror is refused.{% if row.git_mirror && !row.git_mirror_state.is_empty() %} Last exported state <code>{{ row.git_mirror_state|short }}</code>.{% endif %}</p>
<labelfor="required_checks">Check names that must pass on a proposal's projected state (comma-separated)</label><inputtype="text"id="required_checks"name="required_checks"value="{{ required_checks }}"placeholder="build, test">
65
<pclass="small mute">Any token with <code>checks:write</code> reports checks with <code>POST {{ shell.base_url }}/api/v1/repos/{{ repo.owner }}/{{ repo.name }}/checks</code>.</p>
<p>Pushes to this repository {% if flow_enabled %}<strong>start runs</strong>{% else %}<strong>do not start runs</strong>{% endif %} of its <code>.flow/pipeline.kdl</code>.</p>
<pclass="small">The OxygenFlow runners that may take this repository's jobs: the site's, {{ row.owner }}'s, and this repository's own.</p>
88
{% if let Some(t) = runner_token %}<pclass="note">Register a runner for this repository with:</p><preclass="snippet">flow runner register {{ shell.base_url }} --token {{ t }} --name NAME</pre>{% endif %}
89
{% if runners.is_empty() %}<pclass="mute small">None yet: runs wait until a runner that serves this repository is added.</p>{% else %}
<formmethod="post"action="{{ repo.url }}/settings/runners/token"><inputtype="hidden"name="_csrf"value="{{ shell.csrf }}"><buttontype="submit">Add a runner for this repository</button></form>
{% call w::panel(repo.url ~ "/settings", hooks, shell.csrf, "Each delivery is signed with the secret (X-Oxyhub-Signature) and retried with backoff for a day.") %}
{% if collaborators.is_empty() %}<pclass="mute small">Nobody beyond the owner{% if !teams.is_empty() %} and the organisation's members{% endif %}.</p>{% else %}
104
<tableclass="small">
105
{% for c in collaborators %}
106
<tr><td>{% if let Some(a) = c.account %}<ahref="/{{ a.username }}">{{ a.username }}</a>{% else if let Some(t) = c.team %}team {{ t.name }}{% endif %}</td><td>{{ c.role }}</td>
107
<td><formclass="tiny"method="post"action="{{ repo.url }}/settings/collaborators"><inputtype="hidden"name="_csrf"value="{{ shell.csrf }}">{% if let Some(a) = c.account %}<inputtype="hidden"name="username"value="{{ a.username }}">{% else if let Some(t) = c.team %}<inputtype="hidden"name="team"value="{{ t.name }}">{% endif %}<buttonname="remove"value="1">remove</button></form></td></tr>
{% if !teams.is_empty() %}<div><labelfor="team">or team</label><selectid="team"name="team"><optionvalue="">—</option>{% for t in teams %}<optionvalue="{{ t.name }}">{{ t.name }}</option>{% endfor %}</select></div>{% endif %}
<pclass="small mute">Settings that change what this repository is. Each asks you to confirm; none can be undone from here except archiving.</p>
123
<divclass="danger-row">
124
<div><strong>Transfer ownership</strong><pclass="small mute">Move this repository to a user or an organisation you may create repositories under. Its address changes to <code>/OWNER/{{ repo.name }}</code>; the old address redirects, and <code>oxy</code> remotes keep working.</p></div>
<labelfor="towner">New owner</label><inputtype="text"id="towner"name="owner"placeholder="an organisation or a user"required>
129
<labelfor="tconfirm">Type <code>{{ repo.owner }}/{{ repo.name }}</code> to confirm</label><inputtype="text"id="tconfirm"name="confirm"requiredautocomplete="off">
130
<buttontype="submit">TRANSFER</button>
131
</form>
132
</details>
133
</div>
134
<divclass="danger-row">
135
<div><strong>{% if row.archived %}Bring this repository back{% else %}Archive this repository{% endif %}</strong><pclass="small mute">{% if row.archived %}It is archived: read-only for everyone, shown with a badge.{% if !row.archived_reason.is_empty() %} Reason: {{ row.archived_reason }}{% endif %}{% else %}Read-only for everyone, including you: no pushes, edits, issues, proposals or comments, until an admin brings it back. Say why, for whoever finds it later.{% endif %}</p></div>
136
<detailsclass="danger-act"><summaryclass="danger-btn">{% if row.archived %}Unarchive{% else %}Archive{% endif %}</summary>
{% if row.archived %}<inputtype="hidden"name="action"value="unarchive"><buttontype="submit">BRING IT BACK</button>{% else %}<inputtype="hidden"name="action"value="archive">
140
<labelfor="areason">Reason (optional)</label><textareaid="areason"name="reason"rows="2"maxlength="500"placeholder="Superseded by …"></textarea>
<div><strong>Delete wiki data</strong><pclass="small mute">{% if repo.wiki %}The wiki's repository moves to the trash with its history; a new first page starts a fresh one.{% else %}This repository has no wiki.{% endif %}</p></div>
147
{% if repo.wiki %}<detailsclass="danger-act"><summaryclass="danger-btn">Delete wiki data</summary>
<div><strong>Delete this repository</strong><pclass="small mute">The repository moves to the trash and is removed after the retention period.</p></div>