{% extends "base.html" %} {% import "webhooks_panel.html" as w %} {% import "assistants_panel.html" as ai %} {% import "variables_panel.html" as va %} {% import "secrets_panel.html" as se %} {% import "repo_tabs.html" as m %} {% block title %}Settings · {{ repo.owner }}/{{ repo.name }}{% endblock %} {% block bodyattrs %} data-repo="{{ repo.url }}"{% endblock %} {% block tabs %}{% call m::tabs(repo, "settings") %}{% endblock %} {% block content %}

Settings {{ repo.owner }}/{{ repo.name }}

{% if let Some(n) = notice %}

{{ n }}

{% endif %} {% if let Some(e) = error %}

{{ e }}

{% endif %}

General

Separated by spaces or commas; letters, digits and dashes. People find repositories by them under Explore.

Landing requirements

Git mirror

For tools that only speak Git (CI runners, IDEs): git clone {{ shell.base_url }}{{ repo.url }}.git. 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 {{ row.git_mirror_state|short }}.{% endif %}

Required checks

Any token with checks:write reports checks with POST {{ shell.base_url }}/api/v1/repos/{{ repo.owner }}/{{ repo.name }}/checks.

OxygenFlow

Pushes to this repository {% if flow_enabled %}start runs{% else %}do not start runs{% endif %} of its .flow/pipeline.kdl.

{% if site_admin %}

Runs use the site's runners, so only site administrators change this. It takes effect at the next push.

{% else %}

A site administrator turns OxygenFlow on or off here.

{% endif %}
{% if role == crate::auth::Role::Admin %}

Runners

The OxygenFlow runners that may take this repository's jobs: the site's, {{ row.owner }}'s, and this repository's own.

{% if let Some(t) = runner_token %}

Register a runner for this repository with:

flow runner register {{ shell.base_url }} --token {{ t }} --name NAME
{% endif %} {% if runners.is_empty() %}

None yet: runs wait until a runner that serves this repository is added.

{% else %}
{% for (r, serves, own) in runners %}{% endfor %}
RunnerStatusServesMachine
{{ r.name }}{{ r.status() }}{{ serves }}{% if r.arch.is_empty() %}unknown{% else %}{{ r.arch }} · {{ r.os }}{% endif %} {% if *own %}
{% endif %}
{% endif %}
{% 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.") %} {% call va::panel(repo.url ~ "/settings", variables, shell.csrf, "This repository's jobs get these, beside the ones the site and its owner set.") %} {% call se::panel(repo.url ~ "/settings", secrets, shell.csrf, "This repository's jobs may use these, beside the ones the site and its owner set.") %} {% call ai::panel(repo.url ~ "/settings", assistants, shell.csrf, "This repository may ask these, beside the ones the site and its owner provide.") %}

Collaborators

{% if collaborators.is_empty() %}

Nobody beyond the owner{% if !teams.is_empty() %} and the organisation's members{% endif %}.

{% else %} {% for c in collaborators %} {% endfor %}
{% if let Some(a) = c.account %}{{ a.username }}{% else if let Some(t) = c.team %}team {{ t.name }}{% endif %}{{ c.role }}
{% if let Some(a) = c.account %}{% else if let Some(t) = c.team %}{% endif %}
{% endif %}
{% if !teams.is_empty() %}
{% endif %}
Delete this repository

The repository moves to the trash and is removed after the retention period. Type {{ repo.owner }}/{{ repo.name }} to confirm.

{% endif %}
{% endblock %}