{% 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 "runner_update_fields.html" as ruf %} {% block title %}{{ org.name }} settings{% endblock %} {% block content %}

{{ org.name }} organisation settings · repositories

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

{{ n }}

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

{{ e }}

{% endif %}

Backups

Copy every repository {{ org.name }} owns, with its issues, proposals and wiki, hourly to a bucket or directory you control. Set up backups

Members

{% for (a, r) in members %}{% endfor %}
{{ a.username }}{{ r }}

Storage

Where the organisation's new repositories may live. Repositories that exist stay where they are.

Listing the organisation's own buckets keeps its data where those buckets are: the provider, the region, the country.

Teams

{% for (t, ms) in teams %}

{{ t.name }}: {% for a in ms %}{{ a.username }}{% if !loop.last %}, {% endif %}{% endfor %}{% if ms.is_empty() %}nobody yet{% endif %}

{% endfor %}

Runners

The OxygenFlow runners that may take this organisation's jobs: the site's, the organisation's, and those of its repositories.

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

Register a runner for the organisation 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 them 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 %}

Runner updates

The organisation's own runners can update themselves: off unless chosen. Try a build on a test group first (runners you pick, or a percentage of them, the same machines every time), then turn updates on for the rest. A runner's own setting wins over a group's, a group's over the organisation's, the organisation's over the site's.

{% let ou = updates.owners[0] %}
The organisation{% call ruf::policy_fields(ou, false) %}

Test groups

{% if updates.groups.is_empty() %}

None yet.

{% endif %} {% for gv in updates.groups %}{% let g = gv.g %}

{{ g.name }} {% if let Some(p) = g.percent %}{{ p }}%{% else %}chosen{% endif %} · {{ gv.members.len()|plural("runner", "runners") }} now

{% for m in gv.members %}{{ m }} {% endfor %}

{% call ruf::policy_fields(gv.policy, false) %}
Who is in it
{% for rv in updates.runners %}{% endfor %}
{% endfor %}

New test group

{% for rv in updates.runners %}{% endfor %}
{% if !updates.runners.is_empty() %}

The organisation's runners

{% for rv in updates.runners %}{% let r = rv.r %} {% endfor %}
RunnerRunsIts policyNowLast saidIts own settings
{{ r.name }}{% for g in rv.groups %} {{ g }}{% endfor %} {% if r.version.is_empty() %}unknown{% else %}flow {{ r.version }}{% endif %} {{ rv.effective_words() }}{{ rv.offer }} {% if r.update_note.is_empty() %}nothing yet{% else %}{{ r.update_note }}{% endif %}
{% call ruf::policy_fields(rv.policy, false) %}
{% endif %}
{% call w::panel("/orgs/" ~ org.name ~ "/settings", hooks, shell.csrf, "These hear every repository of the organisation, as well as each repository's own webhooks.") %} {% call va::panel("/orgs/" ~ org.name ~ "/settings", variables, shell.csrf, "Jobs of every repository of the organisation get these, beside the site's and each repository's own.") %} {% call se::panel("/orgs/" ~ org.name ~ "/settings", secrets, shell.csrf, "Jobs of every repository of the organisation may use these, beside the site's and each repository's own.") %} {% call ai::panel("/orgs/" ~ org.name ~ "/settings", assistants, shell.csrf, "Every repository of the organisation may ask these, beside the site's and its own.") %}
{% endblock %}