<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>
52
<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">
59
<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>
82
{% 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 %}
83
{% 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 %}
95
<tableclass="small">
96
{% for c in collaborators %}
97
<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>
98
<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">The repository moves to the trash and is removed after the retention period. Type <code>{{ repo.owner }}/{{ repo.name }}</code> to confirm.</p>